-
Notifications
You must be signed in to change notification settings - Fork 1
/
161edb849f784c06ff2710753fb2ae881c988403-4e105b0c5cd241b994b7.js.map
1 lines (1 loc) · 49.6 KB
/
161edb849f784c06ff2710753fb2ae881c988403-4e105b0c5cd241b994b7.js.map
1
{"version":3,"file":"161edb849f784c06ff2710753fb2ae881c988403-4e105b0c5cd241b994b7.js","mappings":"+TAOA,SAASA,IACP,MAAMC,GAAeC,EAAAA,EAAAA,cACf,MAAEC,IAAUC,EAAAA,EAAAA,YAAWC,EAAAA,GA4B7B,OA1BAC,EAAAA,EAAAA,YAAU,KAAO,IAADC,EACd,MAAMC,EAAgBC,SAASC,cAAc,UAE7CF,EAAcG,IAVN,+BAWRH,EAAcI,OAAQ,EACtBJ,EAAcK,YAAc,YAC5BL,EAAcM,aAAa,YAZlB,yBAaTN,EAAcM,aAAa,eAAgB,oCAC3CN,EAAcM,aAAa,gBAAiB,YAC5CN,EAAcM,aAAa,mBAAoB,wBAC/CN,EAAcM,aAAa,eAAgB,YAC3CN,EAAcM,aAAa,cAAe,KAC1CN,EAAcM,aAAa,yBAA0B,KACrDN,EAAcM,aAAa,qBAAsB,KACjDN,EAAcM,aAAa,sBAAuB,OAClDN,EAAcM,aAAa,aAA0C,SAA5BL,SAASM,KAAKC,UAAuB,OAAS,SAEnE,QAApBT,EAAAN,EAAagB,eAAO,IAAAV,GAApBA,EAAsBW,YAAYV,EAAc,GAE/C,KAEHF,EAAAA,EAAAA,YAAU,KAAO,IAADa,EACd,MAAMC,EAASX,SAASY,cAAiC,uBACzDD,SAAqB,QAAfD,EAANC,EAAQE,qBAAa,IAAAH,GAArBA,EAAuBI,YAAY,CAAEC,OAAQ,CAAEC,UAAW,CAAEtB,WAAa,qBAAqB,GAC7F,CAACA,KAEGuB,EAAAA,EAAAA,GAAA,OAAKC,IAAK1B,GACnB,CAEA,OAAe2B,EAAAA,EAAAA,MAAK5B,G,wCC3BL,SAAS6B,GAAW,OAAEC,IACnC,MAAMC,GAAWC,EAAAA,EAAAA,GAASF,EAAOG,QAEjC,OACEP,EAAAA,EAAAA,GAACQ,EAAY,CAAClB,UAAU,qBACtBU,EAAAA,EAAAA,GAACS,EAAAA,KAAI,CAACC,IAAKC,EAAcrB,UAAU,gBAAgBsB,GAAI,UACpDP,IACCL,EAAAA,EAAAA,GAACa,EAAAA,EAAW,CACVC,MAAOT,EACPK,IAAKK,EAAAA,EACLzB,UAAU,uBACV0B,IAAKZ,EAAOa,QAMxB,CAEA,MAAMT,GAAYU,EAAAA,EAAAA,GAAA,MAAAC,OAAA,aAAAD,CAAA,CAAAD,KAAA,SAAAG,OAAA,gIAYZT,EAAY,CAAAM,KAAA,SAAAG,OAAA,kL,kCCrBH,SAASC,GAAS,KAAEC,EAAI,SAAEC,EAAQ,YAAEC,EAAW,OAAEpB,EAAM,QAAEqB,EAAO,MAAEC,IAC/E,OACE1B,EAAAA,EAAAA,GAAC2B,EAAAA,GAAc,CAACrC,UAAU,qBACxBU,EAAAA,EAAAA,GAAC4B,EAAY,CAACtC,UAAU,kBACrBgC,GACCA,EAAKO,OAAS,GACdC,EAAAA,EAAOC,aACPT,EAAKU,KAAI,CAACC,EAAKC,KACblC,EAAAA,EAAAA,GAACmC,EAAAA,SAAQ,CAACC,IAAKH,GACZC,EAAM,IAAKlC,EAAAA,EAAAA,GAACmC,EAAAA,SAAQ,KAAC,QACtBnC,EAAAA,EAAAA,GAACS,EAAAA,KAAI,CAACG,GAAK,UAAQyB,EAAAA,EAAAA,GAAUJ,OAAUA,MAG5CX,GAAQA,EAAKO,OAAS,IAAMC,EAAAA,EAAOC,cAClC/B,EAAAA,EAAAA,GAACS,EAAAA,KAAI,CAACG,GAAK,UAAQyB,EAAAA,EAAAA,GAAUf,EAAK,QAASA,EAAK,MAGpDtB,EAAAA,EAAAA,GAACsC,EAAAA,GAAa,CAAChD,UAAU,mBAAmBoC,IAC5C1B,EAAAA,EAAAA,GAACuC,EAAqB,CAACjD,UAAU,4BAA4BmC,IAC7DzB,EAAAA,EAAAA,GAACwC,EAAc,CAAClD,UAAU,qBACxBU,EAAAA,EAAAA,GAAA,WAASV,UAAU,6BACjBU,EAAAA,EAAAA,GAACyC,EAAY,CAACnD,UAAU,gBACtBU,EAAAA,EAAAA,GAACG,EAAU,CAACiC,IAAKhC,EAAO,GAAGa,KAAMb,OAAQA,EAAO,OAGlDJ,EAAAA,EAAAA,GAAA,WAASV,UAAU,0BACjBU,EAAAA,EAAAA,GAAA,OAAKV,UAAU,eACZc,EAAO4B,KAAK5B,IACXJ,EAAAA,EAAAA,GAACS,EAAAA,KAAI,CAAC2B,IAAKhC,EAAOa,KAAML,GAAI,UACzBR,EAAOa,UAIdjB,EAAAA,EAAAA,GAAA,OAAKV,UAAU,wBACbU,EAAAA,EAAAA,GAAA,QAAMV,UAAU,mBAAmBoD,SAAUnB,GAC1CA,IAEHvB,EAAAA,EAAAA,GAAA,QAAMV,UAAU,wBACdU,EAAAA,EAAAA,GAAA,QAAMV,UAAU,QAAO,KACtBkC,EAAYmB,UAQ7B,CAEA,MAAMf,GAAYV,EAAAA,EAAAA,GAAA,WAAAC,OAAA,YAAAD,CAAA,uHAOP0B,EAAAA,EAAOC,QAAO,6DAQnBN,GAAqBrB,EAAAA,EAAAA,GAAA,KAAAC,OAAA,YAAAD,CAAA,CAAAD,KAAA,UAAAG,OAAA,uKAarBoB,GAActB,EAAAA,EAAAA,GAAA,OAAAC,OAAA,YAAAD,CAAA,CAAAD,KAAA,SAAAG,OAAA,+0BAsDdqB,GAAYvB,EAAAA,EAAAA,GAAA,MAAAC,OAAA,YAAAD,CAAA,CAAAD,KAAA,UAAAG,OAAA,2EC3IH,SAAS0B,GAAU,YAAEC,EAAW,MAAErB,EAAK,UAAEsB,IAAqB,IAADC,EAAAC,EAC1E,MAAOC,EAAiBC,EAAiBC,IAAqC,QAArBJ,EAAAD,EAAUM,mBAAW,IAAAL,OAAA,EAArBA,EAAuBM,MAAM,QAAS,MAC7FC,OACAA,OACAA,IAEKC,EAAiBC,IAAwC,QAArBR,EAAAF,EAAUW,mBAAW,IAAAT,OAAA,EAArBA,EAAuBK,MAAM,QAAS,MAC/EC,OACAA,GAGF,OACExD,EAAAA,EAAAA,GAAC4D,EAAa,MACZ5D,EAAAA,EAAAA,GAAA,OAAKV,UAAU,kBACbU,EAAAA,EAAAA,GAACa,EAAAA,EAAW,CAACC,MAAOiC,EAAac,MAAO,CAAEC,OAAQ,QAAU9C,IAAKU,KAGlE0B,IACCpD,EAAAA,EAAAA,GAAC+D,EAAkB,MACjB/D,EAAAA,EAAAA,GAACmC,EAAAA,SAAQ,KAAEkB,EAAe,uBAAyB,cAEnDrD,EAAAA,EAAAA,GAAA,KAAGgE,KAAMZ,EAAiBjC,OAAO,SAAS8C,IAAI,cAC3Cd,GAGFM,IACCzD,EAAAA,EAAAA,GAACmC,EAAAA,SAAQ,KACN,IAAI,KACF,IACFuB,GACC1D,EAAAA,EAAAA,GAAA,KAAGgE,KAAMN,EAAiBvC,OAAO,SAAS8C,IAAI,cAC3CR,IAGHzD,EAAAA,EAAAA,GAAA,YAAOyD,KAQvB,CAEA,MAAMG,GAAa1C,EAAAA,EAAAA,GAAA,UAAAC,OAAA,aAAAD,CAAA,CAAAD,KAAA,UAAAG,OAAA,0UA+Bb2C,GAAkB7C,EAAAA,EAAAA,GAAA,cAAAC,OAAA,aAAAD,CAAA,CAAAD,KAAA,SAAAG,OAAA,mMCtFxB,MAAgB3C,IAAiBiC,EAAAA,EAAAA,IAAG,8vFA8MjB,UAAfjC,EAAMyF,KACH,+lOAkRA,GAAC,QC1dR,MARA,UAAqB,KAAEC,IACrB,OACEnE,EAAAA,EAAAA,GAACoE,EAAAA,GAAe,CAAC9E,UAAU,oBAAoBoB,IAAK2D,IAClDrE,EAAAA,EAAAA,GAAA,OAAKV,UAAU,eAAegF,wBAAyB,CAAEC,OAAQJ,KAGvE,E,UCqBe,SAASK,EAAaC,GAEnC,MAAMC,EAAeD,EAAMC,aAAaC,MACrCC,QAAQC,GAASA,EAAKC,KAAKC,OAAOC,OAASP,EAAMQ,kBACjDC,MAAM,EAAG,GAEZ,OACElF,EAAAA,EAAAA,GAACmF,EAAmB,CAAC7F,UAAU,mBAC7BU,EAAAA,EAAAA,GAAA,UAAQV,UAAU,0BAChBU,EAAAA,EAAAA,GAACoF,EAAuB,MACtBpF,EAAAA,EAAAA,GAAA,YAAM,WAAe,KACrBA,EAAAA,EAAAA,GAACS,EAAAA,KAAI,CAACG,GAAK,UAAQyB,EAAAA,EAAAA,GAAUoC,EAAMnD,KAAK,QAASmD,EAAMnD,KAAK,OAGhEtB,EAAAA,EAAAA,GAACqF,EAAmB,CAAC/F,UAAU,2BAC7BU,EAAAA,EAAAA,GAAA,UACG0E,EAAa1C,KAAKsD,IACjB,MAAMC,EAAO,IAAIC,KAAKF,EAAER,KAAKW,YAAYF,MACnChE,GAAWmE,EAAAA,EAAAA,IAAOH,EAAM,cACxBI,GAAkBD,EAAAA,EAAAA,IAAOH,EAAM,cAErC,OACEvF,EAAAA,EAAAA,GAAA,MAAIoC,IAAKkD,EAAER,KAAKW,YAAY/D,QAC1B1B,EAAAA,EAAAA,GAAA,WACEA,EAAAA,EAAAA,GAACS,EAAAA,KAAI,CAACG,GAAI0E,EAAER,KAAKC,OAAOC,MAAOM,EAAER,KAAKW,YAAY/D,SAEpD1B,EAAAA,EAAAA,GAAC4F,EAAgB,CAACtG,UAAU,wBAC1BU,EAAAA,EAAAA,GAAA,UACEA,EAAAA,EAAAA,GAAA,QAAM0C,SAAUnB,GAAWoE,GAAuB,KAAG,IACpDL,EAAER,KAAKC,OAAOvD,YAAYmB,OAG5B,OAKb3C,EAAAA,EAAAA,GAAC6F,EAAkB,CAACvG,UAAU,0BAC5BU,EAAAA,EAAAA,GAACS,EAAAA,KAAI,CAACG,GAAK,UAAQyB,EAAAA,EAAAA,GAAUoC,EAAMnD,KAAK,QACrCmD,EAAMC,aAAaoB,WAAa,GAAM,WAAUrB,EAAMC,aAAaoB,mBACjC,IAAlCrB,EAAMC,aAAaoB,YAAoB,SACL,IAAlCrB,EAAMC,aAAaoB,YAAoB,WAAW,OAK7D,CAEA,MAAMX,GAAmBjE,EAAAA,EAAAA,GAAA,WAAAC,OAAA,YAAAD,CAAA,mJAQO6E,EAAAA,EAAAA,GAAQ,OAAQnD,EAAAA,EAAOoD,UAAS,8PAyB1DZ,GAAuBlE,EAAAA,EAAAA,GAAA,MAAAC,OAAA,YAAAD,CAAA,CAAAD,KAAA,UAAAG,OAAA,6NAyBvBiE,GAAmBnE,EAAAA,EAAAA,GAAA,OAAAC,OAAA,YAAAD,CAAA,CAAAD,KAAA,UAAAG,OAAA,8ZA4CnBwE,GAAgB1E,EAAAA,EAAAA,GAAA,OAAAC,OAAA,YAAAD,CAAA,CAAAD,KAAA,SAAAG,OAAA,0JAiBhByE,GAAkB3E,EAAAA,EAAAA,GAAA,UAAAC,OAAA,YAAAD,CAAA,6NAcX0B,EAAAA,EAAOqD,OAAM,sCAENrD,EAAAA,EAAOqD,OAAM,MCjLlB,SAASC,GAAS,aAC/BxB,EAAY,gBACZO,EAAe,KACf3D,EAAI,YACJ6E,IAEA,MAAMC,EAAmB1B,EAAaoB,WAAa,EAEnD,OACE9F,EAAAA,EAAAA,GAACqG,EAAa,CAAC/G,UAAU,YAAYoB,IAAK4F,EAAAA,KACxCtG,EAAAA,EAAAA,GAAA,OAAKU,IAAK6F,EAAAA,KACRvG,EAAAA,EAAAA,GAACwG,EAAY,CAAClH,UAAU,kBACrB8G,IACCpG,EAAAA,EAAAA,GAACwE,EAAY,CACXS,gBAAiBA,EACjB3D,KAAMA,EACNoD,aAAcA,IAIjByB,EAAYM,OAAQzG,EAAAA,EAAAA,GAAC0G,EAAAA,EAAQ,CAAC7B,KAAMsB,EAAYM,KAAME,QAAQ,IAC9DR,EAAYS,OAAQ5G,EAAAA,EAAAA,GAAC0G,EAAAA,EAAQ,CAAC7B,KAAMsB,EAAYS,KAAMD,QAAQ,MAKzE,CAEA,MAAMN,GAAanF,EAAAA,EAAAA,GAAA,SAAAC,OAAA,YAAAD,CAAA,ggBA8CC6E,EAAAA,EAAAA,GAAQ,QAASnD,EAAAA,EAAOoD,UAAS,uCAInCD,EAAAA,EAAAA,GAAQ,QAASnD,EAAAA,EAAOoD,UAAS,wFAY7CQ,GAAYtF,EAAAA,EAAAA,GAAA,OAAAC,OAAA,YAAAD,CAAA,CAAAD,KAAA,SAAAG,OAAA,gE,wBCjCX,MAAMyF,EAAOA,EAAGC,OAAMC,eAAkC,IAAAC,EAAAC,EAC7D,MAAMpC,EAAOiC,EAAKI,eACZC,EAAYtC,EAAKY,YAAY3E,MACnC,IAAIsG,EACAtD,EACW,IAAAuD,EAAAC,EAAXH,IACFC,EAA2B,QAAtBC,GAAG/G,EAAAA,EAAAA,GAAS6G,UAAU,IAAAE,OAAA,EAAnBA,EAAqBD,MAC7BtD,EAA4B,QAAtBwD,GAAGhH,EAAAA,EAAAA,GAAS6G,UAAU,IAAAG,OAAA,EAAnBA,EAAqBxD,QAGhC,MACMyD,EADO,IAAI/B,KAAKX,EAAKY,YAAYF,MACZiC,cAE3B,OACExH,EAAAA,EAAAA,GAACmC,EAAAA,SAAQ,MACPnC,EAAAA,EAAAA,GAAA,aAAQ6E,EAAKY,YAAY/D,QAEzB1B,EAAAA,EAAAA,GAAA,QAAMiB,KAAK,cAAcwG,QAAS5C,EAAKY,YAAYhE,SAAWoD,EAAKpD,WACnEzB,EAAAA,EAAAA,GAAA,QAAM0H,SAAS,eAAeD,QAAS3F,EAAAA,EAAOJ,SAC9C1B,EAAAA,EAAAA,GAAA,QAAM0H,SAAS,UAAUD,QAAQ,aACjCzH,EAAAA,EAAAA,GAAA,QAAM0H,SAAS,WAAWD,QAAS5C,EAAKY,YAAY/D,SACpD1B,EAAAA,EAAAA,GAAA,QAAM0H,SAAS,iBAAiBD,QAAS5C,EAAKY,YAAYhE,SAAWoD,EAAKpD,WAC1EzB,EAAAA,EAAAA,GAAA,QAAM0H,SAAS,SAASD,QAAS3F,EAAAA,EAAO6F,QAAUZ,EAASa,WAC1DT,IAAanH,EAAAA,EAAAA,GAAA,QAAM0H,SAAS,WAAWD,QAAU,GAAE3F,EAAAA,EAAO6F,WAAUE,EAAAA,EAAAA,GAAOV,QAC5EnH,EAAAA,EAAAA,GAAA,QAAM0H,SAAS,yBAAyBD,QAASF,IAGhD1C,EAAKY,YAAYnE,OAAQtB,EAAAA,EAAAA,GAAA,QAAM0H,SAAS,cAAcD,QAAS5C,EAAKY,YAAYnE,KAAK,KAErFQ,EAAAA,EAAOgG,YAAa9H,EAAAA,EAAAA,GAAA,QAAM0H,SAAS,oBAAoBD,QAAS3F,EAAAA,EAAOgG,YACvEhG,EAAAA,EAAOgG,YAAa9H,EAAAA,EAAAA,GAAA,QAAM0H,SAAS,iBAAiBD,QAAS3F,EAAAA,EAAOgG,aACrE9H,EAAAA,EAAAA,GAAA,QAAMiB,KAAK,cAAcwG,QAAQ,yBACjCzH,EAAAA,EAAAA,GAAA,QAAMiB,KAAK,eAAewG,QAAS5C,EAAKY,YAAY/D,SACpD1B,EAAAA,EAAAA,GAAA,QAAMiB,KAAK,qBAAqBwG,QAAS5C,EAAKY,YAAYhE,SAAWoD,EAAKpD,WAC1EzB,EAAAA,EAAAA,GAAA,QAAMiB,KAAK,aAAawG,QAAS3F,EAAAA,EAAO6F,QAAUZ,EAASa,WAC1DT,IAAanH,EAAAA,EAAAA,GAAA,QAAMiB,KAAK,eAAewG,QAAU,GAAE3F,EAAAA,EAAO6F,WAAUE,EAAAA,EAAAA,GAAOV,QAC5EnH,EAAAA,EAAAA,GAAA,QAAMiB,KAAK,gBAAgBwG,QAAQ,gBACnCzH,EAAAA,EAAAA,GAAA,QAAMiB,KAAK,eAAewG,QAAS5C,EAAKY,YAAYrF,OAAO,GAAGa,QAC9DjB,EAAAA,EAAAA,GAAA,QAAMiB,KAAK,gBAAgBwG,QAAQ,gBAClC5C,EAAKY,YAAYnE,OAAQtB,EAAAA,EAAAA,GAAA,QAAMiB,KAAK,eAAewG,QAAS5C,EAAKY,YAAYnE,KAAK,KAClFQ,EAAAA,EAAOiG,SACN/H,EAAAA,EAAAA,GAAA,QAAMiB,KAAK,cAAcwG,QAAU,IAAG3F,EAAAA,EAAOiG,OAAOxE,MAAM,uBAAuB,OAElFzB,EAAAA,EAAOiG,SACN/H,EAAAA,EAAAA,GAAA,QAAMiB,KAAK,iBAAiBwG,QAAU,IAAG3F,EAAAA,EAAOiG,OAAOxE,MAAM,uBAAuB,OAErF6D,IAASpH,EAAAA,EAAAA,GAAA,QAAM0H,SAAS,iBAAiBD,QAAc,QAAPT,EAAEI,SAAK,IAAAJ,OAAA,EAALA,EAAOgB,aACzDlE,IAAU9D,EAAAA,EAAAA,GAAA,QAAM0H,SAAS,kBAAkBD,QAAe,QAARR,EAAEnD,SAAM,IAAAmD,OAAA,EAANA,EAAQe,aACpD,EAIA,SAASC,GAAa,KAAEnB,EAAI,YAAEX,EAAW,SAAEY,IACxD,MAAMlC,EAAOiC,EAAKI,eACZC,EAAYtC,EAAKY,YAAY3E,MAC7BiC,GAAczC,EAAAA,EAAAA,GAAS6G,GACvBnE,EAAY,CAChBM,YAAauB,EAAKY,YAAYnC,YAC9BK,YAAakB,EAAKY,YAAY9B,aAE1B4B,EAAO,IAAIC,KAAKX,EAAKY,YAAYF,MACjChE,GAAWmE,EAAAA,EAAAA,IAAOH,EAAM,cAE9B,OACEvF,EAAAA,EAAAA,GAACkI,EAAAA,EAAW,CAAC5I,UAAU,kBACrBU,EAAAA,EAAAA,GAACmI,EAAAA,EAAO,CAACzH,IAAK0H,IACZpI,EAAAA,EAAAA,GAACqI,EAAAA,EAAO,CAACC,QAAM,EAACzD,KAAMA,EAAKY,eAC3BzF,EAAAA,EAAAA,GAAA,QAAMuI,GAAG,YAAYjJ,UAAU,YAAYoB,IAAG,CAAG8H,EAAAA,GAAUlC,EAAAA,GAAK,SAC9DtG,EAAAA,EAAAA,GAAA,OAAKU,IAAK6F,EAAAA,KAERvG,EAAAA,EAAAA,GAAA,WAASU,IAAG,CAAG+H,GAAWtB,GAAauB,EAAO,SAC5C1I,EAAAA,EAAAA,GAACqB,EAAQ,CACPC,KAAMuD,EAAKY,YAAYnE,KACvBE,YAAaqD,EAAKE,OAAOvD,YACzBD,SAAUA,EACVnB,OAAQyE,EAAKY,YAAYrF,OACzBqB,QAASoD,EAAKY,YAAYhE,QAC1BC,MAAOmD,EAAKY,YAAY/D,QAGzBqB,IACC/C,EAAAA,EAAAA,GAAC8C,EAAS,CACRC,YAAaA,EACbrB,MAAOmD,EAAKY,YAAY/D,MACxBsB,UAAWA,KAIfhD,EAAAA,EAAAA,GAAC2I,EAAW,CAACxE,KAAMU,EAAKV,SAE1BnE,EAAAA,EAAAA,GAAA,OAAKU,IAAKkI,IACR5I,EAAAA,EAAAA,GAAC1B,EAAM,UAIb0B,EAAAA,EAAAA,GAACkG,EAAQ,CACPjB,gBAAiB8B,EAASa,SAC1BtG,KAAMuD,EAAKY,YAAYnE,KACvBoD,aAAcoC,EAAKpC,aACnByB,YAAaA,KAEfnG,EAAAA,EAAAA,GAAC6I,EAAAA,EAAM,OAIf,CAEA,MAAMD,EAAW,CAAA3H,KAAA,SAAAG,OAAA,yGASXgH,EAAY,CAAAnH,KAAA,SAAAG,OAAA,sFAQLqH,EAAQ,CAAAxH,KAAA,SAAAG,OAAA,qBAIRsH,EAAO,CAAAzH,KAAA,SAAAG,OAAA,uH","sources":["webpack://record-journey/./src/components/post/Giscus.tsx","webpack://record-journey/./src/components/AuthorItem.tsx","webpack://record-journey/./src/components/post/PostHead.tsx","webpack://record-journey/./src/components/post/PostImage.tsx","webpack://record-journey/./src/styles/prism.ts","webpack://record-journey/./src/components/PostContent.tsx","webpack://record-journey/./src/components/ReadNextCard.tsx","webpack://record-journey/./src/components/ReadNext.tsx","webpack://record-journey/./src/templates/post.tsx"],"sourcesContent":["import { createRef, memo, useContext, useEffect } from 'react';\n\nimport { ThemeToggleContext } from '@/contexts/ThemeToggleContext.ts';\n\nconst src = 'https://giscus.app/client.js';\nconst repo = 'pozafly/blog-comments';\n\nfunction Giscus() {\n const containerRef = createRef<HTMLDivElement>();\n const { theme } = useContext(ThemeToggleContext);\n\n useEffect(() => {\n const scriptElement = document.createElement('script');\n\n scriptElement.src = src;\n scriptElement.async = true;\n scriptElement.crossOrigin = 'anonymous';\n scriptElement.setAttribute('data-repo', repo);\n scriptElement.setAttribute('data-repo-id', 'MDEwOlJlcG9zaXRvcnkyNjU3MTk2NDk=');\n scriptElement.setAttribute('data-category', 'Comments');\n scriptElement.setAttribute('data-category-id', 'DIC_kwDOD9aPYc4CX-sv');\n scriptElement.setAttribute('data-mapping', 'pathname');\n scriptElement.setAttribute('data-strict', '0');\n scriptElement.setAttribute('data-reactions-enabled', '1');\n scriptElement.setAttribute('data-emit-metadata', '0');\n scriptElement.setAttribute('data-input-position', 'top');\n scriptElement.setAttribute('data-theme', document.body.className === 'dark' ? 'dark' : 'light');\n\n containerRef.current?.appendChild(scriptElement);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const iframe = document.querySelector<HTMLIFrameElement>('iframe.giscus-frame');\n iframe?.contentWindow?.postMessage({ giscus: { setConfig: { theme } } }, 'https://giscus.app');\n }, [theme]);\n\n return <div ref={containerRef} />;\n}\n\nexport default memo(Giscus);\n","import { Link } from 'gatsby';\nimport { css } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport { GatsbyImage, getImage } from 'gatsby-plugin-image';\n\nimport { AuthorProfileImage } from '@/components/PostCard.tsx';\n\nimport type { Author } from '@/templates/post.tsx';\n\ntype AuthorItemProps = {\n author: Author;\n};\n\nexport default function AuthorItem({ author }: AuthorItemProps) {\n const imageSrc = getImage(author.avatar);\n\n return (\n <AuthorItemLi className=\"author-list-item\">\n <Link css={AuthorAvatar} className=\"author-avatar\" to={'/about'}>\n {imageSrc && (\n <GatsbyImage\n image={imageSrc}\n css={AuthorProfileImage}\n className=\"author-profile-image\"\n alt={author.name}\n />\n )}\n </Link>\n </AuthorItemLi>\n );\n}\n\nconst AuthorItemLi = styled.li`\n position: relative;\n flex-shrink: 0;\n margin: 0;\n padding: 0;\n\n :hover .author-name-tooltip {\n transform: translate(-10px, -2px);\n opacity: 1;\n }\n`;\n\nconst AuthorAvatar = css`\n overflow: hidden;\n display: block;\n width: 40px;\n height: 40px;\n margin: 0 -4px;\n border: 2px solid var(--author-border);\n border-radius: 100%;\n\n @media (max-width: 500px) {\n width: 36px;\n height: 36px;\n }\n`;\n","import { Fragment } from 'react';\nimport { Link } from 'gatsby';\nimport styled from '@emotion/styled';\nimport { kebabCase } from 'lodash-es';\n\nimport AuthorItem from '@/components/AuthorItem.tsx';\nimport { colors } from '@/styles/colors.ts';\nimport { PostFullHeader, PostFullTitle } from '@/styles/shared.ts';\nimport config from '@/website-config.ts';\n\nimport type { Author } from '@/templates/post.tsx';\n\ntype Props = {\n tags: string[];\n excerpt: string;\n title: string;\n author: Author[];\n readingTime: {\n text: string;\n };\n datetime: string;\n};\n\nexport default function PostHead({ tags, datetime, readingTime, author, excerpt, title }: Props) {\n return (\n <PostFullHeader className=\"post-full-header\">\n <PostFullTags className=\"post-full-tags\">\n {tags &&\n tags.length > 0 &&\n config.showAllTags &&\n tags.map((tag, idx) => (\n <Fragment key={tag}>\n {idx > 0 && <Fragment>, </Fragment>}\n <Link to={`/tags/${kebabCase(tag)}/`}>{tag}</Link>\n </Fragment>\n ))}\n {tags && tags.length > 0 && !config.showAllTags && (\n <Link to={`/tags/${kebabCase(tags[0])}/`}>{tags[0]}</Link>\n )}\n </PostFullTags>\n <PostFullTitle className=\"post-full-title\">{title}</PostFullTitle>\n <PostFullCustomExcerpt className=\"post-full-custom-excerpt\">{excerpt}</PostFullCustomExcerpt>\n <PostFullByline className=\"post-full-byline\">\n <section className=\"post-full-byline-content\">\n <AuthorListUl className=\"author-list\">\n <AuthorItem key={author[0].name} author={author[0]} />\n </AuthorListUl>\n\n <section className=\"post-full-byline-meta\">\n <div className=\"author-name\">\n {author.map((author) => (\n <Link key={author.name} to={'/about'}>\n {author.name}\n </Link>\n ))}\n </div>\n <div className=\"byline-meta-content\">\n <time className=\"byline-meta-date\" dateTime={datetime}>\n {datetime}\n </time>\n <span className=\"byline-reading-time\">\n <span className=\"bull\">•</span>\n {readingTime.text}\n </span>\n </div>\n </section>\n </section>\n </PostFullByline>\n </PostFullHeader>\n );\n}\n\nconst PostFullTags = styled.section`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n font-size: 1.2rem;\n font-weight: 600;\n line-height: 1.4em;\n color: ${colors.midgrey};\n\n a {\n font-size: 1.2rem;\n color: var(--anchor-secondary-color);\n }\n`;\n\nconst PostFullCustomExcerpt = styled.p`\n margin: 20px 0 0;\n font-size: 2rem;\n font-weight: 360;\n line-height: 1.4em;\n color: var(--post-card-description);\n\n @media (max-width: 500px) {\n font-size: 1.9rem;\n line-height: 1.5em;\n }\n`;\n\nconst PostFullByline = styled.div`\n display: flex;\n justify-content: space-between;\n margin: 35px 0 0;\n padding-top: 15px;\n border-top: 1px solid var(--post-full-border);\n\n .post-full-byline-content {\n display: flex;\n flex-grow: 1;\n align-items: flex-start;\n }\n\n .post-full-byline-content .author-list {\n justify-content: flex-start;\n padding: 0 12px 0 0;\n }\n\n .post-full-byline-meta {\n margin: 2px 0 0;\n font-size: 1.4rem;\n line-height: 1.2em;\n color: #768086;\n letter-spacing: 0.2px;\n }\n\n .post-full-byline-meta .author-name {\n margin: 0 0 3px;\n font-size: 1.4rem;\n font-weight: 500;\n line-height: 1.3em;\n }\n\n .post-full-byline-meta .author-name a {\n font-size: 13px;\n color: var(--post-full-meta-link);\n }\n\n .post-full-byline-meta .author-name a:hover {\n color: var(--post-full-meta-link-hover);\n }\n\n .post-full-byline-meta .byline-reading-time,\n .post-full-byline-meta .byline-meta-date {\n font-size: 13px;\n }\n\n .post-full-byline-meta .bull {\n display: inline-block;\n margin: 0 4px;\n opacity: 0.6;\n }\n`;\n\nconst AuthorListUl = styled.ul`\n display: flex;\n flex-wrap: wrap;\n margin: 0 0 0 4px;\n padding: 0;\n list-style: none;\n`;\n","import { Fragment } from 'react';\nimport styled from '@emotion/styled';\nimport { GatsbyImage } from 'gatsby-plugin-image';\n\nimport type { IGatsbyImageData } from 'gatsby-plugin-image';\n\ntype Props = {\n imageSource: IGatsbyImageData;\n title: string;\n imageMeta: {\n photoAuthor?: string;\n photoVender?: string;\n };\n};\n\nexport default function PostImage({ imageSource, title, imageMeta }: Props) {\n const [photoAuthorName, photoAuthorLink, isBackground] = imageMeta.photoAuthor?.split('>>') || [\n undefined,\n undefined,\n undefined,\n ];\n const [photoVenderName, photoVenderLink] = imageMeta.photoVender?.split('>>') || [\n undefined,\n undefined,\n ];\n\n return (\n <PostFullImage>\n <div className=\"image-wrapper\">\n <GatsbyImage image={imageSource} style={{ height: '100%' }} alt={title} />\n </div>\n\n {photoAuthorLink && (\n <PhotoAuthorSection>\n <Fragment>{isBackground ? 'Background photo by ' : 'Photo by '}</Fragment>\n\n <a href={photoAuthorLink} target=\"_blank\" rel=\"noreferrer\">\n {photoAuthorName}\n </a>\n\n {photoVenderName && (\n <Fragment>\n {' '}\n on{' '}\n {photoVenderLink ? (\n <a href={photoVenderLink} target=\"_blank\" rel=\"noreferrer\">\n {photoVenderName}\n </a>\n ) : (\n <span>{photoVenderName}</span>\n )}\n </Fragment>\n )}\n </PhotoAuthorSection>\n )}\n </PostFullImage>\n );\n}\n\nconst PostFullImage = styled.figure`\n width: 80%;\n max-height: 800px;\n margin: 25px auto 100px;\n background-size: cover;\n\n .image-wrapper {\n overflow: hidden;\n width: 100%;\n border: 1px solid var(--image-border-color);\n border-radius: 8px;\n\n img {\n border-radius: 8px;\n }\n }\n\n @media (max-width: 1170px) {\n .image-wrapper {\n img {\n max-width: 1170px;\n }\n }\n }\n\n @media (max-width: 800px) {\n width: 100%;\n margin: 25px auto 60px;\n }\n`;\n\nconst PhotoAuthorSection = styled.figcaption`\n max-width: 728px;\n margin: 10px auto;\n font-size: 12px;\n text-align: center;\n\n a,\n span {\n font-size: 12px;\n color: var(--anchor-secondary-color);\n }\n\n @media (max-width: 800px) {\n font-size: 11px;\n\n a,\n span {\n font-size: 11px;\n }\n }\n`;\n","import { css } from '@emotion/react';\n\nimport type { Theme } from '@emotion/react';\n\nexport default (theme: Theme) => css`\n *:not(pre) > code[class*='language-'] {\n border-radius: 0.3em;\n background: var(--little-code-background);\n border: 1px solid var(--little-code-border);\n color: var(--main-color);\n padding: 0.15em 0.5em;\n white-space: normal;\n font-size: 13px;\n\n @media (max-width: 800px) {\n display: inline;\n }\n }\n\n .gatsby-highlight-code-line {\n display: block;\n margin-right: -1.3125rem;\n margin-left: -1.3125rem;\n padding-right: 1em;\n padding-left: 1.25em;\n background-color: var(--prism-background);\n border-left: 0.25em solid var(--prism-border-left);\n font-size: 1.4rem;\n }\n\n .gatsby-highlight {\n margin-bottom: 1.75rem;\n margin-left: -1.3125rem;\n margin-right: -1.3125rem;\n border-radius: 10px;\n background: var(--highlight-background);\n box-shadow: inset 0 0 0 1px var(--highlight-border);\n -webkit-overflow-scrolling: touch;\n overflow: auto;\n }\n\n .gatsby-highlight pre[class*='language-'] {\n float: left;\n min-width: 100%;\n font-size: 1.4rem;\n line-height: 24px;\n }\n\n pre[class*='language-'],\n code[class*='language-'] {\n color: var(--pre-code-color);\n text-shadow: none;\n font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n direction: ltr;\n text-align: left;\n white-space: pre;\n word-spacing: normal;\n word-break: normal;\n line-height: 1.8;\n -moz-tab-size: 4;\n -o-tab-size: 4;\n tab-size: 4;\n -webkit-hyphens: none;\n -moz-hyphens: none;\n -ms-hyphens: none;\n hyphens: none;\n\n &::-webkit-scrollbar {\n background-color: transparent;\n height: 4px;\n }\n\n &::-webkit-scrollbar-thumb {\n border-radius: 8px;\n background-color: hsla(230, 5%, 35%, 1);\n }\n\n @media (max-width: 800px) {\n display: inline-block;\n }\n }\n\n pre[class*='language-'] {\n overflow: auto;\n }\n\n .token {\n font-size: 1.4rem;\n }\n\n pre[data-line] {\n padding: 1em 0 1em 3em;\n position: relative;\n }\n\n @media print {\n pre[class*='language-'],\n code[class*='language-'] {\n text-shadow: none;\n }\n }\n\n pre[class*='language-'] {\n padding: 1em;\n overflow: auto;\n margin: 0;\n }\n\n :not(pre) > code[class*='language-'] {\n padding: 0.1em 0.3em;\n border-radius: 0.3em;\n color: #c9d1d9;\n background: #343942;\n }\n /* Line highlighting */\n\n pre[data-line] {\n position: relative;\n }\n\n pre[class*='language-'] > code[class*='language-'] {\n position: relative;\n z-index: 1;\n }\n\n .line-highlight {\n position: absolute;\n left: 0;\n right: 0;\n padding: inherit 0;\n margin-top: 1em;\n background: #2f2a1e;\n box-shadow: inset 5px 0 0 #674c16;\n z-index: 0;\n pointer-events: none;\n line-height: inherit;\n white-space: pre;\n }\n\n .namespace {\n opacity: 0.7;\n }\n\n .token.comment,\n .token.prolog,\n .token.doctype,\n .token.cdata {\n color: #8b949e;\n }\n\n .token.punctuation {\n color: #c9d1d9;\n }\n\n .token.property,\n .token.tag,\n .token.boolean,\n .token.number,\n .token.constant,\n .token.symbol,\n .token.deleted {\n color: #79c0ff;\n }\n\n .token.selector,\n .token.attr-name,\n .token.string,\n .token.char,\n .token.builtin,\n .token.inserted {\n color: #a5d6ff;\n }\n\n .token.operator,\n .token.entity,\n .token.url,\n .language-css .token.string,\n .style .token.string {\n color: #a5d6ff;\n }\n\n .token.atrule,\n .token.attr-value,\n .token.keyword {\n color: #a5d6ff;\n }\n\n .token.function {\n color: #d2a8ff;\n }\n\n .token.regex,\n .token.important,\n .token.variable {\n color: #a8daff;\n }\n\n .token.important,\n .token.bold {\n font-weight: bold;\n }\n\n .token.italic {\n font-style: italic;\n }\n\n .token.entity {\n cursor: help;\n }\n\n ${theme.mode === 'light'\n ? `\n .token.comment,\n .token.prolog,\n .token.cdata {\n color: hsl(230, 4%, 64%);\n }\n\n .token.doctype,\n .token.punctuation,\n .token.entity {\n color: hsl(230, 8%, 24%);\n }\n\n .token.attr-name,\n .token.class-name,\n .token.boolean,\n .token.constant,\n .token.number,\n .token.atrule {\n color: hsl(35, 99%, 36%);\n }\n\n .token.keyword {\n color: hsl(301, 63%, 40%);\n }\n\n .token.property,\n .token.tag,\n .token.symbol,\n .token.deleted,\n .token.important {\n color: hsl(5, 74%, 59%);\n }\n\n .token.selector,\n .token.string,\n .token.char,\n .token.builtin,\n .token.inserted,\n .token.regex,\n .token.attr-value,\n .token.attr-value > .token.punctuation {\n color: hsl(119, 34%, 47%);\n }\n\n .token.variable,\n .token.operator,\n .token.function {\n color: hsl(221, 87%, 60%);\n }\n\n .token.url {\n color: hsl(198, 99%, 37%);\n }\n\n .token.attr-value > .token.punctuation.attr-equals,\n .token.special-attr > .token.attr-value > .token.value.css {\n color: hsl(230, 8%, 24%);\n }\n\n .language-css .token.selector {\n color: hsl(5, 74%, 59%);\n }\n\n .language-css .token.property {\n color: hsl(230, 8%, 24%);\n }\n\n .language-css .token.function,\n .language-css .token.url > .token.function {\n color: hsl(198, 99%, 37%);\n }\n\n .language-css .token.url > .token.string.url {\n color: hsl(119, 34%, 47%);\n }\n\n .language-css .token.important,\n .language-css .token.atrule .token.rule {\n color: hsl(301, 63%, 40%);\n }\n\n .language-javascript .token.operator {\n color: hsl(301, 63%, 40%);\n }\n\n .language-javascript\n .token.template-string\n > .token.interpolation\n > .token.interpolation-punctuation.punctuation {\n color: hsl(344, 84%, 43%);\n }\n\n .language-json .token.operator {\n color: hsl(230, 8%, 24%);\n }\n\n .language-json .token.null.keyword {\n color: hsl(35, 99%, 36%);\n }\n\n .language-markdown .token.url,\n .language-markdown .token.url > .token.operator,\n .language-markdown .token.url-reference.url > .token.string {\n color: hsl(230, 8%, 24%);\n }\n\n .language-markdown .token.url > .token.content {\n color: hsl(221, 87%, 60%);\n }\n\n .language-markdown .token.url > .token.url,\n .language-markdown .token.url-reference.url {\n color: hsl(198, 99%, 37%);\n }\n\n .language-markdown .token.blockquote.punctuation,\n .language-markdown .token.hr.punctuation {\n color: hsl(230, 4%, 64%);\n }\n\n .language-markdown .token.code-snippet {\n color: hsl(119, 34%, 47%);\n }\n\n .language-markdown .token.bold .token.content {\n color: hsl(35, 99%, 36%);\n }\n\n .language-markdown .token.italic .token.content {\n color: hsl(301, 63%, 40%);\n }\n\n .language-markdown .token.strike .token.content,\n .language-markdown .token.strike .token.punctuation,\n .language-markdown .token.list.punctuation,\n .language-markdown .token.title.important > .token.punctuation {\n color: hsl(5, 74%, 59%);\n }\n\n .token.bold {\n font-weight: bold;\n }\n\n .token.entity {\n cursor: help;\n }\n\n .token.namespace {\n color: rgb(75 117 133);\n }\n\n .token.token.tab:not(:empty):before,\n .token.token.cr:before,\n .token.token.lf:before,\n .token.token.space:before {\n color: hsla(230, 8%, 24%, 0.2);\n }\n div.code-toolbar > .toolbar.toolbar > .toolbar-item > button,\n div.code-toolbar > .toolbar.toolbar > .toolbar-item > a,\n div.code-toolbar > .toolbar.toolbar > .toolbar-item > span {\n background: hsl(230, 1%, 90%);\n color: hsl(230, 6%, 44%);\n padding: 0.1em 0.4em;\n border-radius: 0.3em;\n }\n\n div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:hover,\n div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:focus,\n div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:hover,\n div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:focus,\n div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:hover,\n div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:focus {\n background: hsl(230, 1%, 78%);\n color: hsl(230, 8%, 24%);\n }\n\n .line-highlight.line-highlight {\n background: hsla(230, 8%, 24%, 0.05);\n }\n\n .line-highlight.line-highlight:before,\n .line-highlight.line-highlight[data-end]:after {\n background: hsl(230, 1%, 90%);\n color: hsl(230, 8%, 24%);\n padding: 0.1em 0.6em;\n border-radius: 0.3em;\n box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.2); /* same as Toolbar plugin default */\n }\n\n pre[id].linkable-line-numbers.linkable-line-numbers\n span.line-numbers-rows\n > span:hover:before {\n background-color: hsla(230, 8%, 24%, 0.05);\n }\n\n .line-numbers.line-numbers .line-numbers-rows,\n .command-line .command-line-prompt {\n border-right-color: hsla(230, 8%, 24%, 0.2);\n }\n\n .line-numbers .line-numbers-rows > span:before,\n .command-line .command-line-prompt > span:before {\n color: hsl(230, 1%, 62%);\n }\n\n .rainbow-braces .token.token.punctuation.brace-level-1,\n .rainbow-braces .token.token.punctuation.brace-level-5,\n .rainbow-braces .token.token.punctuation.brace-level-9 {\n color: hsl(5, 74%, 59%);\n }\n\n .rainbow-braces .token.token.punctuation.brace-level-2,\n .rainbow-braces .token.token.punctuation.brace-level-6,\n .rainbow-braces .token.token.punctuation.brace-level-10 {\n color: hsl(119, 34%, 47%);\n }\n\n .rainbow-braces .token.token.punctuation.brace-level-3,\n .rainbow-braces .token.token.punctuation.brace-level-7,\n .rainbow-braces .token.token.punctuation.brace-level-11 {\n color: hsl(221, 87%, 60%);\n }\n\n .rainbow-braces .token.token.punctuation.brace-level-4,\n .rainbow-braces .token.token.punctuation.brace-level-8,\n .rainbow-braces .token.token.punctuation.brace-level-12 {\n color: hsl(301, 63%, 40%);\n }\n\n pre.diff-highlight > code .token.token.deleted:not(.prefix),\n pre > code.diff-highlight .token.token.deleted:not(.prefix) {\n background-color: hsla(353, 100%, 66%, 0.15);\n }\n\n pre.diff-highlight > code .token.token.inserted:not(.prefix),\n pre > code.diff-highlight .token.token.inserted:not(.prefix) {\n background-color: hsla(137, 100%, 55%, 0.15);\n }\n\n .prism-previewer.prism-previewer:before,\n .prism-previewer-gradient.prism-previewer-gradient div {\n border-color: hsl(0, 0, 95%);\n }\n .prism-previewer.prism-previewer:after {\n border-top-color: hsl(0, 0, 95%);\n }\n\n .prism-previewer-flipped.prism-previewer-flipped.after {\n border-bottom-color: hsl(0, 0, 95%);\n }\n\n .prism-previewer-angle.prism-previewer-angle:before,\n .prism-previewer-time.prism-previewer-time:before,\n .prism-previewer-easing.prism-previewer-easing {\n background: hsl(0, 0%, 100%);\n }\n\n .prism-previewer-angle.prism-previewer-angle circle,\n .prism-previewer-time.prism-previewer-time circle {\n stroke: hsl(230, 8%, 24%);\n stroke-opacity: 1;\n }\n\n .prism-previewer-easing.prism-previewer-easing circle,\n .prism-previewer-easing.prism-previewer-easing path,\n .prism-previewer-easing.prism-previewer-easing line {\n stroke: hsl(230, 8%, 24%);\n }\n\n .prism-previewer-easing.prism-previewer-easing circle {\n fill: transparent;\n }\n `\n : ``}\n`;\n","import prism from '@/styles/prism.ts';\nimport { PostFullContent } from '@/styles/shared.ts';\n\nfunction PostContent({ html }: { html: string }) {\n return (\n <PostFullContent className=\"post-full-content\" css={prism}>\n <div className=\"post-content\" dangerouslySetInnerHTML={{ __html: html }} />\n </PostFullContent>\n );\n}\n\nexport default PostContent;\n","import { Link } from 'gatsby';\nimport styled from '@emotion/styled';\nimport { format } from 'date-fns';\nimport { kebabCase } from 'lodash-es';\nimport { lighten } from 'polished';\n\nimport { colors } from '@/styles/colors.ts';\n\nexport type ReadNextProps = {\n tags: string[];\n currentPageSlug: string;\n relatedPosts: {\n totalCount: number;\n edges: Array<{\n node: {\n frontmatter: {\n title: string;\n date: string;\n };\n fields: {\n readingTime: {\n text: string;\n };\n slug: string;\n };\n };\n }>;\n };\n};\n\nexport default function ReadNextCard(props: ReadNextProps) {\n // filter out current post and limit to 3 related posts\n const relatedPosts = props.relatedPosts.edges\n .filter((post) => post.node.fields.slug !== props.currentPageSlug)\n .slice(0, 3);\n\n return (\n <ReadNextCardArticle className=\"read-next-card\">\n <header className=\"read-next-card-header\">\n <ReadNextCardHeaderTitle>\n <span>More in</span>{' '}\n <Link to={`/tags/${kebabCase(props.tags[0])}/`}>{props.tags[0]}</Link>\n </ReadNextCardHeaderTitle>\n </header>\n <ReadNextCardContent className=\"read-next-card-content\">\n <ul>\n {relatedPosts.map((n) => {\n const date = new Date(n.node.frontmatter.date);\n const datetime = format(date, 'yyyy-MM-dd');\n const displayDatetime = format(date, 'yyyy-MM-dd');\n\n return (\n <li key={n.node.frontmatter.title}>\n <h4>\n <Link to={n.node.fields.slug}>{n.node.frontmatter.title}</Link>\n </h4>\n <ReadNextCardMeta className=\"read-next-card-meta\">\n <p>\n <time dateTime={datetime}>{displayDatetime}</time> -{' '}\n {n.node.fields.readingTime.text}\n </p>\n </ReadNextCardMeta>\n </li>\n );\n })}\n </ul>\n </ReadNextCardContent>\n <ReadNextCardFooter className=\"read-next-card-footer\">\n <Link to={`/tags/${kebabCase(props.tags[0])}/`}>\n {props.relatedPosts.totalCount > 1 && `See all ${props.relatedPosts.totalCount} posts`}\n {props.relatedPosts.totalCount === 1 && '1 post'}\n {props.relatedPosts.totalCount === 0 && 'No posts'} →\n </Link>\n </ReadNextCardFooter>\n </ReadNextCardArticle>\n );\n}\n\nconst ReadNextCardArticle = styled.article`\n position: relative;\n overflow: hidden;\n display: flex;\n flex: 0 1 326px;\n flex-direction: column;\n margin: 0 25px 50px;\n padding: 25px;\n background: linear-gradient(${lighten('0.02', colors.darkgrey)}, #0b0c0f);\n border-radius: 12px;\n\n a {\n transition: all 0.2s ease-in-out;\n }\n\n a:hover {\n text-decoration: none;\n }\n\n @media (max-width: 1170px) {\n flex: 1 1 261px;\n margin-bottom: 5vw;\n }\n\n @media (max-width: 650px) {\n display: none;\n flex: 1 1 auto;\n margin: 0 25px;\n padding: 0;\n background: none;\n }\n`;\n\nconst ReadNextCardHeaderTitle = styled.h3`\n margin: 0;\n font-size: 1.3rem;\n font-weight: 300;\n line-height: 1em;\n color: rgb(255 255 255 / 0.6);\n letter-spacing: 0.4px;\n\n span,\n a {\n font-size: inherit;\n }\n\n a {\n font-weight: 500;\n color: #fff;\n text-decoration: none;\n opacity: 0.8;\n }\n\n a:hover {\n opacity: 1;\n }\n`;\n\nconst ReadNextCardContent = styled.div`\n font-size: 1.3rem;\n\n ul {\n display: flex;\n flex-direction: column;\n margin: 0;\n padding: 0;\n list-style: none;\n }\n\n li {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n margin: 0;\n padding: 20px 0;\n border-bottom: rgb(255 255 255 / 0.1);\n }\n\n li:last-of-type {\n padding-bottom: 5px;\n border: none;\n }\n\n h4 {\n margin: 0;\n font-size: 1.3rem;\n font-weight: 600;\n line-height: 1.6em;\n }\n\n li a {\n display: block;\n font-size: inherit;\n color: #fff;\n opacity: 0.8;\n }\n\n li a:hover {\n opacity: 1;\n }\n`;\n\nconst ReadNextCardMeta = styled.div`\n margin-top: 2px;\n font-size: 1.2rem;\n font-weight: 400;\n line-height: 1.4em;\n\n p {\n margin: 0;\n font-size: inherit;\n color: rgb(255 255 255 / 0.6);\n\n time {\n font-size: inherit;\n }\n }\n`;\n\nconst ReadNextCardFooter = styled.footer`\n position: relative;\n margin: 40px 0 5px;\n\n a {\n padding: 7px 12px 8px 14px;\n font-size: 1.3rem;\n color: rgb(255 255 255 / 0.6);\n border: 1px solid rgb(255 255 255 / 0.6);\n border-radius: 999px;\n transition: all 0.35s ease-in-out;\n }\n\n a:hover {\n color: ${colors.yellow};\n text-decoration: none;\n border-color: ${colors.yellow};\n }\n`;\n","import styled from '@emotion/styled';\nimport { lighten } from 'polished';\n\nimport PostCard from '@/components/PostCard.tsx';\nimport ReadNextCard from '@/components/ReadNextCard.tsx';\nimport { colors } from '@/styles/colors.ts';\nimport { inner, outer } from '@/styles/shared.ts';\n\nimport type { PageContext } from '@/templates/post.tsx';\n\ntype ReadNextProps = {\n tags: string[];\n currentPageSlug: string;\n relatedPosts: {\n totalCount: number;\n edges: Array<{\n node: {\n frontmatter: {\n date: string;\n title: string;\n };\n fields: {\n slug: string;\n readingTime: {\n text: string;\n };\n };\n };\n }>;\n };\n pageContext: {\n prev: PageContext;\n next: PageContext;\n };\n};\n\nexport default function ReadNext({\n relatedPosts,\n currentPageSlug,\n tags,\n pageContext,\n}: ReadNextProps) {\n const showRelatedPosts = relatedPosts.totalCount > 1;\n\n return (\n <ReadNextAside className=\"read-next\" css={outer}>\n <div css={inner}>\n <ReadNextFeed className=\"read-next-feed\">\n {showRelatedPosts && (\n <ReadNextCard\n currentPageSlug={currentPageSlug}\n tags={tags}\n relatedPosts={relatedPosts}\n />\n )}\n\n {pageContext.prev && <PostCard post={pageContext.prev} isNext={true} />}\n {pageContext.next && <PostCard post={pageContext.next} isNext={true} />}\n </ReadNextFeed>\n </div>\n </ReadNextAside>\n );\n}\n\nconst ReadNextAside = styled.aside`\n /* background: ${lighten('-0.05', colors.darkgrey)}; */\n background: #0b0c0f;\n\n .post-card {\n padding-bottom: 0;\n border-bottom: none;\n }\n\n .post-card:after {\n display: none;\n }\n\n .post-card-primary-tag {\n color: #fff;\n opacity: 0.6;\n }\n\n .post-card-title {\n color: #fff;\n word-break: keep-all;\n opacity: 0.8;\n transition: all 0.2s ease-in-out;\n }\n\n .post-card:hover .post-card-image {\n opacity: 1;\n }\n\n .post-card-excerpt {\n color: rgb(255 255 255 / 0.6);\n }\n\n .static-avatar {\n border-color: #000;\n }\n\n .post-card-byline-content {\n color: rgb(255 255 255 / 0.6);\n }\n\n .post-card-byline-content a {\n color: rgb(255 255 255 / 0.8);\n }\n\n .author-avatar {\n border-color: ${lighten('-0.05', colors.darkgrey)};\n }\n\n .author-profile-image {\n background: ${lighten('-0.05', colors.darkgrey)};\n }\n\n @media (max-width: 650px) {\n .post-card {\n flex: 1 1 auto;\n margin: 25px;\n padding: 25px 0 0;\n }\n }\n`;\n\nconst ReadNextFeed = styled.div`\n display: flex;\n flex-wrap: wrap;\n margin: 0 -25px;\n padding: 60px 0 0;\n`;\n","import { Fragment } from 'react';\nimport { graphql } from 'gatsby';\nimport { css } from '@emotion/react';\nimport { format } from 'date-fns';\nimport { getImage, getSrc } from 'gatsby-plugin-image';\n\nimport Footer from '@/components/Footer.tsx';\nimport SiteNav from '@/components/header/SiteNav.tsx';\nimport Giscus from '@/components/post/Giscus.tsx';\nimport PostHead from '@/components/post/PostHead.tsx';\nimport PostImage from '@/components/post/PostImage.tsx';\nimport PostContent from '@/components/PostContent.tsx';\nimport ReadNext from '@/components/ReadNext.tsx';\nimport Wrapper from '@/components/Wrapper.tsx';\nimport IndexLayout from '@/layouts/index.tsx';\nimport { inner, outer, SiteMain } from '@/styles/shared.ts';\nimport config from '@/website-config.ts';\n\nimport type { ImageDataLike } from 'gatsby-plugin-image';\n\nexport type Author = {\n name: string;\n bio: string;\n avatar: ImageDataLike;\n};\n\ntype PageTemplateProps = {\n location: Location;\n data: {\n markdownRemark: {\n html: string;\n htmlAst: unknown;\n excerpt: string;\n frontmatter: {\n title: string;\n date: string;\n userDate: string;\n image: ImageDataLike;\n excerpt: string;\n tags: string[];\n author: Author[];\n photoAuthor: string;\n photoVender: string;\n };\n fields: {\n readingTime: {\n text: string;\n };\n };\n };\n relatedPosts: {\n totalCount: number;\n edges: Array<{\n node: {\n frontmatter: {\n title: string;\n date: string;\n };\n fields: {\n readingTime: {\n text: string;\n };\n slug: string;\n };\n };\n }>;\n };\n };\n pageContext: {\n prev: PageContext;\n next: PageContext;\n };\n};\n\nexport type PageContext = {\n excerpt: string;\n fields: {\n slug: string;\n readingTime: {\n text: string;\n };\n };\n frontmatter: {\n image: ImageDataLike;\n excerpt: string;\n title: string;\n date: string;\n draft?: boolean;\n tags: string[];\n author: Author[];\n };\n};\n\nexport const Head = ({ data, location }: PageTemplateProps) => {\n const post = data.markdownRemark;\n const imageData = post.frontmatter.image;\n let width: number | undefined;\n let height: number | undefined;\n if (imageData) {\n width = getImage(imageData)?.width;\n height = getImage(imageData)?.height;\n }\n\n const date = new Date(post.frontmatter.date);\n const publishedTime = date.toISOString();\n\n return (\n <Fragment>\n <title>{post.frontmatter.title}</title>\n\n <meta name=\"description\" content={post.frontmatter.excerpt || post.excerpt} />\n <meta property=\"og:site_name\" content={config.title} />\n <meta property=\"og:type\" content=\"article\" />\n <meta property=\"og:title\" content={post.frontmatter.title} />\n <meta property=\"og:description\" content={post.frontmatter.excerpt || post.excerpt} />\n <meta property=\"og:url\" content={config.siteUrl + location.pathname} />\n {imageData && <meta property=\"og:image\" content={`${config.siteUrl}${getSrc(imageData)}`} />}\n <meta property=\"article:published_time\" content={publishedTime} />\n {/* not sure if modified time possible */}\n {/* <meta property=\"article:modified_time\" content=\"2018-08-20T15:12:00.000Z\" /> */}\n {post.frontmatter.tags && <meta property=\"article:tag\" content={post.frontmatter.tags[0]} />}\n\n {config.instagram && <meta property=\"article:publisher\" content={config.instagram} />}\n {config.instagram && <meta property=\"article:author\" content={config.instagram} />}\n <meta name=\"github:card\" content=\"summary_large_image\" />\n <meta name=\"github:title\" content={post.frontmatter.title} />\n <meta name=\"github:description\" content={post.frontmatter.excerpt || post.excerpt} />\n <meta name=\"github:url\" content={config.siteUrl + location.pathname} />\n {imageData && <meta name=\"github:image\" content={`${config.siteUrl}${getSrc(imageData)}`} />}\n <meta name=\"github:label1\" content=\"Written by\" />\n <meta name=\"github:data1\" content={post.frontmatter.author[0].name} />\n <meta name=\"github:label2\" content=\"Filed under\" />\n {post.frontmatter.tags && <meta name=\"github:data2\" content={post.frontmatter.tags[0]} />}\n {config.github && (\n <meta name=\"github:site\" content={`@${config.github.split('https://github.com/')[1]}`} />\n )}\n {config.github && (\n <meta name=\"github:creator\" content={`@${config.github.split('https://github.com/')[1]}`} />\n )}\n {width && <meta property=\"og:image:width\" content={width?.toString()} />}\n {height && <meta property=\"og:image:height\" content={height?.toString()} />}\n </Fragment>\n );\n};\n\nexport default function PageTemplate({ data, pageContext, location }: PageTemplateProps) {\n const post = data.markdownRemark;\n const imageData = post.frontmatter.image;\n const imageSource = getImage(imageData);\n const imageMeta = {\n photoAuthor: post.frontmatter.photoAuthor,\n photoVender: post.frontmatter.photoVender,\n };\n const date = new Date(post.frontmatter.date);\n const datetime = format(date, 'yyyy-MM-dd');\n\n return (\n <IndexLayout className=\"post-template\">\n <Wrapper css={PostTemplate}>\n <SiteNav isPost post={post.frontmatter} />\n <main id=\"site-main\" className=\"site-main\" css={[SiteMain, outer]}>\n <div css={inner}>\n {/* TODO: no-image css tag? */}\n <article css={[PostFull, !imageData && NoImage]}>\n <PostHead\n tags={post.frontmatter.tags}\n readingTime={post.fields.readingTime}\n datetime={datetime}\n author={post.frontmatter.author}\n excerpt={post.frontmatter.excerpt}\n title={post.frontmatter.title}\n />\n\n {imageSource && (\n <PostImage\n imageSource={imageSource}\n title={post.frontmatter.title}\n imageMeta={imageMeta}\n />\n )}\n\n <PostContent html={post.html} />\n </article>\n <div css={GiscusStyle}>\n <Giscus />\n </div>\n </div>\n </main>\n <ReadNext\n currentPageSlug={location.pathname}\n tags={post.frontmatter.tags}\n relatedPosts={data.relatedPosts}\n pageContext={pageContext}\n />\n <Footer />\n </Wrapper>\n </IndexLayout>\n );\n}\n\nconst GiscusStyle = css`\n position: relative;\n box-sizing: border-box;\n width: 100%;\n max-width: 760px;\n margin-right: auto;\n margin-left: auto;\n`;\n\nconst PostTemplate = css`\n .site-main {\n margin-top: 64px;\n padding-bottom: 4vw;\n background: var(--background-color);\n }\n`;\n\nexport const PostFull = css`\n position: relative;\n`;\n\nexport const NoImage = css`\n .post-full-content {\n padding-top: 0;\n padding-bottom: 0;\n }\n\n .post-full-content:before,\n .post-full-content:after {\n display: none;\n }\n`;\n\nexport const query = graphql`\n query ($slug: String, $primaryTag: String) {\n markdownRemark(fields: { slug: { eq: $slug } }) {\n html\n htmlAst\n excerpt\n fields {\n readingTime {\n text\n }\n }\n frontmatter {\n title\n userDate: date(formatString: \"D MMMM YYYY\")\n date\n tags\n excerpt\n photoAuthor\n photoVender\n image {\n childImageSharp {\n gatsbyImageData(\n layout: FULL_WIDTH\n placeholder: BLURRED\n formats: [AUTO, WEBP, AVIF]\n breakpoints: [500, 800, 1170]\n )\n }\n }\n author {\n name\n bio\n avatar {\n childImageSharp {\n gatsbyImageData(layout: FULL_WIDTH, breakpoints: [40, 80, 120])\n }\n }\n }\n }\n }\n relatedPosts: allMarkdownRemark(\n filter: { frontmatter: { tags: { in: [$primaryTag] }, draft: { ne: true } } }\n limit: 5\n sort: { frontmatter: { date: DESC } }\n ) {\n totalCount\n edges {\n node {\n id\n excerpt\n frontmatter {\n title\n date\n }\n fields {\n readingTime {\n text\n }\n slug\n }\n }\n }\n }\n }\n`;\n"],"names":["Giscus","containerRef","createRef","theme","useContext","ThemeToggleContext","useEffect","_containerRef$current","scriptElement","document","createElement","src","async","crossOrigin","setAttribute","body","className","current","appendChild","_iframe$contentWindow","iframe","querySelector","contentWindow","postMessage","giscus","setConfig","___EmotionJSX","ref","memo","AuthorItem","author","imageSrc","getImage","avatar","AuthorItemLi","Link","css","AuthorAvatar","to","GatsbyImage","image","AuthorProfileImage","alt","name","_styled","target","styles","PostHead","tags","datetime","readingTime","excerpt","title","PostFullHeader","PostFullTags","length","config","showAllTags","map","tag","idx","Fragment","key","_kebabCase","PostFullTitle","PostFullCustomExcerpt","PostFullByline","AuthorListUl","dateTime","text","colors","midgrey","PostImage","imageSource","imageMeta","_imageMeta$photoAutho","_imageMeta$photoVende","photoAuthorName","photoAuthorLink","isBackground","photoAuthor","split","undefined","photoVenderName","photoVenderLink","photoVender","PostFullImage","style","height","PhotoAuthorSection","href","rel","mode","html","PostFullContent","prism","dangerouslySetInnerHTML","__html","ReadNextCard","props","relatedPosts","edges","filter","post","node","fields","slug","currentPageSlug","slice","ReadNextCardArticle","ReadNextCardHeaderTitle","ReadNextCardContent","n","date","Date","frontmatter","format","displayDatetime","ReadNextCardMeta","ReadNextCardFooter","totalCount","lighten","darkgrey","yellow","ReadNext","pageContext","showRelatedPosts","ReadNextAside","outer","inner","ReadNextFeed","prev","PostCard","isNext","next","Head","data","location","_width","_height","markdownRemark","imageData","width","_getImage","_getImage2","publishedTime","toISOString","content","property","siteUrl","pathname","getSrc","instagram","github","toString","PageTemplate","IndexLayout","Wrapper","PostTemplate","SiteNav","isPost","id","SiteMain","PostFull","NoImage","PostContent","GiscusStyle","Footer"],"sourceRoot":""}