{"version":3,"file":"component---src-dynamic-page-templates-blog-article-tsx-02c52ca98f48bf3fd26f.js","mappings":"0JAsGA,IApFsD,SAAC,GAIhD,IAHLA,EAGI,EAHJA,MACAC,EAEI,EAFJA,OACAC,EACI,EADJA,gBAEMC,EAAsBC,EAAAA,SAAc,iBAAO,CAAEC,QAASC,EAAAA,GAAAA,aAA2B,IAEvF,OACE,uBAAKC,UAAU,4CACb,gBAAC,KAAD,CACEP,MAAOA,EACPC,OAAQA,EACRO,YAAaN,EACbO,aAAc,SAAAC,GACZ,OAAIA,EAEA,gBAAC,KAAD,CACEA,MAAOA,EACPC,IAAKD,EAAME,aAAeF,EAAMG,KAChCC,QAASX,EACTI,UAAU,sEAIP,kCAGXQ,kBAAmB,SAACC,GAClB,OAAQA,EAAWC,OAAOC,MAC1B,IAAK,oBACH,IAAMC,EAAkBH,EAAWI,mBAC7BC,EAAmBL,EAAWM,oBACpC,OAAKH,GAAoBE,EAIvB,uBAAKd,UAAU,oEACb,gBAAC,KAAD,CACEG,MAAOS,EACPR,IAAKQ,EAAgBP,aAAeO,EAAgBN,KACpDC,QAASX,EACTI,UAAU,4EAEZ,gBAAC,KAAD,CACEG,MAAOW,EACPV,IAAKU,EAAiBT,aAAeS,EAAiBR,KACtDC,QAASX,EACTI,UAAU,6EAdP,KAmBX,IAAK,mBACH,OACE,uBAAKA,UAAU,mFACb,yBAAOgB,UAAQ,EAACC,OAAK,EAACC,MAAI,EAACC,aAAW,EAACnB,UAAU,UAC/C,0BACEoB,IAAKX,EAAWY,UAChBV,KAAK,gBAMf,QAAS,OAAO,OAGlBW,eAAgB,SAACC,EAAkBC,GACoB,IAAD,EAApD,GAAqB,QAAjBD,EAAQZ,MAAmC,MAAjBY,EAAQjB,KACpC,OACE,gBAAC,IAAD,CACEmB,QAAQF,MAAAA,GAAA,UAAAA,EAASG,eAAT,eAAkBD,SAAU,QACpCE,IAAKJ,EAAQG,QAAQE,MAEpBJ,EAAW,CAACD,EAAQM,SAAS,Y,0FC/DjCC,EAiBX,SAAYC,GACVC,KAAKvC,MAAQwC,GAAAA,CAAKF,EAAM,gBAAiB,IACzCC,KAAKtC,OAASuC,GAAAA,CAAKF,EAAM,iBAAkB,IAC3CC,KAAKE,MAAQD,GAAAA,CAAKF,EAAM,gBAAiB,IACzCC,KAAKrC,gBAAkBsC,GAAAA,CAAKF,EAAM,0BAA2B,IAAII,KAAI,SAACC,GAEpE,OADsBH,GAAAA,CAAKG,EAAW,cAAe,KAErD,IAAK,oBAAqB,MAAO,CAC/B1B,OAAQuB,GAAAA,CAAKG,EAAW,SAAU,IAClCvB,mBAAoBoB,GAAAA,CAAKG,EAAW,iCAAkC,IACtErB,oBAAqBkB,GAAAA,CAAKG,EAAW,kCAAmC,KAE1E,IAAK,mBAAoB,MAAO,CAC9B1B,OAAQuB,GAAAA,CAAKG,EAAW,SAAU,IAClCf,UAAWY,GAAAA,CAAKG,EAAW,yCAA0C,KAEvE,QAAS,OAAOA,OAiETC,EAAwB,SAACN,GACpC,OAAO,IAAID,EAAeC,K,wECvG5B,IAnBsD,SAAC,GAA0C,IAAxCO,EAAuC,EAAvCA,OAAQC,EAA+B,EAA/BA,SAAUC,EAAqB,EAArBA,eACnEC,EAAY5C,EAAAA,OAAiC,MAKnD,OAJAA,EAAAA,WAAgB,WACd6C,EAAAA,EAAAA,QAAyBD,EAAUE,WAClC,IAGD,gCACE,2BAAS3C,UAAU,0CACjB,uBAAKA,UAAU,gGACf,sBAAIA,UAAU,uDAAuD4C,IAAKH,GAAYH,GACtF,uBAAKtC,UAAU,UACb,gBAAC,IAAD,CAAS6C,SAAUN,EAAUO,MAAON,S,0ICPjCO,EAKX,SAAYhB,GACVC,KAAKM,OAASL,GAAAA,CAAKF,EAAM,eAAgB,IACzCC,KAAKO,SAAWN,GAAAA,CAAKF,EAAM,gBAAiB,IAAIiB,QAAQ,KAAM,KAC9DhB,KAAKQ,eAAiBP,GAAAA,CAAKF,EAAM,wBAAyB,IA4CjDkB,EAAwB,SAACC,EAAkBC,EAAsBC,QAAyB,IAAzBA,IAAAA,EAAkB,IAC9F,IAAMrB,GAAOsB,EAAAA,EAAAA,gBAzCoB,cA0C3BC,GAA4CC,EAAAA,EAAAA,IAAyBxB,EAAKyB,mBAAoBL,EAAcC,EAAiBF,GACnI,OAAO,IAAIH,EAAeO,K,6FChC5B,IA3BiC,WAC/B,IAAQG,GAAMC,EAAAA,EAAAA,kBAAND,EACAE,GAAsBC,EAAAA,EAAAA,GAAU,CAAEC,UAAW,MAA7CF,kBACR,EAA8B9D,EAAAA,UAAe,GAAtCiE,EAAP,KAAgBC,EAAhB,KAEAlE,EAAAA,WAAgB,WACV8D,GACFI,GAAW,KAEZ,CAACJ,IAEJ,IAAMK,EAAY,wIAEdF,EAAU,UAAY,UAFR,WAGdH,EAAoB,iBAAmB,mBAE3C,OACE,gBAAC,IAAD,CACEM,MAAOR,EAAE,gBACTS,UAAWC,EAAAA,GAAAA,GACXnE,UAAWgE,EACXI,WAAY,YACZC,SAAUC,EAAAA,GAAAA,U,6DCHhB,IArByC,SAAC,GAEnC,IADLC,EACI,EADJA,aAGA,OACE,2BAASvE,UAAU,gCACjB,uBAAKA,UAAU,iBACb,uBAAKA,UAAU,oHACb,gBAAC,IAAD,CACEuE,aAAcA,EACdC,UAAU,aACVC,YAAY,4CACZC,eAAe,aACfC,SAAO,S,yGCoFnB,IAvFqD,SAACC,GAEpD,IAAMC,EAAahF,EAAAA,OAAiC,MAC9CiF,EAAUjF,EAAAA,OAAmC,MAC7CkF,EAAWlF,EAAAA,OAA6B,MACxCmF,EAAWnF,EAAAA,OAA6B,MAE9CA,EAAAA,WAAgB,WACd6C,EAAAA,EAAAA,OAAwBsC,EAASrC,SACjCD,EAAAA,EAAAA,QAAyBmC,EAAWlC,SACpCD,EAAAA,EAAAA,QAAyBoC,EAAQnC,SACjCD,EAAAA,EAAAA,QAAyBqC,EAASpC,WACjC,IAEH,IACEsC,EAWEL,EAXFK,QACA5E,EAUEuE,EAVFvE,YACAF,EASEyE,EATFzE,MACA+E,EAQEN,EARFM,SACAC,EAOEP,EAPFO,gBALF,EAYIP,EANFQ,oBAAAA,OANF,MAMwB,cANxB,EAOEC,EAKET,EALFS,WACAC,EAIEV,EAJFU,gBACAtF,EAGE4E,EAHF5E,UATF,EAYI4E,EAFFW,eAAAA,OAVF,MAUmBpB,EAAAA,GAAAA,MAVnB,EAWEqB,EACEZ,EADFY,cAGM/B,GAAMC,EAAAA,EAAAA,KAAND,EACF7D,EAAsBC,EAAAA,SAAc,iBAAO,CAAEC,QAASC,EAAAA,GAAAA,aAA2B,IACjF0F,EAAiD,eAAxBL,QAAyCM,EAClEC,EAAcN,GAAc5B,EAAE,oBAEpC,OAAQ,gCACN,2BACEzD,UAAS,yCAA0CA,GAAa,IAChE4F,MAAOH,GAAyB,CAAEN,gBAAiBA,IAEnD,uBAAKnF,UAAU,sCACf,uBAAK4F,MAAO,CAAET,gBAAiBA,IAC7B,uBAAKnF,UAAU,6BACb,uBAAKA,UAAU,uFACb,sBAAI4C,IAAKiC,EAAY7E,UAAU,8BAA8BiF,GAC7D,qBAAGrC,IAAKkC,EAAS9E,UAAU,6BAA6BK,GACxD,uBAAKuC,IAAKmC,GACPO,GAAmB,gBAAC,IAAD,CAAarB,MAAO0B,EAAahE,IAAK2D,EAAiBpB,UAAWqB,MAG1F,uBAAK3C,IAAKoC,EAAUhF,UAAS,gEAAiEG,EAAQ,GAAK,QAA9E,oBAC1BA,GACC,gBAAC,KAAD,CACEA,MAAOA,EACP0F,OAAO,YACPzF,IAAKD,EAAME,aAAeF,EAAMG,KAChCN,UAAU,kBACVO,QAASX,IAGZsF,GACC,yBACEjB,MAAOgB,EACPjE,UAAQ,EAACC,OAAK,EAACC,MAAI,EAACC,aAAW,EAC/BnB,UAAU,2CACV,0BACEoB,IAAK8D,EACLvE,KAAK,eAIV6E,GACC,0BACExF,UAAU,uBACVoB,IAAKoE,EACLM,MAAM,0EACNC,YAAY,IACZ9B,MAAM,gBACN+B,iBAAe,OAMxBP,GAAyBN,GAAmB,uBAAKnF,UAAU,sBAAsB4F,MAAO,CAAET,gBAAiBA,S,0IChFrGc,EAWX,SAAYlE,GACV,IAAMmE,EAAYjE,GAAAA,CAAKF,EAAM,mCAAoC,IACjEC,KAAKiD,QAAUhD,GAAAA,CAAKF,EAAM,gBAAiB,IAC3CC,KAAK3B,YAAc4B,GAAAA,CAAKF,EAAM,oBAAqB,IACnDC,KAAK7B,MAAQ+F,EAAUC,SAAS,SAAWlE,GAAAA,CAAKF,EAAM,+BAAiC,GACvFC,KAAKqD,WAAapD,GAAAA,CAAKF,EAAM,oBAAqB,IAClDC,KAAKkD,SAAWgB,EAAUC,SAAS,SAAWlE,GAAAA,CAAKF,EAAM,mCAAqC,GAC9FC,KAAKsD,gBAAkBrD,GAAAA,CAAKF,EAAM,0BAA2B,IAC7DC,KAAKmD,gBAAkBlD,GAAAA,CAAKF,EAAM,kBAAmB,IACrDC,KAAKoD,oBAAsBnD,GAAAA,CAAKF,EAAM,+BAAgC,IACtEC,KAAKwD,cAAgBvD,GAAAA,CAAKF,EAAM,yBAsEvBqE,EAA2B,SAAClD,EAAkBC,EAAsBC,QAAyB,IAAzBA,IAAAA,EAAkB,IACjG,IAAMrB,GAAOsB,EAAAA,EAAAA,gBAnEuB,cAoE9BuB,GAAkDrB,EAAAA,EAAAA,IAAyBxB,EAAKyB,mBAAoBL,EAAcC,EAAiBF,GACzI,OAAO,IAAI+C,EAAkBrB,K,4HCjE/B,EAlC8C,SAAC,GAAsC,IAApCyB,EAAmC,EAAnCA,KAAMC,EAA6B,EAA7BA,YAAaC,EAAgB,EAAhBA,UAG5DC,EADe3G,EAAAA,WAAiB4G,EAAAA,GAA9BC,SACsB,MAAQ,QAChCC,EAAoB9G,EAAAA,OAA6B,MACvD,EAAkCA,EAAAA,WAA3B+G,EAAP,KAAkBC,EAAlB,KAcA,OAZAhH,EAAAA,WAAgB,WACT+G,EAGCL,EACFK,EAAUE,OAEVF,EAAUG,UALZF,EAAanE,EAAAA,EAAAA,SAA0BiE,EAAkBhE,YAQ1D,CAACiE,EAAWL,IAGb,uBAAKvG,UAAU,+DACb,uBAAK4C,IAAK+D,GACR,0BAAQ3G,UAAU,sCAChB,wBAAMA,UAAU,gCAAgCqG,IAElD,0BAAQrG,UAAU,oDAChB,gBAAC,IAAD,CAAMA,UAAU,0CAA0C4F,MAAO,CAAEoB,OAAQR,KAC3E,wBAAMxG,UAAU,gCAAgCsG,O,uDCuC1D,EA3DoD,SAAC,GAS9C,IARLW,EAQI,EARJA,gBACAC,EAOI,EAPJA,YACAC,EAMI,EANJA,YACAtB,EAKI,EALJA,OACAzF,EAII,EAJJA,IACAJ,EAGI,EAHJA,UACA4F,EAEI,EAFJA,MACArF,EACI,EADJA,QAGM6G,EAAwBvH,EAAAA,OAA6B,MACrDwH,EAAoBxH,EAAAA,OAA6B,MACjDyH,EAAoBzH,EAAAA,OAA6B,MACvDA,EAAAA,WAAgB,WACd6C,EAAAA,EAAAA,SAA0B0E,EAAsBzE,QAAS0E,EAAkB1E,QAAS,IACpFD,EAAAA,EAAAA,SAA0B0E,EAAsBzE,QAAS2E,EAAkB3E,QAAS,MACnF,IAEH,IAAM4E,EAAqB1H,EAAAA,SAAc,iBAAO,CAAEmH,OAAQ,UAAW,IAErE,OACE,gCACE,uBAAKpE,IAAKwE,EAAuBpH,UAAU,UACzC,gBAAC,KAAD,CACEG,MAAO8G,EACPpB,OAAQA,EACRzF,IAAKA,EACLJ,UAAWA,EACX4F,MAAOA,EACPrF,QAASA,KAGZ2G,GACC,uBAAKtE,IAAKyE,EAAmBrH,UAAU,gCACrC,gBAAC,KAAD,CACEG,MAAO+G,EACPrB,OAAQA,EACR7F,UAAWA,EACX4F,MAAO2B,EACPhH,QAASA,KAId4G,GACC,uBAAKvE,IAAK0E,EAAmBtH,UAAU,gCACrC,gBAAC,KAAD,CACEG,MAAOgH,EACPtB,OAAQA,EACR7F,UAAWA,EACX4F,MAAO2B,EACPhH,QAASA,OCzCfiH,EAAgB3H,EAAAA,YAAqD,SAAC4H,EAA2B7E,GACrG,IACEzC,EAaEsH,EAbFtH,MACA+E,EAYEuC,EAZFvC,SACAwC,EAWED,EAXFC,SACAzD,EAUEwD,EAVFxD,MACA5D,EASEoH,EATFpH,YACAsH,EAQEF,EARFE,KACAlG,EAOEgG,EAPFhG,OACAmE,EAME6B,EANF7B,MACAgC,EAKEH,EALFG,SACAC,EAIEJ,EAJFI,MACAxC,EAGEoC,EAHFpC,WAXF,EAcIoC,EAFFK,gBAAAA,OAZF,WAcIL,EADF9C,QAAAA,OAbF,SAeQzB,EAAarD,EAAAA,WAAiBkI,EAAAA,GAA9B7E,SACF8E,GAAaC,EAAAA,EAAAA,IAAaN,EAAMzE,GACtC,EAA8BrD,EAAAA,UAAe,GAAtCqI,EAAP,KAAgBC,EAAhB,KACQ1E,GAAMC,EAAAA,EAAAA,kBAAND,EAEF2E,EAASvI,EAAAA,OAA6B,MACtCwI,EAAWxI,EAAAA,OAA6B,MACxCyI,EAAYzI,EAAAA,OAA6B,MAC/CA,EAAAA,WAAgB,WACV8E,IACGjC,EAAAA,EAAAA,SAA0B0F,EAAOzF,UACpCD,EAAAA,EAAAA,QAAyB0F,EAAOzF,SAE7BD,EAAAA,EAAAA,SAA0B2F,EAAS1F,UACtCD,EAAAA,EAAAA,QAAyB2F,EAAS1F,SAE/BD,EAAAA,EAAAA,SAA0B4F,EAAU3F,UACvCD,EAAAA,EAAAA,QAAyB4F,EAAU3F,YAGtC,CAACgC,IAEJ,IAAM/E,EAAsBC,EAAAA,SAAc,iBAAO,CAAEC,QAASC,EAAAA,GAAAA,aAA2B,IACjFwI,EAAa1I,EAAAA,SAAc,WAC/B,OAAOiI,OACHpC,EACA,CAAE8C,YAAaC,EAAAA,GAAAA,UAA4BzB,OAAQ,UACtD,CAACc,IAEEY,EAAoBd,IAAae,EAAAA,GAAAA,KAA4BlF,EAAE,oBAAsBA,EAAE,eACvFmF,EAAsB,SAACnH,GAC3B,OACE,gCACE,uBAAKzB,UAAU,mGAAmG4C,IAAKwF,GACpHjI,GACC,gBAAC,EAAD,CACE8G,gBAAiB9G,EACjB+G,YAAaQ,EAAS,GACtBP,YAAaO,EAAS,GACtB7B,OAAO,YACPzF,IAAKD,EAAME,aAAe4D,EAC1BjE,WAAcyB,GAAU,uEAAf,wBAA4GmE,EACrHA,MAAO2C,EACPhI,QAASX,IAGZsF,GACC,yBACElE,UAAQ,EAACC,OAAK,EAACC,MAAI,EAACC,aAAW,EAC/BnB,UAAS,UAAWyB,GAAU,uEAArB,wBAAkHmE,EAC3HA,MAAO2C,GAEP,0BACEnH,IAAK8D,EACLvE,KAAK,gBAKb,uBAAKX,UAAU,+CACb,uBAAKA,UAAU,QAAQ4C,IAAKyF,GAC1B,wBAAMrI,UAAU,mCAAmCiE,GACnD,wBAAMjE,UAAU,gDACbK,GAA4B2H,IAGjC,uBAAKhI,UAAU,6BAA6B4C,IAAK0F,GAC/C,gBAAC,EAAD,CACE/B,UAAW2B,EACX7B,KAAMhB,GAAcqD,EACpBpC,YAAsB7C,EAAThC,EAAW,cAAmB,6BAQvD,OACE,uBAAKmB,IAAKA,EAAK5C,UAAS,wBAAyByB,EAAS,iBAAmB,IAC3EoH,YAAa,kBAAMV,GAAW,IAC9BW,aAAc,kBAAMX,GAAW,KAE9B1G,EACC,gBAAC,EAAAsH,KAAD,CAAMC,GAAE,IAAMpB,EAAN,IAAkBnG,EAAUzB,UAAc6H,EAAL,qBAC1Ce,EAAoBnH,IAEvB,uBAAKzB,UAAc6H,EAAL,qBACXe,EAAoBnH,QAM/B+F,EAAcyB,YAAc,gBAE5B,S,6FChIMC,EAAgB,CACpBC,WAAY,CACV,yEACA,yEACA,2EAEFzJ,OAAQ,CACN,gCACA,gCACA,kCAsCJ,IAlCgE,SAAC,GAA4B,IAA1B0J,EAAyB,EAAzBA,aAAcC,EAAW,EAAXA,KACvE3C,EAAa7G,EAAAA,WAAiB4G,EAAAA,GAA9BC,SACF4C,EAAezJ,EAAAA,OAAoC,IACzDA,EAAAA,WAAgB,WACT6G,GACHhE,EAAAA,EAAAA,gBAAiC4G,EAAa3G,WAE/C,CAAC+D,IAEJ,IAAMkB,EAAWe,EAAAA,GAAAA,KACjB,OACE,2BAAS3I,UAAU,sDACjB,uBAAKA,UAAU,sCACf,uBAAKA,UAAU,4CACb,sBAAIA,UAAU,oEAAoEqJ,GACjFD,GAAgBA,EAAajH,KAAI,SAACoH,EAASC,GAC1C,IAAMC,EAAU7B,EAAN,IAAmB2B,EAAQ3B,SAAU5E,QAAQ,OAAQ,KAAK0G,cACpE,OACE,uBAAK1J,UAAS,GAAKkJ,EAAcC,WAAWK,EAAQN,EAAcC,WAAWQ,QAAWC,IAAKJ,GAC3F,gBAAC,IAAD,iBACMD,EADN,CAEE3D,MAAOsD,EAAcxJ,OAAO8J,GAC5B5B,SAAU6B,EACV9E,QAAS+B,EACT9D,IAAK,SAACiH,GAAD,OAAwBP,EAAa3G,QAAQ6G,GAASK,c,gKC5B9DC,EAUX,SAAY/H,GACV,IAAMgI,EAAmB9H,GAAAA,CAAKF,EAAM,uCAAwC,IAC5EC,KAAKgI,GAAK/H,GAAAA,CAAKF,EAAM,KAAM,IAC3BC,KAAK7B,MAAQ4J,EAAiB5D,SAAS,SAAWlE,GAAAA,CAAKF,EAAM,mCAAqC,GAClGC,KAAKkD,SAAW6E,EAAiB5D,SAAS,SAAWlE,GAAAA,CAAKF,EAAM,uCAAyC,GACzGC,KAAK0F,SAAWzF,GAAAA,CAAKF,EAAM,yBAA0B,IACrDC,KAAKiC,MAAQhC,GAAAA,CAAKF,EAAM,cAAe,IACvCC,KAAK2F,KAAO,IAAIsC,KAAKhI,GAAAA,CAAKF,EAAM,yBAA0B,KAC1DC,KAAKP,OAASQ,GAAAA,CAAKF,EAAM,cAAe,IACxCC,KAAK4F,SAAW3F,GAAAA,CAAKF,EAAM,8BAA+B,KASjDmI,EAIX,SAAYnI,GACVC,KAAKqH,KAAOpH,GAAAA,CAAKF,EAAM,aAAc,IACrC,IAAMoI,EAAQ,IAAIC,EAAoBrI,EAAKoI,MAAO,IAClDnI,KAAKoH,aAAee,EAAMf,cAIjBgB,EAAb,WAGE,WAAYrI,EAA2CsI,GACrDrI,KAAKoH,aAAerH,EACjBuI,OAAOC,SACPpI,KAAI,SAACqI,GACJ,OAAO,IAAIV,EAA2BU,MAEtCH,EACFrI,KAAKyI,yBAAyBJ,IAE9BrI,KAAK0I,qBACL1I,KAAK2I,kBAbX,2BAiBUC,QAAR,SAAgBjD,GACd,OAAe,MAARA,EAAeA,EAAKiD,UAAY,GAlB3C,EAqBUF,mBAAR,WAAoC,IAAD,OACjC1I,KAAKoH,aAAayB,MAAK,SAACC,EAA+BC,GACrD,OAAO,EAAKH,QAAQG,EAAEpD,MAAQ,EAAKiD,QAAQE,EAAEnD,UAvBnD,EA2BUgD,eAAR,WACE3I,KAAKoH,aAAepH,KAAKoH,aAAa4B,MAAM,EAAG,IA5BnD,EA+BUP,yBAAR,SAAiCJ,GAC/B,IAAMY,EAAgBjJ,KAAKoH,aAAakB,QAAO,SAAAf,GAAO,OAAIA,EAAQS,KAAOK,KACzErI,KAAKoH,aAAe6B,EAAcJ,MAAK,iBAAM,GAAMK,KAAKC,YAAUH,MAAM,EAAG,IAjC/E,KA2EaI,EAA6B,SAAClI,EAAkBmH,GAC3D,IAAMtI,GAAOsB,EAAAA,EAAAA,gBAvCyB,cAwCtC,OAAOxD,EAAAA,SAAc,WACnB,IAAMwL,GACJC,EAAAA,EAAAA,IAA4BvJ,EAAMmB,EAAUqI,EAAAA,GAAAA,MAAuBpJ,KAAI,SAACiH,GAAD,OAAuBA,EAAaoC,YAC7G,OAAO,IAAIpB,EAAoBiB,EAAyBhB,KACvD,CAACtI,EAAMmB,EAAUmH,M,wEClEtB,IAjEwC,SAAC,GAAyC,IAAvCxH,EAAsC,EAAtCA,SAAUC,EAA4B,EAA5BA,MAA4B,IAArB2I,OAAAA,OAAqB,SACzEC,EAAa5I,EAAQ,EACrB6I,EAAY9L,EAAAA,OAA6B,MACzC+L,EAAe/L,EAAAA,OAA6B,MAClD,EAAsBA,EAAAA,SAAuB,GAAtCgM,EAAP,KAAYC,EAAZ,KAyCA,OAvCAjM,EAAAA,WAAgB,WACd,IAAIqB,EACE6K,EAASJ,EAAUhJ,QACnBqJ,EAAYJ,EAAajJ,QAqBzBsJ,EAAiB,IAAIC,gBAAe,WACxC,GAAIP,EAAUhJ,QAAS,CACrB,IAAMwJ,EAAWC,WAAWC,iBAAiBV,EAAUhJ,SAA2BwJ,UAClFV,GAAUK,EAAOZ,KAAKoB,KAAKH,IArBvBI,EAAWrL,EAAOA,EAAKqL,WAAa,EAC1CrL,GAAQA,EAAKqL,SAAS,GAAGC,OACX,IAAV1J,IAGJ5B,EAAOwB,EAAAA,EAAAA,eACLqJ,EACAC,EACA,CACES,QAAQ,EACRC,QAAS,EACT5J,MAAOoI,KAAKyB,IAAI7J,IAElB4I,IAEGa,SAASA,GAhBO,IACfA,KA2BR,OAFAN,EAAeW,QAAQb,GAEhB,WACL7K,GAAQA,EAAKqL,SAAS,GAAGC,OACzBP,EAAeY,gBAEf,CAACnB,EAAY5I,EAAO2I,IAGtB,uBAAKzL,UAAS,iBAAkB0L,EAAa,mBAAqB,YAApD,+CACZ,uBACE9I,IAAK+I,EACL3L,UAAU,8EACV4F,MAAO,CAACkH,WAAYpB,EAAgBG,EAAN,KAAgB,EAAGkB,YAAarB,EAAa,EAAOG,EAAV,OAExE,gBAAC,KAAD,CAAiBpM,MAAOoD,KAE1B,uBACED,IAAKgJ,EACL5L,UAAU,8EACV4F,MAAO,CAACkH,WAAYpB,EAAgBG,EAAN,KAAgB,EAAGkB,YAAarB,EAAa,EAAOG,EAAV,OAExE,gBAAC,KAAD,CAAiBpM,MAAOoD,Q,mHCpD1BmK,EAASnN,EAAAA,YAA8C,SAAC4H,EAAoB7E,GAChF,IACEtC,EAaEmH,EAbFnH,KACA2M,EAYExF,EAZFwF,SACA5M,EAWEoH,EAXFpH,YACA6M,EAUEzF,EAVFyF,MACAhI,EASEuC,EATFvC,SACAiI,EAQE1F,EARF0F,MACAC,EAOE3F,EAPF2F,OACAC,EAME5F,EANF4F,SACAzH,EAKE6B,EALF7B,MACA5F,EAIEyH,EAJFzH,UACAsN,EAGE7F,EAHF6F,gBACAC,EAEE9F,EAFF8F,gBAZF,EAcI9F,EADF9C,QAAAA,OAbF,SAeQlB,GAAMC,EAAAA,EAAAA,kBAAND,EACF+J,EAAWD,GAAkBE,EAAAA,EAAAA,IAAcnN,GAAQ,GAEnDoN,EAAW7N,EAAAA,OAA6B,MACxC8N,EAAiB9N,EAAAA,OAA6B,MAC9C+N,EAAa/N,EAAAA,OAA6B,MAChDA,EAAAA,WAAgB,WACV8E,IACGjC,EAAAA,EAAAA,SAA0BgL,EAAS/K,UACtCD,EAAAA,EAAAA,QAAyBgL,EAAS/K,SAEhCgL,EAAehL,UAAYD,EAAAA,EAAAA,SAA0BiL,EAAehL,UACtED,EAAAA,EAAAA,QAAyBiL,EAAehL,SAEtCiL,EAAWjL,UAAYD,EAAAA,EAAAA,SAA0BkL,EAAWjL,UAC9DD,EAAAA,EAAAA,QAAyBkL,EAAWjL,YAGvC,CAAC2K,EAAiB3I,IACrB,IAAM/E,EAAsBC,EAAAA,SAAc,iBAAO,CAAEC,QAASC,EAAAA,GAAAA,aAA2B,IACjFwI,EAAa1I,EAAAA,SAAc,iBAAO,CAAEgO,MAAO,UAAW,IACtDC,EAAajO,EAAAA,SAAc,iBAAO,CAAE2I,YAAa,SAAU,IAEjE,OACE,uBAAK5F,IAAKA,EAAK5C,UAAS,WAAYsN,EAAkB,uDAAyD,6BAAvF,KAAsHtN,GAAa,KACzJ,uBAAKA,UAAS,wBAAyBsN,EAAkB,4CAA8C,IAAM1H,MAAOA,GAClH,uBAAK5F,UAAS,kEAAmEsN,EAAkB,sBAAwB,IAAM1K,IAAK8K,GACnIR,GACC,gBAAC,KAAD,CACE/M,MAAO+M,EACPrH,OAAO,YACP2C,YAAa,EACbpI,IAAK8M,EAAM7M,aAAeC,EAC1BN,UAAU,sCACV+N,SAAUxF,EACVhI,QAASX,IAGZsF,GACC,yBACElE,UAAQ,EAACC,OAAK,EAACC,MAAI,EAACC,aAAW,EAC/BnB,UAAU,0CACV4F,MAAOkI,GAEP,0BACE1M,IAAK8D,EACLvE,KAAK,gBAKZ2M,EACC,uBAAKtN,UAAU,wDAAwD4C,IAAK+K,GAC1E,qBAAG3N,UAAU,SAASM,GACtB,qBAAGN,UAAU,0CAA0CiN,GACvD,qBAAGjN,UAAU,SAASK,IACpBgN,GAAYG,IACZ,qBAAGxN,UAAU,6BACVqN,GAAY,gBAAC,IAAD,CAAM1L,IAAK0L,EAAUpJ,MAAM,WAAWjE,UAAU,wBAC5DwN,GAAY,gBAAC,IAAD,CAAM7L,IAAG,gBAAkB6L,GAAa/J,EAAE,sBAAwBnD,KAIrF,uBAAKN,UAAU,kDAAkD4C,IAAKgL,GACpE,yBAAItN,GACJ,yBAAI2M,GACJ,yBAAIG,GAAa3J,EAAE,iBAAT,KAA8B2J,GACxC,yBAAID,GACHE,GACC,qBAAGrN,UAAU,qCACX,gBAAC,IAAD,CAAM2B,IAAK0L,EAAUpJ,MAAM,oBAS3C+I,EAAO/D,YAAc,SAErB,O,2FC/Fa+E,EAYX,SAAYC,GACVjM,KAAK1B,KAAO2B,GAAAA,CAAKgM,EAAS,sBAAuB,IACjDjM,KAAKiL,SAAWhL,GAAAA,CAAKgM,EAAS,0BAA2B,IACzDjM,KAAK3B,YAAc4B,GAAAA,CAAKgM,EAAS,6BAA8B,IAC/DjM,KAAKkM,UAAYjM,GAAAA,CAAKgM,EAAS,0BAA2B,IAC1D,IAAME,EAAoBlM,GAAAA,CAAKgM,EAAS,wCAAyC,IACjFjM,KAAKkL,MAAQiB,EAAkBhI,SAAS,SAAWlE,GAAAA,CAAKgM,EAAS,oCAAsC,GACvGjM,KAAKkD,SAAWiJ,EAAkBhI,SAAS,SAAWlE,GAAAA,CAAKgM,EAAS,wCAA0C,GAC9GjM,KAAKmL,MAAQlL,GAAAA,CAAKgM,EAAS,uBAAwB,IACnDjM,KAAKoL,OAASnL,GAAAA,CAAKgM,EAAS,wBAAyB,IACrDjM,KAAKqL,SAAWpL,GAAAA,CAAKgM,EAAS,0BAA2B,IACzDjM,KAAKoM,SAAWnM,GAAAA,CAAKgM,EAAS,0BAA2B,M,0IC5BhDI,EAUX,SAAYtM,EAAsBuM,GAChCtM,KAAKiC,MAAQhC,GAAAA,CAAKF,EAAM,8BAA+B,IACvDC,KAAK3B,YAAc4B,GAAAA,CAAKF,EAAM,oCAAqC,IACnEC,KAAKuM,WAAatM,GAAAA,CAAKF,EAAM,qCAAsC,IACnEC,KAAKwM,OAASvM,GAAAA,CAAKF,EAAM,qCAAsC,IAC/DC,KAAKyM,aAAexM,GAAAA,CAAKF,EAAM,iCAAkC,IACjEC,KAAK0M,aAAezM,GAAAA,CAAKF,EAAM,mBAAoB,IAAMuM,EACzDtM,KAAK2M,QAAU1M,GAAAA,CAAKF,EAAM,4DAA6D,IACvFC,KAAK4M,QAAmF,SAA/BC,GAAYC,eACjE,OACA7M,GAAAA,CAAKF,EAAM,wCAAyC,KA4D/CgN,EAAa,SAAC7L,EAAkBC,EAAsBmL,GACjE,IAAMvM,GAAOsB,EAAAA,EAAAA,gBAzDS,cA0DhB2L,GAA0BC,EAAAA,EAAAA,IAAwBlN,EAAMoB,EAAcD,GAC5E,OAAO,IAAImL,EAAQW,EAASV,K,gOChD9B,EAlC+C,SAAC,GAAgD,IAA9CrK,EAA6C,EAA7CA,MAAOiL,EAAsC,EAAtCA,QAASvH,EAA6B,EAA7BA,KAAMwH,EAAuB,EAAvBA,OAAQC,EAAe,EAAfA,SACtElM,EAAarD,EAAAA,WAAiBkI,EAAAA,GAA9B7E,SACF8E,GAAaC,EAAAA,EAAAA,IAAaN,EAAMzE,GAChCsK,GAAWC,EAAAA,EAAAA,IAAc0B,GAEzB1M,EAAY5C,EAAAA,OAA6B,MACzCwP,EAAUxP,EAAAA,OAA6B,MAQ7C,OAPAA,EAAAA,WAAgB,WACd,IAAK6C,EAAAA,EAAAA,SAA0BD,EAAUE,SAAU,CACjD,IAAM2M,EAAoB,CAAC7M,EAAUE,QAAS0M,EAAQ1M,SACtDD,EAAAA,EAAAA,gBAAiC4M,MAElC,IAGD,2BAAStP,UAAU,yCACjB,uBAAKA,UAAU,sCACf,uBAAKA,UAAU,6BACb,uBAAKA,UAAU,6CACb,sBAAIA,UAAU,6BAA6B4C,IAAKH,GAAYwB,IAE9D,uBAAKjE,UAAU,6CACb,uBAAKA,UAAU,cAAc4C,IAAKyM,GAChC,qBAAGrP,UAAU,6BAA6BkP,GACzC1B,GAAY,gBAACzE,EAAA,EAAD,CAAM/I,UAAU,6BAA6B2B,IAAG,gBAAkB6L,GAAa2B,GAC5F,wBAAMnP,UAAU,8BAA8BgI,GAC9C,wBAAMhI,UAAU,SAASoP,Q,sBCzBrC,EAboD,SAACG,GACnD,IAAMC,IAAaD,EAAcjP,KAAKmP,OACtC,OAAO,gCACL,uBAAKzP,UAAU,gJACdwP,EACC,2BAASxP,UAAU,0FACjB,gBAACgN,EAAA,EAAD,iBAAYuC,EAAZ,CAA2BjC,iBAAe,EAACC,iBAAe,MAE1D,uBAAKvN,UAAU,4B,gCC+BvB,EA/BgD,SAAC,GAA6C,IAA3C0P,EAA0C,EAA1CA,aAAczL,EAA4B,EAA5BA,MAAO2D,EAAqB,EAArBA,SAAU6B,EAAW,EAAXA,KACxEhG,GAAMC,EAAAA,EAAAA,kBAAND,EACFkM,EAAc,CAClB,CACE1L,MAAOR,EAAE,eACTmM,KAAM,KAER,CACE3L,MAAOR,EAAE,UAAUiM,GACnBE,KAAK,IAAKF,GAEZ,CACEzL,MAAOA,EACP2L,KAAK,IAAKF,EAAN,IAAsB9H,EAAtB,IAAkC6B,IAG1C,OACE,2BAASzJ,UAAU,oDAEf2P,EAAYxN,KAAI,SAACqI,EAAShB,GACxB,OACE,gBAACT,EAAA,EAAD,CAAMa,IAAKJ,EAAO7H,IAAK6I,EAAQoF,MAC7B,wBAAM5P,UAAU,eAAewK,EAAQvG,OAAeuF,EAAQmG,EAAYhG,OAAS,GAAM,wBAAM3J,UAAU,eAAe,W,iGC4JhI6P,GAA6BC,E,SAAAA,IA/EqB,SAAC,GAgBlD,IAfLpJ,EAeI,EAfJA,SAeI,IAdJqJ,SACEC,EAaE,EAbFA,cACAC,EAYE,EAZFA,WACAC,EAWE,EAXFA,kBACAC,EAUE,EAVFA,gBACAC,EASE,EATFA,YACAC,EAQE,EARFA,aACAC,EAOE,EAPFA,gBACAC,EAME,EANFA,mBACAhB,EAKE,EALFA,cACAiB,EAIE,EAJFA,wBACAlN,EAGE,EAHFA,mBACAsB,EAEE,EAFFA,sBAGMnB,GAAMC,EAAAA,EAAAA,kBAAND,EACF7D,EAAsBC,EAAAA,SAAc,iBAAO,CAAEC,QAASC,EAAAA,GAAAA,aAA2B,IAEjFqI,EAASvI,EAAAA,OAA6B,MAO5C,OANAA,EAAAA,WAAgB,WACVuI,EAAOzF,SACTD,EAAAA,EAAAA,OAAwB0F,EAAOzF,WAEhC,IAGD,gBAAC,aAAD,CAA0BlD,MAAO,CAAEiH,SAAAA,IACjC,8BACE,gBAAC+J,EAAA,EAAD,iBAAYT,EAAmBC,KAEjC,wBAAMjQ,UAAU,eACd,gBAAC,EAAkBkQ,GAEjBxJ,GACA,gBAAC,EAAD,CACEgJ,aAAc/G,EAAAA,GAAAA,KACd1E,MAAOiM,EAAkBjM,MACzB2D,SAAUuI,EACV1G,KAAM2G,IAGV,2BAASpQ,UAAU,iHACjB,uBAAKA,UAAU,sBAAsB4C,IAAKwF,GACvCiI,GACC,gBAAC,KAAD,CACElQ,MAAOkQ,EACPxK,OAAO,YACPzF,IAAKiQ,EAAahQ,aAAe6P,EAAkBjM,MACnDjE,UAAU,gDACVO,QAASX,IAGZ0Q,GACC,yBAAOtP,UAAQ,EAACC,OAAK,EAACC,MAAI,EAACC,aAAW,EAACnB,UAAU,uDAC/C,0BACEoB,IAAKkP,EACL3P,KAAK,iBAMf,2BAASX,UAAU,2CACjB,gBAAC8B,EAAA,EAAmByO,IAEtB,gBAAC,EAAyBhB,GAC1B,gBAACnF,EAAA,EAAD,iBAAyBoG,EAAzB,CAAkDnH,KAAM5F,EAAE,8BAC1D,gBAACV,EAAA,EAAmBO,GACpB,gBAAC2C,EAAA,EAAsBrB,IAEzB,8BACE,gBAAC8L,EAAA,EAAWV,IAEd,gBAACW,EAAA,EAAD,UAMN,EA1JyC,SAAClJ,GACxC,IAAkBmJ,EAAoB/Q,EAAAA,WAAiBkI,EAAAA,GAA/C7E,SACR,EAAgCrD,EAAAA,SAAe+Q,GAAxC1N,EAAP,KAAiB2N,EAAjB,KAKMC,EAAW,mDACXtF,EAAWvJ,GAAAA,CAAKwF,EAAD,GAAWqJ,EAAY,IACtCC,EAAW9O,GAAAA,CAAKwF,EAAO,yBAA0B,IACjDuJ,EAAe/O,GAAAA,CAAKwF,EAAO,oBAAqB,IAChDuH,EAAU,IAAIX,EAAAA,GAAJ,iBAAiB7C,EAAjB,CAA2BuF,SAAAA,IAAYC,GACjDhB,GAAgBiB,EAAAA,EAAAA,GAAiB/N,EAAU,qBAC3C+M,GAAaiB,EAAAA,EAAAA,GAAchO,EAAU,oBAAqB8N,GAC1DT,GAAqBlO,EAAAA,EAAAA,GAAsBJ,GAAAA,CAAKwF,EAAD,GAAWqJ,EAAY,KACtEZ,EAAmC,CACvCjM,MAAOhC,GAAAA,CAAKwF,EAAUqJ,EAAX,eAAmC,IAC9C5B,QAASjN,GAAAA,CAAKwF,EAAUqJ,EAAX,cAAkC,IAC/CnJ,KAAM,IAAIsC,KAAKhI,GAAAA,CAAKwF,EAAUqJ,EAAX,0BAA8C,KACjE3B,OAAQlN,GAAAA,CAAKwF,EAAUqJ,EAAX,+CAAmE,IAC/E1B,UAAa+B,EAAAA,EAAAA,IAAYZ,EAAmB9Q,OAApC,QAEJ0Q,EAAkBlO,GAAAA,CAAKwF,EAAUqJ,EAAX,+BAAmD,IAAI9N,QAAQ,OAAQ,KAAK0G,cAClG0G,EAAcnO,GAAAA,CAAKwF,EAAUqJ,EAAX,eAAmC,IACrDM,EAAmBnP,GAAAA,CAAKwF,EAAUqJ,EAAX,2CAA+D,IACtFT,EAAee,EAAiBjL,SAAS,SAAWlE,GAAAA,CAAKwF,EAAUqJ,EAAX,uCAA4D,GACpHR,EAAkBc,EAAiBjL,SAAS,SAAWlE,GAAAA,CAAKwF,EAAUqJ,EAAX,2CAAgE,GAC3HvB,EAAgB,IAAIvB,EAAAA,EAAS/L,GAAAA,CAAKwF,EAAUqJ,EAAX,2BAA+C,KAChFzG,EAAmBpI,GAAAA,CAAKwF,EAAO,6CAA8C,IAK7EsI,EAAW,CACfC,cAAAA,EACAC,WAAAA,EACAC,kBAAAA,EACAC,gBAAAA,EACAC,YAAAA,EACAC,aAAAA,EACAC,gBAAAA,EACAC,mBAAAA,EACAhB,cAAAA,EACAiB,yBAd8BpF,EAAAA,EAAAA,IAA2BlI,EAAUmH,GAenE/G,oBAdyBL,EAAAA,EAAAA,IAAsBC,EAAU,qBAezD0B,uBAd4BwB,EAAAA,EAAAA,IAAyBlD,EAAU,oBAAqB,wBAiBtF,OACE,gBAACmO,EAAA,EAAD,CAAQrC,QAASA,EAAS9L,SAAUA,EAAU2N,YAAaA,GACzD,gBAAChB,EAAD,CAA4BE,SAAUA,O,sBCxF5C,IAAIlQ,EAAQ,EAAQ,OAEpB,SAASyR,EAAM7J,GACX,OAAO5H,EAAM0R,cAAc,MAAM9J,EAAM,CAAC5H,EAAM0R,cAAc,OAAO,CAAC,GAAK,YAAY,EAAI,gBAAgB,KAAO,OAAO,IAAM,IAAI1R,EAAM0R,cAAc,OAAO,CAAC,GAAK,YAAY,YAAY,YAAY,EAAI,qDAAqD,KAAO,OAAO,IAAM,MAGvRD,EAAKE,aAAe,CAAC,GAAK,QAAQ,YAAY,WAAW,MAAQ,KAAK,OAAS,KAAK,QAAU,aAE9FC,EAAOC,QAAUJ,EAEjBA,EAAKK,QAAUL","sources":["webpack://extra-hut/./src/components/ArticleContent/index.tsx","webpack://extra-hut/./src/components/ArticleContent/model.ts","webpack://extra-hut/./src/components/ClientsSection/index.tsx","webpack://extra-hut/./src/components/ClientsSection/model.ts","webpack://extra-hut/./src/components/FloatingButton/index.tsx","webpack://extra-hut/./src/components/Footer/index.tsx","webpack://extra-hut/./src/components/ImageVideoSection/index.tsx","webpack://extra-hut/./src/components/ImageVideoSection/model.ts","webpack://extra-hut/./src/components/PlusButton/index.tsx","webpack://extra-hut/./src/components/ParallaxImage/index.tsx","webpack://extra-hut/./src/components/ImageWithText/index.tsx","webpack://extra-hut/./src/components/LastArticlesSection/index.tsx","webpack://extra-hut/./src/components/LastArticlesSection/model.ts","webpack://extra-hut/./src/components/Marquee/index.tsx","webpack://extra-hut/./src/components/Person/index.tsx","webpack://extra-hut/./src/components/Person/model.ts","webpack://extra-hut/./src/components/SeoComponent/model.ts","webpack://extra-hut/./src/components/ArticleHeader/index.tsx","webpack://extra-hut/./src/components/ArticleAuthorSection/index.tsx","webpack://extra-hut/./src/components/Breadcrumbs/index.tsx","webpack://extra-hut/./src/dynamicPageTemplates/blog-article.tsx","webpack://extra-hut/./src/images/plus.svg"],"sourcesContent":["import * as React from 'react'\nimport { RichTextElement, ImageElement } from '@kentico/gatsby-kontent-components'\nimport Link from '../Link'\nimport { ArticleContent as ArticleContentClass } from './model'\nimport { ImageQuality } from '../../common/typings/enums'\nimport './style.scss'\n\ninterface DOMNode {\n name: string\n type: string\n attribs: {\n [name: string]: string;\n }\n children: {\n [name: string]: string;\n }[]\n}\n\nconst ArticleContent: React.FC = ({\n value,\n images,\n modular_content,\n}) => {\n const imageQualityOptions = React.useMemo(() => ({ quality: ImageQuality.OPTIMIZED }), [])\n\n return (\n
\n {\n if (image) {\n return (\n \n )\n } else {\n return <>\n }\n }}\n resolveLinkedItem={(linkedItem: ArticleContentClass['modular_content'][0]) => {\n switch (linkedItem.system.type) {\n case 'two_column_images': {\n const imageLeftColumn = linkedItem.image_first_column\n const imageRightColumn = linkedItem.image_second_column\n if (!imageLeftColumn || !imageRightColumn) {\n return null\n }\n return (\n
\n \n \n
\n )\n }\n case 'video_in_article': {\n return (\n
\n \n
\n )\n }\n default: return null\n }\n }}\n resolveDomNode={(domNode: DOMNode, domToReact: (el: {[name: string]: string }[]) => React.ReactNode) => {\n if (domNode.type === 'tag' && domNode.name === 'a') {\n return (\n \n {domToReact([domNode.children[0]]) }\n \n )\n }\n }}\n />\n
\n )\n}\n\nexport default ArticleContent\n","import { graphql } from 'gatsby'\nimport _get from 'lodash/get'\n\n/* Kentico model: Blog Article - Content */\ninterface KenticoBlogArticleContent extends KontentItem {\n value: KontentRichTextElement\n images: {\n url: KontentTextElement\n image_id: KontentTextElement\n height: KontentNumberElement\n width: KontentNumberElement\n description: KontentTextElement\n }[]\n links: {\n url: KontentTextElement\n link_id: KontentTextElement\n }\n modular_content: KontentElement\n}\n\ntype Image = {\n url: string\n image_id: string\n height: number\n width: number\n name: string\n description: string\n}\n\nexport class ArticleContent {\n value: string\n images: Image[]\n links: {\n url: string\n link_id: string\n }[]\n modular_content: {\n system: {\n codename: string\n type: string\n }\n image_first_column?: Image\n image_second_column?: Image\n video_url?: string\n }[]\n\n constructor(data: KenticoBlogArticleContent) {\n this.value = _get(data, 'content.value', '')\n this.images = _get(data, 'content.images', [])\n this.links = _get(data, 'content.links', '')\n this.modular_content = _get(data, 'content.modular_content', []).map((component: KontentElement) => {\n const componentType = _get(component, 'system.type', '')\n switch (componentType) {\n case 'two_column_images': return {\n system: _get(component, 'system', {}),\n image_first_column: _get(component, 'elements.first_column.value[0]', {}),\n image_second_column: _get(component, 'elements.second_column.value[0]', {}) \n }\n case 'video_in_article': return {\n system: _get(component, 'system', {}),\n video_url: _get(component, 'elements.video_in_article.value[0].url', '')\n }\n default: return component\n }\n })\n }\n}\n\nexport const richTextContentFragment = graphql`\n fragment kontent_item_rich_text_element_valueFragment on kontent_item_rich_text_element_value {\n value\n images {\n url\n image_id\n height\n width\n description\n }\n links {\n url_slug\n link_id\n }\n modular_content {\n ... on kontent_item_two_column_images {\n elements {\n first_column {\n value {\n url\n width\n height\n name\n description\n }\n }\n second_column {\n value {\n url\n width\n height\n name\n description\n }\n }\n }\n system {\n codename\n type\n }\n }\n ... on kontent_item_video_in_article {\n id\n elements {\n video_in_article {\n value {\n url\n }\n }\n }\n system {\n codename\n type\n }\n }\n }\n }\n`\n\nexport const useArticleContentData = (data: KenticoBlogArticleContent) => {\n return new ArticleContent(data)\n}","import * as React from 'react'\nimport { ClientsSection as ClientsSectionClass } from './model'\nimport Marquee from '../Marquee'\nimport { AnimationService } from '../../common/AnimationService'\nimport './style.scss'\n\nconst ClientsSection: React.FC = ({ header, richText, scrollingSpeed }) => {\n const headerRef = React.useRef(null)\n React.useEffect(() => {\n AnimationService.slideUp(headerRef.current)\n }, [])\n\n return (\n <>\n
\n
\n

{header}

\n
\n \n \n \n \n )\n}\n\nexport default ClientsSection\n","import { graphql, useStaticQuery } from 'gatsby'\nimport { filterPageDataByLanguage } from '../../common/serviceHelpers'\nimport _get from 'lodash/get'\n\n/* Kentico model: Clients Section */\nexport interface KenticoClientsSection extends KontentItem {\n header: KontentTextElement\n clients: KontentRichTextElement\n scrolling_speed: KontentNumberElement\n}\n\nexport class ClientsSection {\n header: string\n richText: string\n scrollingSpeed: number\n \n constructor(data: KenticoClientsSection) {\n this.header = _get(data, 'header.value', '')\n this.richText = _get(data, 'clients.value', '').replace(/ /g, '\\u00a0')\n this.scrollingSpeed = _get(data, 'scrolling_speed.value', 1)\n }\n}\n\nexport const clientsSectionFragment = graphql`\nquery ClientsSectionQuery {\n allKontentItemPage {\n nodes {\n elements {\n content {\n value {\n ... on kontent_item_clients_scroll_section {\n elements {\n ...kontent_item_clients_scroll_section_elementsFragment\n }\n preferred_language\n system {\n codename\n }\n }\n }\n }\n }\n system {\n codename\n }\n }\n }\n}`\n\nexport const clientsSectionElementsFragment = graphql`\n fragment kontent_item_clients_scroll_section_elementsFragment on kontent_item_clients_scroll_section_elements {\n header {\n value\n }\n clients {\n value\n }\n scrolling_speed {\n value\n }\n }\n`\n\nexport const useClientsSectionData = (language: string, pageCodename: string, sectionCodename = '') => {\n const data = useStaticQuery(clientsSectionFragment)\n const clientsSectionData: KenticoClientsSection = filterPageDataByLanguage(data.allKontentItemPage, pageCodename, sectionCodename, language)\n return new ClientsSection(clientsSectionData)\n}","import * as React from 'react'\nimport ArrowButton from '../ArrowButton'\nimport { useTranslation } from 'gatsby-plugin-react-i18next'\nimport { useScroll } from '../../hooks/useScroll'\nimport { ArrowDirection, ArrowColor } from '../../common/typings/enums'\nimport './style.scss'\n\nconst FloatingButton: React.FC = () => {\n const { t } = useTranslation()\n const { isThresholdPassed } = useScroll({ threshold: 100 })\n const [started, setStarted] = React.useState(false)\n\n React.useEffect(() => {\n if (isThresholdPassed) {\n setStarted(true)\n }\n }, [isThresholdPassed])\n\n const buttonStyles = `FloatingButton m-s flex items-center FontM fixed \n bottom-mobile-xs lg:bottom-xs right-mobile-s lg:right-s opacity-0 z-40 \n ${started ? 'visible' : 'hidden'} \n ${isThresholdPassed ? 'animate-fadeIn' : 'animate-fadeOut'}`\n\n return (\n \n )\n}\n\nexport default FloatingButton\n","import * as React from 'react'\nimport LinksGrid from '../LinksGrid'\nimport { LinksGrid as LinksGridClass } from '../LinksGrid/model'\nimport './style.scss'\n\nconst Footer: React.FC = ({\n linksColumns,\n}) => {\n\n return (\n
\n
\n
\n \n
\n
\n
\n )\n}\n\nexport default Footer\n","import * as React from 'react'\nimport { ImageElement } from '@kentico/gatsby-kontent-components'\nimport { useTranslation } from 'react-i18next'\nimport { ArrowDirection } from '../../common/typings/enums'\nimport ArrowButton from '../ArrowButton'\nimport { ImageVideoSection as ImageVideoSectionClass } from './model'\nimport { AnimationService } from '../../common/AnimationService'\nimport { ImageQuality } from '../../common/typings/enums'\nimport './style.scss'\n\nexport interface ImageVideoProps extends ImageVideoSectionClass {\n className?: string\n arrowDirection?: ArrowDirection\n}\n\nconst ImageVideoSection: React.FC = (imageVideoSectionData) => {\n\n const headingRef = React.useRef(null)\n const textRef = React.useRef(null)\n const arrowRef = React.useRef(null)\n const imageRef = React.useRef(null)\n\n React.useEffect(() => {\n AnimationService.fadeIn(imageRef.current)\n AnimationService.slideUp(headingRef.current)\n AnimationService.slideUp(textRef.current)\n AnimationService.slideUp(arrowRef.current)\n }, [])\n\n const {\n heading,\n description,\n image,\n videoUrl,\n backgroundColor,\n backgroundColorArea = 'content box',\n buttonText,\n buttonTargetUrl,\n className,\n arrowDirection = ArrowDirection.RIGHT,\n embeddedVideo\n } = imageVideoSectionData\n\n const { t } = useTranslation()\n const imageQualityOptions = React.useMemo(() => ({ quality: ImageQuality.OPTIMIZED }), [])\n const backgroundUnderSpacer = (backgroundColorArea === 'border box') || undefined\n const buttonTitle = buttonText || t('common:clickHere') as string\n\n return (<>\n \n
\n
\n
\n
\n

{heading}

\n

{description}

\n
\n {buttonTargetUrl && }\n
\n
\n
\n {image && (\n \n )}\n {videoUrl && (\n \n \n \n )}\n {embeddedVideo && (\n \n )}\n
\n
\n
\n {backgroundUnderSpacer && backgroundColor &&
}\n \n )\n}\n\nexport default ImageVideoSection\n","import { graphql, useStaticQuery } from 'gatsby'\nimport { ImageItem } from '@kentico/gatsby-kontent-components/dist/image-element'\nimport { filterPageDataByLanguage } from '../../common/serviceHelpers'\nimport _get from 'lodash/get'\n\n/* Kentico model: Image/Video Section */\nexport interface KenticoImageVideoSection extends KontentItem {\n heading: KontentTextElement\n description: KontentTextElement\n bcg_image_or_video: KontentAssetElement\n button_text: KontentTextElement\n button_target_url: KontentTextElement\n bcg_color: KontentTextElement\n bcg_color_area: KontentTextElement\n embedded_video: KontentTextElement\n}\n\nexport class ImageVideoSection {\n heading: string\n description: string\n image?: ImageItem\n videoUrl?: string\n buttonText: string\n buttonTargetUrl: string\n backgroundColor: string\n backgroundColorArea: string\n embeddedVideo: string\n\n constructor(data: KenticoImageVideoSection) {\n const assetType = _get(data, 'bcg_image_or_video.value[0].type', '')\n this.heading = _get(data, 'heading.value', '')\n this.description = _get(data, 'description.value', '')\n this.image = assetType.includes('image') ? _get(data, 'bcg_image_or_video.value[0]') : ''\n this.buttonText = _get(data, 'button_text.value', '')\n this.videoUrl = assetType.includes('video') ? _get(data, 'bcg_image_or_video.value[0].url') : ''\n this.buttonTargetUrl = _get(data, 'button_target_url.value', '')\n this.backgroundColor = _get(data, 'bcg_color.value', '')\n this.backgroundColorArea = _get(data, 'bcg_color_area.value[0].name', '')\n this.embeddedVideo = _get(data, 'embedded_video.value')\n }\n}\n\nexport const imageVideoSectionFragment = graphql`\n query ImageVideoSectionQuery {\n allKontentItemPage {\n nodes {\n elements {\n content {\n value {\n ... on kontent_item_image_video_banner_section {\n elements {\n ...kontent_item_image_video_banner_section_elementsFragment\n }\n preferred_language\n system {\n codename\n }\n }\n }\n }\n }\n system {\n codename\n }\n }\n }\n }\n`\n\nexport const imageVideoSectionElementsFragment = graphql`\n fragment kontent_item_image_video_banner_section_elementsFragment on kontent_item_image_video_banner_section_elements {\n bcg_color {\n value\n }\n bcg_color_area {\n value {\n name\n }\n }\n description {\n value\n }\n bcg_image_or_video {\n value {\n url\n description\n height\n name\n size\n type\n width\n }\n }\n heading {\n value\n }\n button_text {\n value\n }\n button_target_url {\n value\n }\n embedded_video {\n value\n }\n }\n`\n\nexport const useImageVideoSectionData = (language: string, pageCodename: string, sectionCodename = '') => {\n const data = useStaticQuery(imageVideoSectionFragment)\n const imageVideoSectionData: KenticoImageVideoSection = filterPageDataByLanguage(data.allKontentItemPage, pageCodename, sectionCodename, language)\n return new ImageVideoSection(imageVideoSectionData)\n}\n","import * as React from 'react'\nimport { IsMobileContext } from '../../common/Context'\nimport { AnimationService } from '../../common/AnimationService'\nimport Plus from '../../images/plus.svg'\nimport './style.scss'\n\nexport interface PlusButtonProps {\n text: string,\n hoveredText: string,\n isHovered: boolean,\n}\n\nconst PlusButton: React.FC = ({ text, hoveredText, isHovered }) => {\n\n const { isMobile } = React.useContext(IsMobileContext)\n const plusHeight = isMobile ? '6vw' : '1.5vw'\n const buttonsWrapperRef = React.useRef(null)\n const [animation, setAnimation] = React.useState()\n\n React.useEffect(() => {\n if (!animation) {\n setAnimation(AnimationService.switchUp(buttonsWrapperRef.current))\n } else {\n if (isHovered) {\n animation.play()\n } else {\n animation.reverse()\n }\n }\n }, [animation, isHovered])\n\n return (\n
\n
\n \n \n
\n
\n )\n}\n\nexport default PlusButton\n","import * as React from 'react'\nimport { ImageElement } from '@kentico/gatsby-kontent-components'\nimport { AnimationService } from '../../common/AnimationService'\nimport { ImageItem } from '@kentico/gatsby-kontent-components/dist/image-element'\nimport { Layout } from 'gatsby-plugin-image'\nimport { ImageOptions } from '@kentico/gatsby-kontent-components/dist/image-element/get-gatsby-image-data'\nimport './style.scss'\n\nexport interface ParallaxImageProps {\n backgroundImage: ImageItem\n layer1Image?: ImageItem\n layer2Image?: ImageItem\n layout: Layout\n alt: string\n className: string\n style: React.CSSProperties | undefined\n options: ImageOptions\n}\n\nconst ParallaxImage: React.FC = ({\n backgroundImage,\n layer1Image,\n layer2Image,\n layout,\n alt,\n className,\n style,\n options,\n}) => {\n\n const parallaxBackgroundRef = React.useRef(null)\n const parallaxLayer1Ref = React.useRef(null)\n const parallaxLayer2Ref = React.useRef(null)\n React.useEffect(() => {\n AnimationService.parallax(parallaxBackgroundRef.current, parallaxLayer1Ref.current, 50)\n AnimationService.parallax(parallaxBackgroundRef.current, parallaxLayer2Ref.current, 20)\n }, [])\n\n const parallaxImageStyle = React.useMemo(() => ({ height: 'auto' }), [])\n\n return (\n <>\n
\n \n
\n {layer1Image && (\n
\n \n
\n )}\n {layer2Image && (\n
\n \n
\n )}\n \n )\n}\n\nexport default ParallaxImage\n","import * as React from 'react'\nimport PlusButton from '../PlusButton'\nimport { Link } from 'gatsby'\nimport { ImageItem } from '@kentico/gatsby-kontent-components/dist/image-element'\nimport { useTranslation } from 'gatsby-plugin-react-i18next'\nimport { localizeDate } from '../../common/serviceHelpers'\nimport { LanguageContext } from '../../common/Context'\nimport { DynamicSitesCategory } from '../../common/typings/enums'\nimport { AnimationService } from '../../common/AnimationService'\nimport { ImageQuality, ImageAspectRatio } from '../../common/typings/enums'\nimport ParallaxImage from '../ParallaxImage'\nimport './style.scss'\n\nexport interface ImageWithTextProps {\n image: ImageItem,\n videoUrl: string,\n parallax: ImageItem[],\n title: string,\n description?: string,\n date?: Date\n target: string\n style?: string\n category?: DynamicSitesCategory | string\n grids?: string\n buttonText?: string\n keepAspectRatio?: boolean\n animate?: boolean\n}\n\nconst ImageWithText = React.forwardRef((props: ImageWithTextProps, ref) => {\n const {\n image,\n videoUrl,\n parallax,\n title,\n description,\n date,\n target,\n style,\n category,\n grids,\n buttonText,\n keepAspectRatio = false,\n animate = true\n } = props\n const { language } = React.useContext(LanguageContext)\n const parsedDate = localizeDate(date, language)\n const [hovered, setHovered] = React.useState(false)\n const { t } = useTranslation()\n\n const imgRef = React.useRef(null)\n const titleRef = React.useRef(null)\n const buttonRef = React.useRef(null)\n React.useEffect(() => {\n if (animate) {\n if (!AnimationService.isInView(imgRef.current)) {\n AnimationService.slideUp(imgRef.current)\n }\n if (!AnimationService.isInView(titleRef.current)) {\n AnimationService.slideUp(titleRef.current)\n }\n if (!AnimationService.isInView(buttonRef.current)) {\n AnimationService.slideUp(buttonRef.current)\n }\n }\n }, [animate])\n\n const imageQualityOptions = React.useMemo(() => ({ quality: ImageQuality.OPTIMIZED }), [])\n const imageStyle = React.useMemo(() => {\n return keepAspectRatio\n ? undefined\n : { aspectRatio: ImageAspectRatio.RECTANGLE, height: '100%' }\n }, [keepAspectRatio])\n\n const defaultButtonText = category === DynamicSitesCategory.WORK ? t('common:caseStudy') : t('common:read')\n const imageWithTextInside = (target: string) => {\n return (\n <>\n
\n {image && (\n \n )}\n {videoUrl && (\n \n \n \n )}\n
\n
\n
\n {title}\n \n {description ? description : parsedDate}\n \n
\n
\n \n
\n
\n \n )\n }\n\n return (\n
setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n >\n {target ?\n \n {imageWithTextInside(target)}\n :\n
\n {imageWithTextInside(target)}\n
\n }\n
\n )\n})\nImageWithText.displayName = 'ImageWithText'\n\nexport default ImageWithText\n","import * as React from 'react'\nimport { IsMobileContext } from '../../common/Context'\nimport { AnimationService } from '../../common/AnimationService'\nimport { DynamicSitesCategory } from '../../common/typings/enums'\nimport ImageWithText from '../ImageWithText'\nimport { LastArticlesSection as LastArticlesSectionClass } from './model'\nimport './style.scss'\n\nexport interface LastArticlesSectionProps {\n lastArticles: LastArticlesSectionClass['lastArticles']\n lead: string\n}\n\nconst sectionStyles = {\n containers: [\n 'col-start-1 col-end-13 pt-mobile-l lg:col-start-1 lg:col-end-5 lg:pt-l', //column 1\n 'col-start-1 col-end-13 pt-mobile-l lg:col-start-5 lg:col-end-9 lg:pt-l', //column 2\n 'col-start-1 col-end-13 pt-mobile-l lg:col-start-9 lg:col-end-13 lg:pt-l' //column 3\n ],\n images: [\n 'h-mobile-xxxl lg:h-desktop-20', //column 1\n 'h-mobile-xxxl lg:h-desktop-28', //column 2\n 'h-mobile-xxxl lg:h-desktop-20' //column 3\n ]\n}\n\nconst LastArticlesSection: React.FC = ({ lastArticles, lead }) => {\n const { isMobile } = React.useContext(IsMobileContext)\n const articlesRefs = React.useRef>([])\n React.useEffect(() => {\n if (!isMobile) {\n AnimationService.slideSequenceUp(articlesRefs.current)\n }\n }, [isMobile])\n\n const category = DynamicSitesCategory.BLOG\n return (\n
\n
\n
\n

{lead}

\n {lastArticles && lastArticles.map((article, index) => {\n const slug = `${category}/${(article.category).replace(/\\s+/g, '-').toLowerCase()}`\n return (\n
\n articlesRefs.current[index] = el}\n />\n
\n )\n })}\n
\n
\n )\n}\n\nexport default LastArticlesSection\n","import * as React from 'react'\nimport { graphql, useStaticQuery } from 'gatsby'\nimport { ImageItem } from '@kentico/gatsby-kontent-components/dist/image-element'\nimport { filterElementDataByLanguage } from '../../common/serviceHelpers'\nimport { DynamicSitesPath } from '../../common/typings/enums'\nimport _get from 'lodash/get'\n\n/* Kentico model: Last Articles Section*/\nexport interface KenticoLastArticlesSection extends KontentItem {\n lastArticles: KenticoLastArticlesSectionElement[]\n}\n\n/* Kentico model: Last Articles Section Element*/\nexport interface KenticoLastArticlesSectionElement extends KontentItem {\n listing_image_or_video: KontentAssetElement\n listing_parallax: KontentAssetElement[],\n title: KontentTextElement\n publication_date: KontentDateElement\n slugs: KontentTextElement\n blog_category: KontentTextElement\n}\n\nexport class LastArticlesSectionElement {\n id: string\n image: ImageItem\n videoUrl: string\n parallax: ImageItem[]\n title: string\n date: Date\n target: string\n category: string\n\n constructor(data: KenticoLastArticlesSectionElement) {\n const listingAssetType = _get(data, 'listing_image_or_video.value[0].type', '')\n this.id = _get(data, 'id', '')\n this.image = listingAssetType.includes('image') ? _get(data, 'listing_image_or_video.value[0]') : ''\n this.videoUrl = listingAssetType.includes('video') ? _get(data, 'listing_image_or_video.value[0].url') : ''\n this.parallax = _get(data, 'listing_parallax.value', [])\n this.title = _get(data, 'title.value', '')\n this.date = new Date(_get(data, 'publication_date.value', ''))\n this.target = _get(data, 'slugs.value', '')\n this.category = _get(data, 'blog_category.value[0].name', '')\n }\n}\n\nexport interface KenticoLastArticlesSectionWithLead extends KontentItem {\n lead: KontentTextElement\n blogs: KenticoLastArticlesSectionElement[]\n}\n\nexport class LastArticlesSectionWithLead {\n lead: string\n lastArticles: LastArticlesSectionElement[]\n\n constructor(data: KenticoLastArticlesSectionWithLead) {\n this.lead = _get(data, 'lead.value', '')\n const blogs = new LastArticlesSection(data.blogs, '')\n this.lastArticles = blogs.lastArticles\n }\n}\n\nexport class LastArticlesSection {\n lastArticles: LastArticlesSectionElement[]\n\n constructor(data: KenticoLastArticlesSectionElement[], currentArticleId?: string) {\n this.lastArticles = data\n .filter(Boolean)\n .map((element: KenticoLastArticlesSectionElement) => {\n return new LastArticlesSectionElement(element)\n })\n if (currentArticleId) {\n this.sliceThreeRandomArticles(currentArticleId)\n } else {\n this.sortArticlesByDate()\n this.sliceLastThree()\n }\n }\n\n private getTime(date?: Date) {\n return date != null ? date.getTime() : 0\n }\n\n private sortArticlesByDate(): void {\n this.lastArticles.sort((a: LastArticlesSectionElement, b: LastArticlesSectionElement) => {\n return this.getTime(b.date) - this.getTime(a.date)\n })\n }\n\n private sliceLastThree(): void {\n this.lastArticles = this.lastArticles.slice(0, 3)\n }\n\n private sliceThreeRandomArticles(currentArticleId: string) {\n const allButCurrent = this.lastArticles.filter(article => article.id !== currentArticleId)\n this.lastArticles = allButCurrent.sort(() => 0.5 - Math.random()).slice(0, 3)\n }\n}\n\nexport const lastArticlesSectionFragment = graphql`\n query LastArticlesSectionQuery {\n allKontentItemBlogArticle {\n ...kontent_item_blog_articleConnectionFragment\n }\n allKontentItemPage {\n nodes {\n elements {\n content {\n value {\n ... on kontent_item_last_articles_section {\n elements {\n ...kontent_item_last_articles_section_elementsFragment\n }\n preferred_language\n system {\n codename\n }\n }\n }\n }\n }\n system {\n codename\n }\n }\n }\n }\n`\n\nexport const lastArticlesSectionElementsFragment = graphql`\n fragment kontent_item_last_articles_section_elementsFragment on kontent_item_last_articles_section_elements {\n lead {\n value\n }\n }\n`\n\nexport const useLastArticlesSectionData = (language: string, currentArticleId?: string) => {\n const data = useStaticQuery(lastArticlesSectionFragment)\n return React.useMemo(() => {\n const LastArticlesSectionData: KenticoLastArticlesSectionElement[] =\n filterElementDataByLanguage(data, language, DynamicSitesPath.BLOG).map((lastArticles: any) => lastArticles.elements)\n return new LastArticlesSection(LastArticlesSectionData, currentArticleId)\n }, [data, language, currentArticleId])\n}","import * as React from 'react'\nimport { RichTextElement } from '@kentico/gatsby-kontent-components'\nimport { AnimationService } from '../../common/AnimationService'\nimport './style.scss'\n\ninterface MarqueeProps {\n textLine: string\n speed: number\n addGap?: boolean\n}\n\nconst Marquee: React.FC = ({ textLine, speed, addGap = false }) => {\n const isReversed = speed < 0\n const orgBoxRef = React.useRef(null)\n const shadowBoxRef = React.useRef(null)\n const [gap, setGap] = React.useState(0)\n\n React.useEffect(()=>{\n let loop: GSAPTimeline\n const orgBox = orgBoxRef.current as HTMLElement\n const shadowBox = shadowBoxRef.current as HTMLElement\n \n const buildAnimation = () => {\n const progress = loop ? loop.progress() : 0\n loop && loop.progress(0).kill()\n if (speed === 0) {\n return\n }\n loop = AnimationService.horizontalLoop(\n orgBox, \n shadowBox, \n {\n paused: false,\n repeat: -1,\n speed: Math.abs(speed),\n }, \n isReversed\n )\n loop.progress(progress)\n }\n\n const resizeObserver = new ResizeObserver(() => {\n if (orgBoxRef.current) {\n const fontSize = parseFloat(getComputedStyle(orgBoxRef.current as HTMLDivElement).fontSize)\n addGap && setGap(Math.ceil(fontSize))\n buildAnimation()\n }\n })\n resizeObserver.observe(orgBox) // to re-calculate timeline after font loading\n\n return () => {\n loop && loop.progress(0).kill()\n resizeObserver.disconnect()\n }\n } , [isReversed, speed, addGap])\n\n return (\n
\n \n \n
\n
\n \n
\n \n )\n}\n\nexport default Marquee\n","import * as React from 'react'\nimport { ImageElement } from '@kentico/gatsby-kontent-components'\nimport { AnimationService } from '../../common/AnimationService'\nimport { useTranslation } from 'gatsby-plugin-react-i18next'\nimport { Employee } from './model'\nimport Link from '../Link'\nimport { ImageQuality } from '../../common/typings/enums'\nimport { convertToSlug } from '../../common/serviceHelpers'\nimport './style.scss'\n\nexport interface PersonProps extends Employee {\n style?: React.CSSProperties,\n className?: string\n isArticleAuthor?: boolean\n showAllArticles?: boolean\n animate?: boolean\n}\n\nconst Person = React.forwardRef((props: PersonProps, ref) => {\n const {\n name,\n position,\n description,\n photo,\n videoUrl,\n email,\n mobile,\n linkedin,\n style,\n className,\n isArticleAuthor,\n showAllArticles,\n animate = true\n } = props\n const { t } = useTranslation()\n const nameSlug = showAllArticles ? convertToSlug(name) : ''\n\n const photoRef = React.useRef(null)\n const descriptionRef = React.useRef(null)\n const detailsRef = React.useRef(null)\n React.useEffect(() => {\n if (animate) {\n if (!AnimationService.isInView(photoRef.current)) {\n AnimationService.slideUp(photoRef.current)\n }\n if (descriptionRef.current && !AnimationService.isInView(descriptionRef.current)) {\n AnimationService.slideUp(descriptionRef.current)\n }\n if (detailsRef.current && !AnimationService.isInView(detailsRef.current)) {\n AnimationService.slideUp(detailsRef.current)\n }\n }\n }, [isArticleAuthor, animate])\n const imageQualityOptions = React.useMemo(() => ({ quality: ImageQuality.OPTIMIZED }), [])\n const imageStyle = React.useMemo(() => ({ width: '100%' }), [])\n const videoStyle = React.useMemo(() => ({ aspectRatio: '1/1' }), [])\n\n return (\n
\n
\n
\n {photo && (\n \n )}\n {videoUrl && (\n \n \n \n )}\n
\n {isArticleAuthor ?\n
\n

{name}

\n

{position}

\n

{description}

\n {(linkedin || nameSlug) && (\n

\n {linkedin && }\n {nameSlug && {t('blog:allArticlesBy') + name}}\n

\n )}\n
:\n
\n

{name}

\n

{position}

\n

{mobile && `${t('common:mobile')}: ${mobile}`}

\n

{email}

\n {linkedin && (\n

\n \n

\n )}\n
\n }\n
\n
\n )\n})\nPerson.displayName = 'Person'\n\nexport default Person\n","import { graphql } from 'gatsby'\nimport { ImageItem } from '@kentico/gatsby-kontent-components/dist/image-element'\nimport _get from 'lodash/get'\n\n/* Kentico model: Employee Element */\n\nexport interface KenticoEmployeeElement extends KontentItem {\n elements: {\n name: KontentTextElement\n position: KontentTextElement\n description: KontentTextElement\n biography: KontentTextElement\n photo_or_video: KontentAssetElement\n e_mail: KontentTextElement\n mobile: KontentTextElement\n linkedin: KontentTextElement\n facebook: KontentTextElement\n }\n}\n\nexport class Employee {\n name: string\n position: string\n description: string\n biography: string\n photo: ImageItem\n videoUrl: string\n email: string\n mobile: string\n linkedin: string\n facebook: string\n\n constructor(rawData: KenticoEmployeeElement) {\n this.name = _get(rawData, 'elements.name.value', '')\n this.position = _get(rawData, 'elements.position.value', '')\n this.description = _get(rawData, 'elements.description.value', '')\n this.biography = _get(rawData, 'element.biography.value', '')\n const employeeAssetType = _get(rawData, 'elements.photo_or_video.value[0].type', '')\n this.photo = employeeAssetType.includes('image') ? _get(rawData, 'elements.photo_or_video.value[0]') : ''\n this.videoUrl = employeeAssetType.includes('video') ? _get(rawData, 'elements.photo_or_video.value[0].url') : ''\n this.email = _get(rawData, 'elements.email.value', '')\n this.mobile = _get(rawData, 'elements.mobile.value', '')\n this.linkedin = _get(rawData, 'elements.linkedin.value', '')\n this.facebook = _get(rawData, 'elements.facebook.value', '')\n }\n}\nexport const employeeFragment = graphql`\n fragment kontent_item_employee_element_elementsFragment on kontent_item_employee_element_elements {\n biography {\n value\n }\n description {\n value\n }\n email {\n value\n }\n facebook {\n value\n }\n linkedin {\n value\n }\n mobile {\n value\n }\n name {\n value\n }\n photo_or_video {\n value {\n url\n description\n height\n name\n size\n type\n width\n }\n }\n position {\n value\n }\n }\n`\n","import { graphql, useStaticQuery } from 'gatsby'\nimport { filterSeoDataByLanguage } from '../../common/serviceHelpers'\nimport _get from 'lodash/get'\n\n/* Kentico model: Page Settings & Meta Tags */\ninterface KenticoSeoData extends KontentItem {\n meta_title: KontentTextElement\n meta_description: KontentTextElement\n meta_image_url: KontentTextElement\n meta_type: KontentTextElement\n meta_keywords: KontentTextElement\n meta_noindex: KontentTextElement\n favicon: KontentAssetElement\n}\n\nexport class SeoData {\n title?: string\n description?: string\n ogImageUrl?: string\n ogType?: string\n metaKeywords?: string\n noIndex?: string\n canonicalUrl?: string\n favicon?: string\n\n constructor(data: KenticoSeoData, pathname: string) {\n this.title = _get(data, 'meta_tags__meta_title.value', '')\n this.description = _get(data, 'meta_tags__meta_description.value', '')\n this.ogImageUrl = _get(data, 'meta_tags__meta_image.value[0].url', '')\n this.ogType = _get(data, 'meta_tags__meta_type.value[0].name', '')\n this.metaKeywords = _get(data, 'meta_tags__meta_keywords.value', '')\n this.canonicalUrl = _get(data, 'siteMeta.siteUrl', '') + pathname\n this.favicon = _get(data, 'meta_tags__favicon.value[0].elements.favicon.value[0].url', '')\n this.noIndex = process.env.NODE_ENV === 'development' || process.env.GATSBY_STAGING === 'true'\n ? 'true'\n : _get(data, 'meta_tags__meta_noindex.value[0].name', '')\n }\n}\n\nexport const seoFragment = graphql`\nquery SeoQuery {\n allKontentItemPage {\n nodes {\n elements {\n meta_tags__meta_title {\n value\n }\n meta_tags__meta_description {\n value\n }\n meta_tags__meta_image {\n value {\n url\n }\n }\n meta_tags__favicon {\n value {\n ... on kontent_item_favicon {\n elements {\n favicon {\n value {\n url\n }\n }\n }\n }\n }\n }\n meta_tags__meta_type {\n value {\n name\n }\n }\n meta_tags__meta_keywords {\n value\n }\n meta_tags__meta_noindex {\n value {\n name\n }\n }\n }\n system {\n codename\n }\n preferred_language\n }\n }\n site {\n siteMetadata {\n siteUrl\n }\n }\n}`\n\nexport const useSeoData = (language: string, pageCodename: string, pathname: string) => {\n const data = useStaticQuery(seoFragment)\n const seoData: KenticoSeoData = filterSeoDataByLanguage(data, pageCodename, language)\n return new SeoData(seoData, pathname)\n}","import * as React from 'react'\nimport { localizeDate } from '../../common/serviceHelpers'\nimport { LanguageContext } from '../../common/Context'\nimport { AnimationService } from '../../common/AnimationService'\nimport Link from '../Link'\nimport { convertToSlug } from '../../common/serviceHelpers'\nimport './style.scss'\n\ninterface ArticleHeader {\n title: string\n leading: string\n date: Date\n author: string\n readTime: string\n}\n\nconst ArticleHeader: React.FC = ({ title, leading, date, author, readTime }) => {\n const { language } = React.useContext(LanguageContext)\n const parsedDate = localizeDate(date, language)\n const nameSlug = convertToSlug(author)\n\n const headerRef = React.useRef(null)\n const leadRef = React.useRef(null)\n React.useEffect(() => {\n if (!AnimationService.isInView(headerRef.current)) {\n const elementsToAnimate = [headerRef.current, leadRef.current]\n AnimationService.slideSequenceUp(elementsToAnimate)\n }\n }, [])\n\n return (\n
\n
\n
\n
\n

{title}

\n
\n
\n
\n

{leading}

\n {nameSlug && {author}}\n {parsedDate}\n {readTime}\n
\n
\n
\n
\n )\n}\n\nexport default ArticleHeader\n","import * as React from 'react'\nimport Person, { PersonProps } from '../Person'\nimport './style.scss'\n\nconst ArticleAuthorSection: React.FC = (articleAuthor) => {\n const isAuthor = !!articleAuthor.name.trim()\n return <>\n
\n {isAuthor ?\n
\n \n
\n :
\n }\n \n}\n\nexport default ArticleAuthorSection\n","import * as React from 'react'\nimport Link from '../Link/index'\nimport { useTranslation } from 'gatsby-plugin-react-i18next'\nimport './style.scss'\n\ninterface BreadcrumbsProps {\n siteCategory: string\n title: string\n category: string\n slug: string\n}\n\nconst Breadcrumbs: React.FC = ({ siteCategory, title, category, slug }) => {\n const { t } = useTranslation()\n const breadcrumbs = [\n {\n title: t('common:home'),\n link: '/'\n },\n {\n title: t(`common:${siteCategory}`),\n link: `/${siteCategory}`\n },\n {\n title: title,\n link: `/${siteCategory}/${category}/${slug}`\n }\n ]\n return (\n
\n {\n breadcrumbs.map((element, index) => {\n return (\n \n {element.title}{(index < breadcrumbs.length - 1) && {'-'}}\n \n )\n })\n }\n
\n )\n}\n\nexport default Breadcrumbs\n","import * as React from 'react'\nimport _get from 'lodash/get'\nimport { graphql, PageProps } from 'gatsby'\nimport { useTranslation } from 'gatsby-plugin-react-i18next'\nimport { IsMobileContext, LanguageContext } from '../common/Context'\nimport { readingTime } from '../common/serviceHelpers'\nimport { DynamicSitesCategory } from '../common/typings/enums'\nimport { AnimationService } from '../common/AnimationService'\n\n// components\nimport Layout from '../components/Layout'\nimport Navbar from '../components/Navbar'\nimport Footer from '../components/Footer'\nimport FloatingButton from '../components/FloatingButton'\nimport ArticleHeader from '../components/ArticleHeader'\nimport ArticleContent from '../components/ArticleContent'\nimport ArticleAuthorSection from '../components/ArticleAuthorSection'\nimport LastArticlesSection from '../components/LastArticlesSection'\nimport ClientsSection from '../components/ClientsSection'\nimport ImageVideoSection from '../components/ImageVideoSection'\nimport Breadcrumbs from '../components/Breadcrumbs'\nimport { ImageElement } from '@kentico/gatsby-kontent-components'\nimport { ImageItem } from '@kentico/gatsby-kontent-components/dist/image-element'\n\n// hooks, models\nimport { Employee } from '../components/Person/model'\nimport { SeoData } from '../components/SeoComponent/model'\nimport { useClientsSectionData, ClientsSection as ClientsSectionClass } from '../components/ClientsSection/model'\nimport { useLinksGridData, LinksGrid } from '../components/LinksGrid/model'\nimport { useNavbarData, Navbar as NavbarClass } from '../components/Navbar/model'\nimport { useLastArticlesSectionData, LastArticlesSection as LastArticlesSectionClass } from '../components/LastArticlesSection/model'\nimport { useImageVideoSectionData, ImageVideoSection as ImageVideoSectionClass } from '../components/ImageVideoSection/model'\nimport { useArticleContentData, ArticleContent as ArticleContentClass } from '../components/ArticleContent/model'\n\nimport { ImageQuality } from '../common/typings/enums'\nimport withSSR from '../hoc/withSSR'\nimport './blog-article.scss'\n\nconst ArticlePage: React.FC = (props) => {\n const { language: initialLanguage } = React.useContext(LanguageContext)\n const [language, setLanguage] = React.useState(initialLanguage)\n\n /* For data collecting hooks below (e.g. useLinksGridData), \n You need to know page codename from kentico and optionally section codename.\n Data service is searching query for this elements and collects the right data to components */\n const mainPath = 'data.allKontentItemBlogArticle.nodes[0].elements'\n const elements = _get(props, `${mainPath}`, {})\n const siteMeta = _get(props, 'data.site.siteMetadata', {})\n const pagePathname = _get(props, 'location.pathname', '')\n const seoData = new SeoData({ ...elements, siteMeta }, pagePathname)\n const linksGridData = useLinksGridData(language, 'blog_article_page')\n const navbarData = useNavbarData(language, 'blog_article_page', pagePathname)\n const articleContentData = useArticleContentData(_get(props, `${mainPath}`, ''))\n const articleHeaderData: ArticleHeader = {\n title: _get(props, `${mainPath}.title.value`, ''),\n leading: _get(props, `${mainPath}.lead.value`, ''),\n date: new Date(_get(props, `${mainPath}.publication_date.value`, '')),\n author: _get(props, `${mainPath}.article_author.value[0].elements.name.value`, ''),\n readTime: `${readingTime(articleContentData.value)} min`\n }\n const articleCategory = _get(props, `${mainPath}.blog_category.value[0].name`, '').replace(/\\s+/g, '-').toLowerCase()\n const articleSlug = _get(props, `${mainPath}.slugs.value`, '')\n const leadingAssetType = _get(props, `${mainPath}.full_width_image_or_video.value[0].type`, '')\n const leadingImage = leadingAssetType.includes('image') ? _get(props, `${mainPath}.full_width_image_or_video.value[0]`) : ''\n const leadingVideoUrl = leadingAssetType.includes('video') ? _get(props, `${mainPath}.full_width_image_or_video.value[0].url`) : ''\n const articleAuthor = new Employee(_get(props, `${mainPath}.article_author.value[0]`, {}))\n const currentArticleId = _get(props, 'data.allKontentItemBlogArticle.nodes[0].id', '')\n const lastArticlesSectionData = useLastArticlesSectionData(language, currentArticleId)\n const clientsSectionData = useClientsSectionData(language, 'blog_article_page')\n const imageVideoSectionData = useImageVideoSectionData(language, 'blog_article_page', 'image_video_section')\n\n const pageData = {\n linksGridData,\n navbarData,\n articleHeaderData,\n articleCategory,\n articleSlug,\n leadingImage,\n leadingVideoUrl,\n articleContentData,\n articleAuthor,\n lastArticlesSectionData,\n clientsSectionData,\n imageVideoSectionData,\n }\n\n return (\n \n \n \n )\n}\n\ninterface ArticlePageProps {\n isMobile: boolean\n pageData: {\n linksGridData: LinksGrid\n navbarData: NavbarClass\n articleHeaderData: ArticleHeader\n articleCategory: string\n articleSlug: string\n leadingImage: ImageItem\n leadingVideoUrl: string\n articleContentData: ArticleContentClass\n articleAuthor: Employee\n lastArticlesSectionData: LastArticlesSectionClass\n clientsSectionData: ClientsSectionClass\n imageVideoSectionData: ImageVideoSectionClass\n }\n}\n\nconst ArticlePageTemplate: React.FC = ({\n isMobile,\n pageData: {\n linksGridData,\n navbarData,\n articleHeaderData,\n articleCategory,\n articleSlug,\n leadingImage,\n leadingVideoUrl,\n articleContentData,\n articleAuthor,\n lastArticlesSectionData,\n clientsSectionData,\n imageVideoSectionData,\n }\n}) => {\n const { t } = useTranslation()\n const imageQualityOptions = React.useMemo(() => ({ quality: ImageQuality.OPTIMIZED }), [])\n\n const imgRef = React.useRef(null)\n React.useEffect(() => {\n if (imgRef.current) {\n AnimationService.fadeIn(imgRef.current)\n }\n }, [])\n\n return (\n \n
\n \n
\n
\n \n {\n isMobile ||\n \n }\n
\n
\n {leadingImage && (\n \n )}\n {leadingVideoUrl && (\n \n )}\n
\n
\n
\n \n
\n \n \n \n \n
\n