{"version":3,"mappings":"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A,YACA,WACA,QACA,SACA,WACA,SACA,UACA,MACA,SACA,SACJ,EACQC,EAAmB,CACvB,UACA,QACA,OACA,MACJ,EACQC,EAAkB,CACtB,WACA,KACA,OACA,QACA,OACA,QACA,QACA,QACA,WACA,KACA,OACA,QACA,WACA,SACA,UACA,QACA,MACA,UACA,OACA,KACA,WACA,KACA,YACA,WACA,KACA,OACA,YACA,MACA,WACA,MACA,WACA,SACA,UACA,YACA,SACA,WACA,SACA,MACA,SACA,SACA,SACA,SACA,aACA,SACA,SACA,SACA,OACA,QACA,MACA,SACA,YACA,SACA,QACA,UACA,OACA,WACA,OACJ,EACQC,EAAsB,CAC1B,MACA,QACA,MACA,YACA,QACA,QACA,KACA,aACA,SACA,OACA,MACA,SACA,QACA,OACA,OACA,OACA,MACA,SACA,MACA,UACA,KACA,KACA,UACA,UACA,SACA,SACA,MACA,YACA,UACA,MACA,OACA,QACA,OACA,OACJ,EAEQC,EAAW,CACf,QAASF,EAAgB,OAAOC,CAAmB,EACnD,SAAUJ,EACV,QAASE,CACb,EACQ5iD,EAAa+D,EAAK,QAAQA,EAAK,WAAY,CAAE,MAAO,oBAAoB,CAAE,EAC1Ei/C,EAAU,CACd,UAAW,SACX,SAAU,CACR,CAAE,MAAO,eAAkB,EAC3B,CAAE,MAAO,iEAAsE,EAC/E,CAAE,MAAO,qFAA4F,CACtG,EACD,UAAW,CACf,EACQC,EAAa,CACjB,UAAW,SACX,MAAO,4BACP,UAAW,CACf,EACQC,EAAkB,CACtB,UAAW,SACX,MAAO,KACP,IAAK,IACL,SAAU,CAAE,CAAE,MAAO,KAAQ,CACjC,EACQC,EAAwBp/C,EAAK,QAAQm/C,EAAiB,CAAE,QAAS,IAAI,CAAE,EACvEE,EAAQ,CACZ,UAAW,QACX,MAAO,KACP,IAAK,KACL,SAAUL,CACd,EACQM,EAAct/C,EAAK,QAAQq/C,EAAO,CAAE,QAAS,IAAI,CAAE,EACnDE,EAAsB,CAC1B,UAAW,SACX,MAAO,MACP,IAAK,IACL,QAAS,KACT,SAAU,CACR,CAAE,MAAO,M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AE,KAAO,EAClB,SAAUg/C,EACV,QAAS,QACT,SAAU,CACRh/C,EAAK,QACH,UACA,OACA,CACE,UAAW,EACX,SAAU,CACR,CAEE,MAAO,OACP,UAAW,CACZ,EACD,CACE,UAAW,SACX,MAAO,YACR,CACF,CACF,CACF,EAED,CACE,MAAO,wBACP,SAAU,SACV,UAAW,CACZ,EACDA,EAAK,oBACLA,EAAK,qBACL,CACE,MAAO,MACP,IAAK,MACL,UAAW,SACX,SAAU,CAAEA,EAAK,gBAAkB,CACpC,EACDA,EAAK,iBACLA,EAAK,kBACL,CACE,MAAO,CACL,oDACA,MACA2gD,CACD,EACD,UAAW,CACT,EAAG,UACH,EAAG,aACJ,CACF,EACD,CAEE,MAAO,aACP,MAAO,SACR,EACD,CACE,MAAO,CACL9oE,EAAM,OAAO,WAAY8oE,CAAa,EACtC,MACAA,EACA,MACA,QACD,EACD,UAAW,CACT,EAAG,OACH,EAAG,WACH,EAAG,UACJ,CACF,EACD,CACE,MAAO,CACL,SACA,MACAA,CACD,EACD,UAAW,CACT,EAAG,UACH,EAAG,aACJ,EACD,SAAU,CACRG,EACA9gD,EAAK,oBACLA,EAAK,oBACN,CACF,EACD,CAGE,cAAe,wBACf,UAAW,CACZ,EACD,CACE,MAAO,CACL,MAAQ4gD,EAAmB,QAC3B5gD,EAAK,oBACL,WACD,EACD,UAAW,CAAE,EAAG,gBAAkB,EAClC,SAAUg/C,EACV,SAAU,CACR,CACE,UAAW,SACX,MAAO,KACP,IAAK,KACL,SAAUA,EACV,UAAW,EACX,SAAU,CACR6B,EACA7gD,EAAK,iBACLA,EAAK,kBACLugD,GACAvgD,EAAK,oBACN,CACF,EACDA,EAAK,oBACLA,EAAK,oBACN,CACF,EACDugD,GACAM,CACD,CACL,CACA,CC/RA,MAAeE,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wCCATpmD,GAAW,2BACXqkD,IAAW,CACf,KACA,KACA,KACA,KACA,MACA,QACA,UACA,MACA,MACA,WACA,KACA,SACA,OACA,OACA,QACA,QACA,aACA,OACA,QACA,OACA,UACA,MACA,SACA,WACA,SACA,SACA,MACA,QACA,QACA,QAIA,WACA,QACA,QACA,SACA,SACA,OACA,SACA,SACF,EACMgC,IAAW,CACf,OACA,QACA,OACA,YACA,MACA,UACF,EAGMC,GAAQ,CAEZ,SACA,WACA,UACA,SAEA,OACA,OACA,SACA,SAEA,SACA,SAEA,QACA,eACA,eACA,YACA,aACA,oBACA,aACA,aACA,cACA,cACA,gBACA,iBAEA,MACA,MACA,UACA,UAEA,cACA,oBACA,UACA,WACA,OAEA,UACA,YACA,oBACA,gBAEA,UACA,QAEA,OAEA,aACF,EAEMC,GAAc,CAClB,QACA,YACA,gBACA,aACA,iBACA,cACA,YACA,UACF,EAEMC,GAAmB,CACvB,cACA,aACA,gBACA,eAEA,UACA,UAEA,OACA,WACA,QACA,aACA,WACA,YACA,qBACA,YACA,qBACA,SACA,UACF,EAEMC,IAAqB,CACzB,YACA,OACA,QACA,UACA,SACA,WACA,eACA,iBACA,SACA,QACF,EAEMC,IAAY,CAAE,EAAC,OACnBF,GACAF,GACAC,EACF,EAWA,SAASI,IAAWthD,EAAM,CACxB,MAAMnoB,EAAQmoB,EAAK,MAQbuhD,EAAgB,CAAC3nH,EAAO,CAAE,MAAA4nH,CAAK,IAAO,CAC1C,MAAM79H,GAAM,KAAOiW,EAAM,CAAC,EAAE,MAAM,CAAC,EAEnC,OADYA,EAAM,MAAM,QAAQjW,GAAK69H,CAAK,IAC3B,EACnB,EAEQC,EAAa9mD,GACb+mD,EAAW,CACf,MAAO,KACP,IAAK,KACT,EAEQC,EAAmB,4BACnBC,EAAU,CACd,MAAO,sBACP,IAAK,4BAKL,kBAAmB,CAAChoH,EAAO+yB,IAAa,CACtC,MAAMk1F,GAAkBjoH,EAAM,CAAC,EAAE,OAASA,EAAM,MAC1Cyb,EAAWzb,EAAM,MAAMioH,EAAe,EAC5C,GAIExsG,IAAa,KAGbA,IAAa,IACX,CACFsX,EAAS,YA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B1+C,GAAE,CAAC,GAAG0+C,EAAK,YAAa,CAAG,CACtF,EAEQ61F,EAAS7jD,EAAK,kBAAkB,CACpC,MAAO,qBACP,IAAK,eACT,CAAG,EAEK8jD,EAAa;AAAA,GACbpE,EAAS,CACb,MAAO,SACP,SAAU,CACRiE,EACAD,EACAE,EACAC,CACD,CACL,EACQ5B,EAAS,CACb,MAAO,SACP,SAAU,CACR,CAAE,MAAO,6BAA+B,EACxC,CAAE,MAAO,+BAAiC,EAC1C,CAAE,MAAO,2CAA6C,EAEtD,CAAE,MAAO,4EAA8E,CACxF,EACD,UAAW,CACf,EACQjB,EAAW,CACf,QACA,OACA,MACJ,EACQ+C,EAAM,CAGV,YACA,UACA,WACA,eACA,2BACA,WACA,aACA,gBACA,YAGA,MACA,OACA,OACA,UACA,eACA,QACA,UACA,eAMA,QACA,WACA,MACA,KACA,SACA,OACA,UACA,QACA,WACA,OACA,QACA,QACA,QACA,QACA,WACA,UACA,UACA,KACA,SACA,OACA,SACA,QACA,aACA,SACA,aACA,QACA,YACA,WACA,OACA,OACA,UACA,QACA,UACA,QACA,MACA,UACA,OACA,SACA,OACA,KACA,aACA,aACA,YACA,MACA,UACA,YACA,QACA,WACA,OACA,UACA,QACA,MACA,QACA,SACA,KACA,UACA,YACA,SACA,WACA,OACA,SACA,SACA,SACA,QACA,QACA,MACA,QACA,MACA,MACA,OACA,QACA,MACA,OACJ,EAEQ1C,EAAY,CAGhB,UACA,iBACA,qBACA,kBACA,gBACA,cACA,iBACA,2BACA,yBACA,kBACA,yBACA,eACA,YACA,oBACA,sBACA,kBACA,gBACA,iBACA,YACA,qBACA,iBACA,eACA,mBACA,2BACA,mBACA,kBACA,gBACA,iBACA,mBACA,mBACA,uBACA,sBACA,gBACA,oBACA,iBACA,aACA,iBACA,yBACA,2BACA,kCACA,6BACA,0BACA,oBACA,4BACA,yBACA,wBACA,gBACA,mBACA,mBACA,sBACA,cACA,gBACA,gBACA,UACA,aACA,aACA,mBACA,cACA,mBACA,WACA,WACA,aACA,oBACA,YACA,qBACA,2BACA,sBAGA,cACA,aACA,UACA,QACA,YACA,WACA,oBACA,eACA,aACA,YACA,cACA,WACA,gBACA,UAGA,YACA,yBACA,SACA,kBACA,OACA,SACA,UACJ,EAsBQrC,EAAW,CACf,QAAS+E,EACT,SAhBgBv8G,IAAU,CAE1B,MAAMh4C,EAAS,GACf,OAAAg4C,GAAM,QAAQzgD,GAAQ,CACpByI,EAAO,KAAKzI,CAAI,EACZA,EAAK,YAAa,IAAKA,EACzByI,EAAO,KAAKzI,EAAK,YAAa,GAE9ByI,EAAO,KAAKzI,EAAK,YAAa,EAEtC,CAAK,EACMyI,CACX,GAIsBwxJ,CAAQ,EAC1B,SAAUK,CACd,EAIQ2C,EAAqBx8G,IAClBA,GAAM,IAAIzgD,GACRA,EAAK,QAAQ,SAAU,EAAE,CACjC,EAGGk9J,EAAmB,CAAE,SAAU,CACnC,CACE,MAAO,CACL,MACApsE,EAAM,OAAOisE,EAAY,GAAG,EAE5BjsE,EAAM,OAAO,MAAOmsE,EAAkB3C,CAAS,EAAE,KAAK,MAAM,EAAG,MAAM,EACrEkC,CACD,EACD,MAAO,CACL,EAAG,UACH,EAAG,aACJ,CACF,CACL,GAEQW,EAAqBrsE,EAAM,OAAO8iB,EAAU,YAAY,EAExDwpD,EAAsC,CAAE,SAAU,CACtD,CACE,MAAO,CACLtsE,EAAM,OACJ,KACAA,EAAM,UAAU,aAAa,CAC9B,EACDqsE,CACD,EACD,MAAO,CAAE,EAAG,mBAAsB,CACnC,EACD,CACE,MAAO,CACL,KACA,OACD,EACD,MAAO,CAAE,EAAG,mBAAsB,CACnC,EACD,CACE,MAAO,CACLX,EACA1rE,EAAM,OACJ,KACAA,EAAM,UAAU,aAAa,CAC9B,EACDqsE,CACD,EACD,MAAO,CACL,EAAG,cACH,EAAG,mBACJ,CACF,EACD,CACE,MAAO,CACLX,EACA1rE,EAAM,OACJ,KACAA,EAAM,UAAU,aAAa,CAC9B,CACF,EACD,MAAO,CAAE,EAAG,aAAgB,CAC7B,EACD,CACE,MAAO,CACL0rE,EACA,KACA,OACD,EACD,MAAO,CACL,EAAG,cACH,EAAG,mBACJ,CACF,CACL,GAEQa,EAAiB,CACrB,MAAO,OACP,MAAOvsE,EAAM,OAAO8iB,EAAU9iB,EAAM,UAAU,GAAG,EAAGA,EAAM,UAAU,QAAQ,CAAC,CACjF,EACQwsE,EAAc,CAClB,UAAW,EACX,MAAO,KACP,IAAK,KACL,SAAUrF,EACV,SAAU,CACRoF,EACAZ,EACAW,EACAnkD,EAAK,qBACL0/C,EACAuC,EACAgC,CACD,CACL,EACQK,EAAkB,CACtB,UAAW,EACX,MAAO,CACL,KAEAzsE,EAAM,OAAO,wBAAyBmsE,EAAkBD,CAAG,EAAE,KAAK,MAAM,EAAG,IAAKC,EAAkB3C,CAAS,EAAE,KAAK,MAAM,EAAG,MAAM,EACjI1mD,EACA9iB,EAAM,OAAOisE,EAAY,GAAG,EAC5BjsE,EAAM,UAAU,QAAQ,CACzB,EACD,MAAO,CAAE,EAAG,uBAA0B,EACtC,SAAU,CAAEwsE,CAAa,CAC7B,EACEA,EAAY,SAAS,KAAKC,CAAe,EAEzC,MAAMC,EAAqB,CACzBH,EACAD,EACAnkD,EAAK,qBACL0/C,EACAuC,EACAgC,CACJ,EAEQO,EAAa,CACjB,MAAO3sE,EAAM,OAAO,SAAU0rE,CAAyB,EACvD,WAAY,OACZ,IAAK,IACL,SAAU,OACV,SAAU,CACR,QAASvC,EACT,QAAS,CACP,MACA,OACD,CACF,EACD,SAAU,CACR,CACE,MAAO,KACP,IAAK,IACL,SAAU,CACR,QAASA,EACT,QAAS,CACP,MACA,OACD,CACF,EACD,SAAU,CACR,OACA,GAAGuD,CACJ,CACF,EACD,GAAGA,EACH,CACE,MAAO,OACP,MAAOhB,CACR,CACF,CACL,EAEE,MAAO,CACL,iBAAkB,GAClB,SAAUvE,EACV,SAAU,CACRwF,EACAxkD,EAAK,kBACLA,EAAK,QAAQ,KAAM,GAAG,EACtBA,EAAK,QACH,OACA,OACA,CAAE,SAAU,CACV,CACE,MAAO,SACP,MAAO,YACR,CACX,CAAW,CACJ,EACD,CACE,MAAO,uBACP,SAAU,kBACV,OAAQ,CACN,MAAO,UACP,IAAKA,EAAK,iBACV,SAAU,CACR,CACE,MAAO,MACP,MAAO,OACP,WAAY,EACb,CACF,CACF,CACF,EACDyjD,EACA,CACE,MAAO,oBACP,MAAO,UACR,EACDD,EACAc,EACAH,EACA,CACE,MAAO,CACL,QACA,KACAxpD,CACD,EACD,MAAO,CACL,EAAG,UACH,EAAG,mBACJ,CACF,EACDspD,EACA,CACE,MAAO,WACP,UAAW,EACX,cAAe,cACf,IAAK,OACL,WAAY,GACZ,QAAS,UACT,SAAU,CACR,CAAE,cAAe,KAAQ,EACzBjkD,EAAK,sBACL,CACE,MAAO,KACP,WAAY,EACb,EACD,CACE,MAAO,SACP,MAAO,MACP,IAAK,MACL,aAAc,GACd,WAAY,GACZ,SAAUg/C,EACV,SAAU,CACR,OACAwE,EACAW,EACAnkD,EAAK,qBACL0/C,EACAuC,CACD,CACF,CACF,CACF,EACD,CACE,MAAO,QACP,SAAU,CACR,CACE,cAAe,OACf,QAAS,OACV,EACD,CACE,cAAe,wBACf,QAAS,QACV,CACF,EACD,UAAW,EACX,IAAK,KACL,WAAY,GACZ,SAAU,CACR,CAAE,cAAe,oBAAsB,EACvCjiD,EAAK,qBACN,CACF,EAID,CACE,cAAe,YACf,UAAW,EACX,IAAK,IACL,QAAS,OACT,SAAU,CAAEA,EAAK,QAAQA,EAAK,sBAAuB,CAAE,MAAO,aAAa,CAAE,CAAG,CACjF,EACD,CACE,cAAe,MACf,UAAW,EACX,IAAK,IACL,SAAU,CAER,CACE,MAAO,0BACP,MAAO,SACR,EAEDA,EAAK,qBACN,CACF,EACD0/C,EACAuC,CACD,CACL,CACA,CClmBA,MAAewC,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cCOf,SAASC,IAAO1kD,EAAM,CACpB,MAAMnoB,EAAQmoB,EAAK,MACbrF,EAAW,qCACXgqD,EAAiB,CACrB,MACA,KACA,SACA,QACA,QACA,QACA,OACA,QACA,WACA,MACA,MACA,OACA,OACA,SACA,UACA,MACA,OACA,SACA,KACA,SACA,KACA,KACA,SACA,QACA,cACA,MACA,KACA,OACA,QACA,SACA,MACA,QACA,OACA,OACJ,EAsGQ3F,EAAW,CACf,SAAU,sBACV,QAAS2F,EACT,SAvGgB,CAChB,aACA,MACA,MACA,MACA,QACA,MACA,OACA,aACA,YACA,QACA,WACA,MACA,cACA,UACA,UACA,UACA,OACA,MACA,SACA,YACA,OACA,OACA,SACA,QACA,SACA,YACA,UACA,UACA,UACA,OACA,OACA,MACA,KACA,QACA,MACA,aACA,aACA,OACA,MACA,OACA,SACA,MACA,MACA,aACA,MACA,OACA,SACA,MACA,OACA,MACA,MACA,QACA,WACA,QACA,OACA,WACA,QACA,MACA,UACA,QACA,SACA,eACA,MACA,MACA,QACA,QACA,OACA,OACA,KACJ,EAkCI,QAhCe,CACf,YACA,WACA,QACA,OACA,iBACA,MACJ,EA0BI,KArBY,CACZ,MACA,WACA,YACA,OACA,OACA,UACA,UACA,WACA,WACA,MACA,QACA,OACA,OACJ,CAQA,EAEQC,EAAS,CACb,UAAW,OACX,MAAO,gBACX,EAEQvF,EAAQ,CACZ,UAAW,QACX,MAAO,KACP,IAAK,KACL,SAAUL,EACV,QAAS,GACb,EAEQ6F,EAAkB,CACtB,MAAO,OACP,UAAW,CACf,EAEQnF,EAAS,CACb,UAAW,SACX,SAAU,CAAE1/C,EAAK,gBAAkB,EACnC,SAAU,CACR,CACE,MAAO,yCACP,IAAK,MACL,SAAU,CACRA,EAAK,iBACL4kD,CACD,EACD,UAAW,EACZ,EACD,CACE,MAAO,yCACP,IAAK,MACL,SAAU,CACR5kD,EAAK,iBACL4kD,CACD,EACD,UAAW,EACZ,EACD,CACE,MAAO,8BACP,IAAK,MACL,SAAU,CACR5kD,EAAK,iBACL4kD,EACAC,EACAxF,CACD,CACF,EACD,CACE,MAAO,8BACP,IAAK,MACL,SAAU,CACRr/C,EAAK,iBACL4kD,EACAC,EACAxF,CACD,CACF,EACD,CACE,MAAO,eACP,IAAK,IACL,UAAW,EACZ,EACD,CACE,MAAO,eACP,IAAK,IACL,UAAW,EACZ,EACD,CACE,MAAO,4BACP,IAAK,GACN,EACD,CACE,MAAO,4BACP,IAAK,GACN,EACD,CACE,MAAO,4BACP,IAAK,IACL,SAAU,CACRr/C,EAAK,iBACL6kD,EACAxF,CACD,CACF,EACD,CACE,MAAO,4BACP,IAAK,IACL,SAAU,CACRr/C,EAAK,iBACL6kD,EACAxF,CACD,CACF,EACDr/C,EAAK,iBACLA,EAAK,iBACN,CACL,EAGQ8kD,EAAY,kBACZC,EAAa,QAAQD,CAAS,UAAUA,CAAS,SAASA,CAAS,OAMnEjrD,EAAY,OAAO8qD,EAAe,KAAK,GAAG,CAAC,GAC3C1C,EAAS,CACb,UAAW,SACX,UAAW,EACX,SAAU,CAWR,CACE,MAAO,QAAQ6C,CAAS,MAAMC,CAAU,eAAeD,CAAS,YAAYjrD,CAAS,GACtF,EACD,CACE,MAAO,IAAIkrD,CAAU,QACtB,EAQD,CACE,MAAO,0CAA0ClrD,CAAS,GAC3D,EACD,CACE,MAAO,4BAA4BA,CAAS,GAC7C,EACD,CACE,MAAO,6BAA6BA,CAAS,GAC9C,EACD,CACE,MAAO,mCAAmCA,CAAS,GACpD,EAID,CACE,MAAO,OAAOirD,CAAS,WAAWjrD,CAAS,GAC5C,CACF,CACL,EACQmrD,EAAe,CACnB,UAAW,UACX,MAAOntE,EAAM,UAAU,SAAS,EAChC,IAAK,IACL,SAAUmnE,EACV,SAAU,CACR,CACE,MAAO,SACR,EAED,CACE,MAAO,IACP,IAAK,OACL,eAAgB,EACjB,CACF,CACL,EACQ8B,EAAS,CACb,UAAW,SACX,SAAU,CAER,CACE,UAAW,GACX,MAAO,UACP,KAAM,EACP,EACD,CACE,MAAO,KACP,IAAK,KACL,aAAc,GACd,WAAY,GACZ,SAAU9B,EACV,SAAU,CACR,OACA4F,EACA3C,EACAvC,EACA1/C,EAAK,iBACN,CACF,CACF,CACL,EACE,OAAAq/C,EAAM,SAAW,CACfK,EACAuC,EACA2C,CACJ,EAES,CACL,KAAM,SACN,QAAS,CACP,KACA,MACA,SACD,EACD,aAAc,GACd,SAAU5F,EACV,QAAS,cACT,SAAU,CACR4F,EACA3C,EACA,CAEE,MAAO,oBACP,MAAO,UACR,EACD,CAGE,cAAe,KACf,UAAW,CACZ,EACD,CAAE,MAAO,SAAU,MAAO,SAAW,EACrCvC,EACAsF,EACAhlD,EAAK,kBACL,CACE,MAAO,CACL,QAAS,MACTrF,CACD,EACD,MAAO,CACL,EAAG,UACH,EAAG,gBACJ,EACD,SAAU,CAAEmmD,CAAQ,CACrB,EACD,CACE,SAAU,CACR,CACE,MAAO,CACL,UAAW,MACXnmD,EAAU,MACV,QAASA,EAAS,OACnB,CACF,EACD,CACE,MAAO,CACL,UAAW,MACXA,CACD,CACF,CACF,EACD,MAAO,CACL,EAAG,UACH,EAAG,cACH,EAAG,uBACJ,CACF,EACD,CACE,UAAW,OACX,MAAO,WACP,IAAK,UACL,SAAU,CACRsnD,EACAnB,EACApB,CACD,CACF,CACF,CACL,CACA,CCjbA,MAAeuF,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECSf,SAASC,IAAKllD,EAAM,CAClB,MAAMnoB,EAAQmoB,EAAK,MACbmlD,EAAiB,qFAEjBC,EAAgBvtE,EAAM,OAC1B,uBAEA,4BACD,EAEKwtE,EAA+BxtE,EAAM,OAAOutE,EAAe,UAAU,EAarEE,EAAgB,CACpB,oBAAqB,CACnB,WACA,WACA,cACD,EACD,oBAAqB,CACnB,OACA,OACD,EACD,QAAS,CACP,QACA,MACA,QACA,QACA,QACA,OACA,QACA,UACA,KACA,OACA,QACA,MACA,MACA,SACA,MACA,KACA,KACA,SACA,OACA,MACA,KACA,OACA,UACA,SACA,QACA,SACA,OACA,QACA,SACA,QACA,OACA,QACA,QACA,GAtDe,CACjB,UACA,SACA,UACA,SACA,UACA,YACA,QACA,OACJ,CA8CK,EACD,SAAU,CACR,OACA,SACA,gBACA,cACA,cACA,gBACA,mBACA,iBACD,EACD,QAAS,CACP,OACA,QACA,KACD,CACL,EACQC,EAAY,CAChB,UAAW,SACX,MAAO,YACX,EACQC,EAAa,CACjB,MAAO,KACP,IAAK,GACT,EACQC,EAAgB,CACpBzlD,EAAK,QACH,IACA,IACA,CAAE,SAAU,CAAEulD,EAAa,CAC5B,EACDvlD,EAAK,QACH,UACA,QACA,CACE,SAAU,CAAEulD,CAAW,EACvB,UAAW,EACZ,CACF,EACDvlD,EAAK,QAAQ,WAAYA,EAAK,gBAAgB,CAClD,EACQq/C,EAAQ,CACZ,UAAW,QACX,MAAO,MACP,IAAK,KACL,SAAUiG,CACd,EACQ5F,EAAS,CACb,UAAW,SACX,SAAU,CACR1/C,EAAK,iBACLq/C,CACD,EACD,SAAU,CACR,CACE,MAAO,IACP,IAAK,GACN,EACD,CACE,MAAO,IACP,IAAK,GACN,EACD,CACE,MAAO,IACP,IAAK,GACN,EACD,CACE,MAAO,cACP,IAAK,IACN,EACD,CACE,MAAO,cACP,IAAK,IACN,EACD,CACE,MAAO,cACP,IAAK,IACN,EACD,CACE,MAAO,aACP,IAAK,GACN,EACD,CACE,MAAO,cACP,IAAK,IACN,EACD,CACE,MAAO,aACP,IAAK,GACN,EACD,CACE,MAAO,aACP,IAAK,GACN,EACD,CACE,MAAO,cACP,IAAK,IACN,EAGD,CAAE,MAAO,iBAAmB,EAC5B,CAAE,MAAO,2BAA6B,EACtC,CAAE,MAAO,iCAAmC,EAC5C,CAAE,MAAO,yDAA2D,EACpE,CAAE,MAAO,yBAA2B,EACpC,CAAE,MAAO,WAAa,EAEtB,CAGE,MAAOxnE,EAAM,OACX,YACAA,EAAM,UAAU,0CAA0C,CAC3D,EACD,SAAU,CACRmoB,EAAK,kBAAkB,CACrB,MAAO,QACP,IAAK,QACL,SAAU,CACRA,EAAK,iBACLq/C,CACD,CACb,CAAW,CACF,CACF,CACF,CACL,EAKQqG,EAAU,oBACVr3G,EAAS,kBACT4zG,EAAS,CACb,UAAW,SACX,UAAW,EACX,SAAU,CAER,CAAE,MAAO,OAAOyD,CAAO,SAASr3G,CAAM,iBAAiBA,CA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AAOtG,CAAC,CAAC,EAAE,KAAK,EAAE,CAEnD,CAMA,SAASorG,IAAqBrrG,EAAM,CAClC,MAAM05D,EAAO15D,EAAKA,EAAK,OAAS,CAAC,EAEjC,OAAI,OAAO05D,GAAS,UAAYA,EAAK,cAAgB,QACnD15D,EAAK,OAAOA,EAAK,OAAS,EAAG,CAAC,EACvB05D,GAEA,EAEX,CAWA,SAAS4xC,MAAUtrG,EAAM,CAMvB,MAHe,KADFqrG,IAAqBrrG,CAAI,EAE5B,QAAU,GAAK,MACrBA,EAAK,IAAKC,GAAMsG,GAAOtG,CAAC,CAAC,EAAE,KAAK,GAAG,EAAI,GAE7C,CAEA,MAAMk3J,GAAiBtoD,GAAW1D,GAChC,KACA0D,EACA,MAAM,KAAKA,CAAO,EAAI,KAAO,IAC/B,EAGMuoD,IAAc,CAClB,WACA,MACF,EAAE,IAAID,EAAc,EAGdE,GAAsB,CAC1B,OACA,MACF,EAAE,IAAIF,EAAc,EAGdG,IAAe,CACnB,MACA,MACF,EAGMC,GAAW,CAIf,QACA,MACA,iBACA,QACA,QACA,OACA,MACA,KACA,YACA,QACA,OACA,QACA,QACA,UACA,YACA,WACA,cACA,OACA,UACA,QACA,SACA,SACA,cACA,KACA,UACA,OACA,OACA,OACA,YACA,cACA,qBACA,cACA,QACA,MACA,OACA,MACA,QACA,KACA,SACA,WACA,QACA,SACA,QACA,QACA,kBACA,WACA,KACA,KACA,WACA,cACA,OACA,MACA,QACA,WACA,cACA,cACA,OACA,WACA,WACA,WACA,UACA,UACA,kBACA,SACA,iBACA,UACA,WACA,gBACA,SACA,SACA,WACA,WACA,SACA,MACA,OACA,SACA,SACA,YACA,QACA,SACA,SACA,QACA,QACA,OACA,MACA,YACA,kBACA,oBACA,UACA,MACA,OACA,QACA,QACA,SACF,EAMMC,GAAW,CACf,QACA,MACA,MACF,EAGMC,IAA0B,CAC9B,aACA,gBACA,aACA,OACA,YACA,OACA,OACF,EAIMC,IAAqB,CACzB,gBACA,UACA,aACA,QACA,UACA,SACA,SACA,QACA,UACA,eACA,YACA,YACA,MACA,gBACA,WACA,QACA,YACA,kBACA,UACF,EAGMC,GAAW,CACf,MACA,MACA,MACA,SACA,mBACA,aACA,OACA,aACA,YACA,4BACA,MACA,MACA,cACA,eACA,eACA,eACA,sBACA,QACA,WACA,gBACA,WACA,SACA,OACA,oCACA,YACA,OACA,gBACA,iBACA,uBACA,2BACA,oBACA,aACA,0BACA,KACF,EAGMC,GAAetsD,GACnB,oBACA,kBACA,iBACA,iBACA,iBACA,mCACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,UACF,EAGMusD,GAAoBvsD,GACxBssD,GACA,kBACA,kBACA,kBACA,kBACA,iBAGF,EAGME,GAAW3sD,GAAOysD,GAAcC,GAAmB,GAAG,EAGtDE,GAAiBzsD,GACrB,YACA,uDACA,yDACA,yDACA,kBACA,+DACA,yDACA,+BACA,yDACA,yDACA,8BAMF,EAGM0sD,GAAsB1sD,GAC1BysD,GACA,KACA,wDACF,EAGMl+G,GAAasxD,GAAO4sD,GAAgBC,GAAqB,GAAG,EAG5DC,GAAiB9sD,GAAO,QAAS6sD,GAAqB,GAAG,EAKzDE,IAAoB,CACxB,WACA,cACA/sD,GAAO,eAAgBG,GAAO,QAAS,QAAS,GAAG,EAAG,IAAI,EAC1D,oBACA,kBACA,sBACA,WACA,eACA,SACA,gBACA,WACA,eACA,gBACA,WACA,gBACA,YACA,OACA,UACA,oBACA,YACA,YACAH,GAAO,SAAUtxD,GAAY,IAAI,EACjC,OACA,cACA,kBACA,iCACA,gBACA,WACA,WACA,oBACA,YACA,UACA,mBACA,yBACF,EAGMs+G,IAAuB,CAC3B,MACA,0BACA,QACA,4BACA,cACA,kCACA,UACA,8BACA,OACA,2BACA,OACF,EAaA,SAASC,IAAM/mD,EAAM,CACnB,MAAM8jD,EAAa,CACjB,MAAO,MACP,UAAW,CACf,EAEQkD,EAAgBhnD,EAAK,QACzB,OACA,OACA,CAAE,SAAU,CAAE,OAAU,CAC5B,EACQinD,EAAW,CACfjnD,EAAK,oBACLgnD,CACJ,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A,OACA,SACA,SACA,QACA,QACA,OACA,MACA,OACA,SACA,QACA,SACA,UACA,MACA,UACA,QACA,QACA,OACJ,EACQgC,EAAW,CACf,OACA,QACA,OACA,OACA,KACA,KACJ,EACQgJ,EAAW,CAEf,QAEA,OACA,OACA,QACA,OACA,OACA,KACA,QACA,SACA,UACA,QACA,QACA,YACA,aACA,KACA,MACA,QACA,QACA,OACA,OACA,UACA,WACA,SACA,eACA,sBACA,oBACA,iBACA,WAEA,UACA,aACA,YACA,SACA,OACA,OACA,UACA,iBACA,gBACA,mBACA,OACA,YACA,SACA,QACA,UACA,eACA,iBACA,eACA,QACA,kBACA,eACA,cACA,SACA,WACA,UACA,aACA,OACA,iBACA,eACA,OACA,SACA,WACA,eACA,aACA,kBACJ,EACQ/I,EAAQ,CACZ,KACA,MACA,MACA,MACA,OACA,QACA,KACA,MACA,MACA,MACA,OACA,QACA,MACA,MACA,MACA,OACA,OACA,MACA,SACA,SACA,SACA,KACJ,EACE,MAAO,CACL,KAAM,OACN,QAAS,CAAE,IAAM,EACjB,SAAU,CACR,SAAUjhD,EAAK,SAAW,KAC1B,KAAMihD,EACN,QAASjC,EACT,QAASgC,EACT,SAAUgJ,CACX,EACD,QAAS,KACT,SAAU,CACRhqD,EAAK,oBACLA,EAAK,QAAQ,OAAQ,OAAQ,CAAE,SAAU,CAAE,MAAM,EAAI,EACrDA,EAAK,QAAQA,EAAK,kBAAmB,CACnC,MAAO,MACP,QAAS,IACjB,CAAO,EACD,CACE,UAAW,SACX,SAAU,CACR,CAAE,MAAO,0BAA4B,EACrC,CAAE,MAAO,iCAAmC,CAC7C,CACF,EACD,CACE,UAAW,SACX,MAAO,yBACR,EACD,CACE,UAAW,SACX,SAAU,CACR,CAAE,MAAO,gBAAkB+pD,CAAe,EAC1C,CAAE,MAAO,iBAAmBA,CAAe,EAC3C,CAAE,MAAO,uBAAyBA,CAAe,EACjD,CAAE,MAAO,kDACEA,CAAe,CAC3B,EACD,UAAW,CACZ,EACD,CACE,MAAO,CACL,KACA,MACAnvD,CACD,EACD,UAAW,CACT,EAAG,UACH,EAAG,gBACJ,CACF,EACD,CACE,UAAW,OACX,MAAO,SACP,IAAK,MACL,SAAU,CACR,CACE,UAAW,SACX,MAAO,IACP,IAAK,IACL,SAAU,CACRoF,EAAK,gBACN,CACF,CACF,CACF,EACD,CACE,MAAO,CACL,MACA,MACA,cACApF,CACD,EACD,UAAW,CACT,EAAG,UACH,EAAG,UACH,EAAG,UACJ,CACF,EAED,CACE,MAAO,CACL,MACA,MACAA,EACA,MACA,IACD,EACD,UAAW,CACT,EAAG,UACH,EAAG,WACH,EAAG,SACJ,CACF,EACD,CACE,MAAO,CACL,OACA,MACAA,CACD,EACD,UAAW,CACT,EAAG,UACH,EAAG,aACJ,CACF,EACD,CACE,MAAO,CACL,uCACA,MACAA,CACD,EACD,UAAW,CACT,EAAG,UACH,EAAG,aACJ,CACF,EACD,CACE,MAAOoF,EAAK,SAAW,KACvB,SAAU,CACR,QAAS,OACT,SAAUgqD,EACV,KAAM/I,CACP,CACF,EACD,CACE,UAAW,cACX,MAAO,IACR,EACDqD,CACD,CACL,CACA,CCjTA,SAASx9G,IAAKk5D,EAAM,CAClB,MAAMiqD,EAAY,CAChB,UAAW,OACX,MAAO,8BACP,UAAW,IACf,EACQC,EAAc,CAClB,MAAO,YACP,UAAW,cACX,UAAW,CACf,EACQlJ,EAAW,CACf,OACA,QACA,MACJ,EAMQmJ,EAAgB,CACpB,MAAO,UACP,cAAenJ,EAAS,KAAK,GAAG,CACpC,EAEE,MAAO,CACL,KAAM,OACN,QAAS,CAAC,OAAO,EACjB,SAAS,CACP,QAASA,CACV,EACD,SAAU,CACRiJ,EACAC,EACAlqD,EAAK,kBACLmqD,EACAnqD,EAAK,cACLA,EAAK,oBACLA,EAAK,oBACN,EACD,QAAS,KACb,CACA,CC7BO,MAAMoqD,GAAY,CACvB,KAAMC,IACN,KAAMC,IACN,KAAMC,IACN,KAAMC,IACN,WAAYC,IACZ,IAAKC,IACL,OAAQC,IACR,KAAMC,IACN,MAAOC,GACT,EAEO,SAASC,KAAgC,CACzC9qD,GAAA,iBAAiB,QAASw+C,GAAK,E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C1B,UAAW+pJ,GACX,MAAO,EACT,CACF,CACF,EACA,CACE,KAAM,cACN,KAAM,CAAE,MAAO,mCAAoC,EACnD,SAAU,CACR,CACE,KAAM,YACN,UAAWC,GACb,EACA,CACE,KAAM,YACN,UAAWC,GACb,CACF,CACF,EACA,CACE,KAAM,oBACN,KAAM,mBACN,KAAM,CAAE,MAAO,wBAAyB,EACxC,UAAWC,EACb,EACA,CACE,KAAM,SACN,KAAM,CACJ,MAAO,8BACP,eAAgB,YAClB,EACA,SAAU,CACR,CACE,KAAM,GACN,KAAMx2J,GACN,UAAWy2J,GACX,MAAO,CAAC,EAAE,CACZ,EACA,CACE,KAAM,oBACN,KAAM,oBACN,KAAM,CACJ,MAAO,iCACP,eAAgB,YAClB,EACA,UAAWC,EACb,EACA,CACE,KAAM,eACN,KAAM,mBACN,KAAM,CAAE,MAAO,8BAA+B,EAC9C,UAAWC,EACb,EACA,CACE,KAAM,QACN,KAAM,YACN,UAAWC,EACb,EACA,CACE,KAAM,yBACN,KAAM,aACN,KAAM,CAAE,MAAO,oCAAqC,EACpD,UAAWA,EACb,EACA,CACE,KAAM,0BACN,KAAM32J,GACN,KAAM,CAAE,MAAO,qCAAsC,EACrD,UAAW42J,GACb,EACA,CACE,KAAM,qCACN,KAAM,eACN,UAAWX,GACb,CACF,CACF,EACA,CACE,KAAM,SACN,KAAM,YACN,KAAM,CAAE,MAAO,wBAAyB,EACxC,UAAWY,GACb,EACA,CACE,KAAM,UACN,KAAM,aACN,UAAWC,IACX,KAAM,CAAE,MAAO,kBAAmB,CACpC,EACA,CACE,KAAM,cACN,KAAM,gBACN,UAAWC,IACX,KAAM,CAAE,MAAO,qBAAsB,CACvC,EACA,CACE,KAAM,QACN,SAAU,CACR,CACE,KAAM,OACN,KAAM,YACN,KAAM,CAAE,MAAO,iBAAkB,EACjC,UAAWC,GACb,EACA,CACE,KAAM,YACN,KAAM,gBACN,KAAM,CAAE,MAAO,yBAA0B,EACzC,UAAWC,GACb,CACF,CACF,EACA,CACE,KAAM,aACN,KAAM,YACN,KAAM,CAAE,MAAO,wBAAyB,EACxC,UAAWC,GAC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","names":["makeMap","str","map","key","val","EMPTY_OBJ","EMPTY_ARR","NOOP","NO","isOn","isModelListener","extend","remove","arr","el","i","hasOwnProperty","hasOwn","isArray","isMap","toTypeString","isSet","isDate","isFunction","isString","isSymbol","isObject","isPromise","objectToString","value","toRawType","isPlainObject","isIntegerKey","isReservedProp","cacheStringFunction","fn","cache","camelizeRE","camelize","_","c","hyphenateRE","hyphenate","capitalize","toHandlerKey","hasChanged","oldValue","invokeArrayFns","fns","arg","def","obj","writable","looseToNumber","n","toNumber","_globalThis","getGlobalThis","normalizeStyle","res","item","normalized","parseStringStyle","listDelimiterRE","propertyDelimiterRE","styleCommentRE","cssText","ret","tmp","normalizeClass","name","normalizeProps","props","klass","style","specialBooleanAttrs","isSpecialBooleanAttr","includeBooleanAttr","looseCompareArrays","a","b","equal","looseEqual","aValidType","bValidType","aKeysCount","bKeysCount","aHasKey","bHasKey","looseIndexOf","isRef","toDisplayString","replacer","_key","entries","val2","stringifySymbol","v","_a","activeEffectScope","EffectScope","detached","l","currentEffectScope","fromParent","last","effectScope","getCurrentScope","onScopeDispose","failSilently","activeSub","pausedQueueEffects","ReactiveEffect","batch","cleanupEffect","prepareDeps","prevEffect","prevShouldTrack","shouldTrack","cleanupDeps","link","removeSub","isDirty","batchDepth","batchedSub","batchedComputed","sub","isComputed","startBatch","endBatch","e","next","error","err","head","tail","prev","removeDep","refreshComputed","computed","globalVersion","dep","prevSub","soft","nextSub","prevDep","nextDep","trackStack","pauseTracking","resetTracking","cleanup","Link","Dep","debugInfo","addSub","currentTail","targetMap","ITERATE_KEY","MAP_KEY_ITERATE_KEY","ARRAY_ITERATE_KEY","track","target","type","depsMap","trigger","newValue","oldTarget","run","targetIsArray","isArrayIndex","newLength","key2","getDepFromReactive","object","depMap","reactiveReadArray","array","raw","toRaw","isShallow","toReactive","shallowReadArray","arrayInstrumentations","iterator","args","x","thisArg","apply","searchProxy","separator","noTracking","reduce","comparer","self","method","wrapValue","iter","result","arrayProto","wrappedRetFn","needsWrap","methodFn","result2","wrappedFn","index","acc","isProxy","isNonTrackableKeys","builtInSymbols","BaseReactiveHandler","_isReadonly","_isShallow","receiver","isReadonly2","isShallow2","shallowReadonlyMap","readonlyMap","shallowReactiveMap","reactiveMap","readonly","reactive","MutableReactiveHandler","isOldValueReadonly","isReadonly","hadKey","ReadonlyReactiveHandler","mutableHandlers","readonlyHandlers","shallowReactiveHandlers","toShallow","getProto","createIterableMethod","rawTarget","targetIsMap","isPair","isKeyOnly","innerIterator","wrap","toReadonly","done","createReadonlyMethod","createInstrumentations","shallow","instrumentations","rawKey","has","callback","observed","get","hadItems","createInstrumentationGetter","mutableCollectionHandlers","shallowCollectionHandlers","readonlyCollectionHandlers","targetTypeMap","rawType","getTargetType","createReactiveObject","shallowReactive","baseHandlers","collectionHandlers","proxyMap","existingProxy","targetType","proxy","isReactive","markRaw","r","ref","createRef","shallowRef","rawValue","RefImpl","useDirectValue","triggerRef","ref2","unref","shallowUnwrapHandlers","proxyRefs","objectWithRefs","ObjectRefImpl","_object","_defaultValue","newVal","GetterRefImpl","_getter","toRef","source","defaultValue","propertyToRef","ComputedRefImpl","setter","isSSR","getterOrOptions","debugOptions","getter","INITIAL_WATCHER_VALUE","cleanupMap","activeWatcher","onWatcherCleanup","cleanupFn","owner","cleanups","watch","cb","options","immediate","deep","once","scheduler","augmentJob","call","reactiveGetter","source2","traverse","effect","boundCleanup","forceTrigger","isMultiSource","s","currentEffect","baseGetter","depth","scope","watchHandle","_cb","job","immediateFirstRun","currentWatcher","cleanup2","seen","callWithErrorHandling","instance","handleError","callWithAsyncErrorHandling","values","throwInDev","contextVNode","errorHandler","throwUnhandledErrorInProduction","cur","exposedInstance","errorInfo","errorCapturedHooks","logError","throwInProd","queue","flushIndex","pendingPostFlushCbs","activePostFlushCbs","postFlushIndex","resolvedPromise","currentFlushPromise","nextTick","p","findInsertionIndex","id","start","end","middle","middleJob","middleJobId","getId","queueJob","jobId","lastJob","queueFlush","flushJobs","queuePostFlushCb","flushPreFlushCbs","flushPostFlushCbs","deduped","currentRenderingInstance","currentScopeId","setCurrentRenderingInstance","pushScopeId","popScopeId","withScopeId","_id","withCtx","ctx","isNonScopedSlot","renderFnWithContext","setBlockTracking","prevInstance","withDirectives","vnode","directives","getComponentPublicInstance","bindings","dir","modifiers","invokeDirectiveHook","prevVNode","oldBindings","binding","hook","TeleportEndKey","isTeleport","isTeleportDisabled","isTeleportDeferred","isTargetSVG","isTargetMathML","resolveTarget","select","targetSelector","TeleportImpl","n1","n2","container","anchor","parentComponent","parentSuspense","namespace","slotScopeIds","optimized","internals","mountChildren","patchChildren","patchBlockChildren","insert","querySelector","createText","createComment","disabled","shapeFlag","children","dynamicChildren","placeholder","mainAnchor","mount","container2","anchor2","mountToTarget","targetAnchor","prepareAnchor","updateCssVars","queuePostRenderEffect","wasDisabled","currentContainer","currentAnchor","traverseStaticChildren","moveTeleport","nextTarget","unmount","hostRemove","doRemove","targetStart","shouldRemove","child","hydrateTeleport","parentAnchor","move","moveType","isReorder","node","nextSibling","parentNode","hydrateChildren","targetNode","Teleport","isDisabled","leaveCbKey","enterCbKey","useTransitionState","state","onMounted","onBeforeUnmount","TransitionHookValidator","BaseTransitionPropsValidators","recursiveGetSubtree","subTree","BaseTransitionImpl","slots","getCurrentInstance","getTransitionRawChildren","findNonCommentChild","rawProps","mode","emptyPlaceholder","innerChild","getInnerChild$1","enterHooks","resolveTransitionHooks","hooks","Comment","setTransitionHooks","oldChild","oldInnerChild","isSameVNodeType","leavingHooks","earlyRemove","delayedLeave","leavingVNodesCache","getLeavingNodesForType","BaseTransition","leavingVNodes","postClone","appear","persisted","onBeforeEnter","onEnter","onAfterEnter","onEnterCancelled","onBeforeLeave","onLeave","onAfterLeave","onLeaveCancelled","onBeforeAppear","onAppear","onAfterAppear","onAppearCancelled","callHook","callAsyncHook","hook2","leavingVNode","afterHook","cancelHook","called","cancelled","vnode2","hooks2","isKeepAlive","cloneVNode","keepComment","parentKey","keyedFragmentCount","Fragment","defineComponent","extraOptions","useId","markAsyncBoundary","setRef","rawRef","oldRawRef","isUnmount","isAsyncWrapper","refValue","oldRef","refs","setupState","rawSetupState","canSetSetupRef","_isString","_isRef","doSet","existing","isComment","forEachElement","defineAsyncComponent","loader","loadingComponent","errorComponent","delay","hydrateStrategy","timeout","suspensible","userOnError","pendingRequest","resolvedComp","retries","retry","load","thisRequest","resolve","reject","comp","hydrate","doHydrate","teardown","currentInstance","createInnerComp","onError","isInSSRComponentSetup","createVNode","loaded","delayed","parent","ce","onActivated","registerKeepAliveHook","onDeactivated","wrappedHook","current","injectHook","injectToKeepAliveRoot","keepAliveRoot","injected","onUnmounted","prepend","reset","setCurrentInstance","createHook","lifecycle","onBeforeMount","onBeforeUpdate","onUpdated","onServerPrefetch","onRenderTriggered","onRenderTracked","onErrorCaptured","COMPONENTS","resolveComponent","maybeSelfReference","resolveAsset","NULL_DYNAMIC_COMPONENT","resolveDynamicComponent","component","warnMissing","Component","selfName","getComponentName","registry","renderList","renderItem","cached","sourceIsArray","sourceIsReactiveArray","keys","createSlots","dynamicSlots","slot","j","renderSlot","fallback","noSlotted","openBlock","createBlock","validSlotContent","ensureValidVNode","slotKey","rendered","vnodes","isVNode","getPublicInstance","isStatefulComponent","publicPropertiesMap","resolveMergedOptions","instanceWatch","hasSetupBinding","PublicInstanceProxyHandlers","data","accessCache","appContext","normalizedProps","shouldCacheAccess","publicGetter","cssModule","globalProperties","propsOptions","descriptor","useSlots","getContext","useAttrs","createSetupContext","normalizePropsOrEmits","applyOptions","publicThis","dataOptions","computedOptions","methods","watchOptions","provideOptions","injectOptions","created","beforeMount","mounted","beforeUpdate","updated","activated","deactivated","beforeDestroy","beforeUnmount","destroyed","unmounted","render","renderTracked","renderTriggered","errorCaptured","serverPrefetch","expose","inheritAttrs","components","filters","resolveInjections","methodHandler","opt","set","createWatcher","provides","provide","registerLifecycleHook","register","_hook","exposed","checkDuplicateProperties","normalizeInject","inject","h","createPathGetter","handler","base","mixins","extendsOptions","globalMixins","optionMergeStrategies","resolved","m","mergeOptions","to","from","strats","asMixin","strat","internalOptionMergeStrats","mergeDataFn","mergeEmitsOrPropsOptions","mergeObjectOptions","mergeAsArray","mergeWatchOptions","mergeInject","merged","createAppContext","uid$1","createAppAPI","rootComponent","rootProps","context","installedPlugins","pluginCleanupFns","isMounted","app","version","plugin","mixin","directive","rootContainer","isHydrate","lastApp","currentApp","parentProvides","treatDefaultAsFactory","internalObjectProto","createInternalObject","isInternalObject","initProps","isStateful","attrs","setFullProps","updateProps","rawPrevProps","patchFlag","rawCurrentProps","hasAttrsChanged","propsToUpdate","isEmitListener","camelizedKey","resolvePropValue","kebabKey","needCastKeys","rawCastValues","camelKey","castValues","isAbsent","hasDefault","propsDefaults","mixinPropsCache","normalizePropsOptions","hasExtends","extendProps","raw2","normalizedKey","validatePropName","prop","propType","shouldCast","shouldCastTrue","typeName","isInternalKey","normalizeSlotValue","normalizeVNode","normalizeSlot","rawSlot","normalizeObjectSlots","rawSlots","normalizeVNodeSlots","assignSlots","initSlots","updateSlots","needDeletionCheck","deletionComparisonTarget","queueEffectWithSuspense","createRenderer","baseCreateRenderer","createHydrationFns","hostInsert","hostPatchProp","hostCreateElement","hostCreateText","hostCreateComment","hostSetText","hostSetElementText","hostParentNode","hostNextSibling","hostSetScopeId","hostInsertStaticContent","patch","getNextHostNode","Text","processText","processCommentNode","Static","mountStaticNode","processFragment","processElement","processComponent","moveStaticNode","removeStaticNode","mountElement","patchElement","vnodeHook","transition","dirs","resolveChildrenNamespace","setScopeId","invokeVNodeHook","needCallTransitionHooks","needTransition","scopeId","isSuspense","parentVNode","cloneIfMounted","oldProps","newProps","toggleRecurse","patchProps","oldChildren","newChildren","fallbackContainer","oldVNode","newVNode","fragmentStartAnchor","fragmentEndAnchor","fragmentSlotScopeIds","mountComponent","updateComponent","initialVNode","createComponentInstance","setupComponent","setupRenderEffect","shouldUpdateComponent","updateComponentPreRender","componentUpdateFn","bu","u","nonHydratedAsyncRoot","locateNonHydratedAsyncRoot","originNext","nextTree","renderComponentRoot","prevTree","updateHOCHostEl","bm","root","isAsyncWrapperVNode","hydrateNode","hydrateSubTree","scopedInitialVNode","update","nextVNode","prevProps","c1","prevShapeFlag","c2","patchKeyedChildren","patchUnkeyedChildren","unmountChildren","oldLength","commonLength","nextChild","l2","e1","e2","nextPos","s1","s2","keyToNewIndexMap","patched","toBePatched","moved","maxNewIndexSoFar","newIndexToOldIndexMap","prevChild","newIndex","increasingNewIndexSequence","getSequence","nextIndex","leave","delayLeave","afterLeave","remove2","performLeave","cacheIndex","shouldInvokeDirs","shouldInvokeVnodeHook","unmountComponent","removeFragment","performRemove","bum","um","invalidateMount","teleportEnd","isFlushing","currentNamespace","allowed","ch1","ch2","len","arrI","subComponent","ssrContextKey","useSSRContext","watchEffect","doWatch","flush","baseWatchOptions","runsImmediately","ssrCleanup","watchStopHandle","isPre","isFirstRun","watch$1","path","segments","getModelModifiers","modelName","emit","event","rawArgs","handlerName","onceHandler","normalizeEmitsOptions","extendEmits","normalizedFromExtend","withProxy","renderCache","fallthroughAttrs","proxyToUse","thisProxy","render2","getFunctionalFallthrough","blockStack","filterModelListeners","prevChildren","nextProps","nextChildren","emits","hasPropsChanged","dynamicProps","emitsOptions","nextKeys","suspense","currentBlock","disableTracking","closeBlock","isBlockTreeEnabled","setupBlock","createElementBlock","createBaseVNode","normalizeKey","normalizeRef","ref_key","ref_for","isBlockNode","needFullChildrenNormalization","normalizeChildren","_createVNode","cloned","isClassComponent","guardReactiveProps","extraProps","mergeRef","cloneTransition","mergedProps","mergeProps","createTextVNode","text","flag","createStaticVNode","content","numberOfNodes","createCommentVNode","asBlock","slotFlag","toMerge","incoming","emptyAppContext","uid","internalSetCurrentInstance","setInSSRSetupState","g","registerGlobalSetter","setters","unsetCurrentInstance","setupResult","setupStatefulComponent","setup","setupContext","isAsyncSetup","resolvedResult","handleSetupResult","finishComponentSetup","compile","skipOptions","template","isCustomElement","compilerOptions","delimiters","componentCompilerOptions","finalCompilerOptions","attrsProxyHandlers","includeInferred","computed$1","propsOrChildren","policy","tt","unsafeToTrustedHTML","svgNS","mathmlNS","doc","templateContainer","nodeOps","tag","is","selector","before","wrapper","TRANSITION","ANIMATION","vtcKey","DOMTransitionPropsValidators","TransitionPropsValidators","decorate$1","t","Transition","resolveTransitionProps","h2","hasExplicitCallback","baseProps","duration","enterFromClass","enterActiveClass","enterToClass","appearFromClass","appearActiveClass","appearToClass","leaveFromClass","leaveActiveClass","leaveToClass","durations","normalizeDuration","enterDuration","leaveDuration","finishEnter","isAppear","removeTransitionClass","finishLeave","makeEnterHook","nextFrame","addTransitionClass","whenTransitionEnds","forceReflow","NumberOf","cls","_vtc","endId","expectedType","explicitTimeout","resolveIfNotStale","propCount","getTransitionInfo","endEvent","ended","onEnd","styles","getStyleProperties","transitionDelays","transitionDurations","transitionTimeout","getTimeout","animationDelays","animationDurations","animationTimeout","hasTransform","delays","d","toMs","patchClass","isSVG","transitionClasses","vShowOriginalDisplay","vShowHidden","vShow","setDisplay","CSS_VAR_TEXT","displayRE","patchStyle","isCssString","hasControlledDisplay","prevStyle","setStyle","cssVarText","importantRE","prefixed","autoPrefix","prefixes","prefixCache","rawName","xlinkNS","patchAttr","isBoolean","patchDOMProp","attrName","needRemove","addEventListener","removeEventListener","veiKey","patchEvent","prevValue","nextValue","invokers","existingInvoker","parseName","invoker","createInvoker","optionsModifierRE","cachedNow","getNow","initialValue","patchStopImmediatePropagation","originalStop","isNativeOn","patchProp","shouldSetAsProp","camelize$1","getModelAssigner","onCompositionStart","onCompositionEnd","assignKey","vModelText","lazy","trim","number","castToNumber","domValue","elValue","vModelCheckbox","modelValue","elementValue","getValue","checked","assign","found","filtered","getCheckboxValue","setChecked","vModelSelect","isSetModel","selectedVal","o","setSelected","_binding","isMultiple","isArrayValue","option","optionValue","optionType","systemModifiers","modifierGuards","withModifiers","cacheKey","guard","keyNames","withKeys","eventKey","k","rendererOptions","renderer","ensureRenderer","createApp","containerOrSelector","normalizeContainer","resolveRootNamespace","t$a","e$5","r$5","o$9","f","w","O","j$3","y","$","E","R","q","A","N","P$3","z","B","M","C","P","S","U","G","H","I","J","K$1","Q","V","W","X","Z$2","K","PureAbility","Z","it","F","st","nt","rt","ot","ct","ut","ht","lt","at","createMongoAbility","isAbilityClass","ft","AbilityBuilder","reactiveAbility","useAbility","isBrowser","isRouteComponent","isESModule","applyToParams","params","newParams","noop","HASH_RE","AMPERSAND_RE","SLASH_RE","EQUAL_RE","IM_RE","PLUS_RE","ENC_BRACKET_OPEN_RE","ENC_BRACKET_CLOSE_RE","ENC_CARET_RE","ENC_BACKTICK_RE","ENC_CURLY_OPEN_RE","ENC_PIPE_RE","ENC_CURLY_CLOSE_RE","ENC_SPACE_RE","commonEncode","encodeHash","encodeQueryValue","encodeQueryKey","encodePath","encodeParam","decode","TRAILING_SLASH_RE","removeTrailingSlash","parseURL","parseQuery","location","currentLocation","query","searchString","hash","hashPos","searchPos","resolveRelativePath","stringifyURL","stringifyQuery","stripBase","pathname","isSameRouteLocation","aLastIndex","bLastIndex","isSameRouteRecord","isSameRouteLocationParams","isSameRouteLocationParamsValue","isEquivalentArray","fromSegments","toSegments","lastToSegment","position","toPosition","segment","START_LOCATION_NORMALIZED","NavigationType","NavigationDirection","normalizeBase","baseEl","BEFORE_HASH_RE","createHref","getElementPosition","offset","docRect","elRect","computeScrollPosition","scrollToPosition","scrollToOptions","positionEl","isIdSelector","getScrollKey","delta","scrollPositions","saveScrollPosition","scrollPosition","getSavedScrollPosition","scroll","createBaseLocation","createCurrentLocation","search","slicePos","pathFromHash","useHistoryListeners","historyState","replace","listeners","teardowns","pauseState","popStateHandler","fromState","listener","pauseListeners","listen","beforeUnloadListener","history","destroy","buildState","back","forward","replaced","computeScroll","useHistoryStateNavigation","changeLocation","hashIndex","url","push","currentState","createWebHistory","historyNavigation","historyListeners","go","triggerListeners","routerHistory","isRouteLocation","route","isRouteName","NavigationFailureSymbol","NavigationFailureType","createRouterError","isNavigationFailure","BASE_PARAM_PATTERN","BASE_PATH_PARSER_OPTIONS","REGEX_CHARS_RE","tokensToParser","score","pattern","segmentScores","tokenIndex","token","subSegmentScore","repeatable","optional","regexp","re","subPattern","parse","match","stringify","avoidDuplicatedSlash","param","compareScoreArray","diff","comparePathParserScore","aScore","bScore","isLastScoreNegative","ROOT_TOKEN","VALID_PARAM_RE","tokenizePath","crash","message","buffer","previousState","tokens","finalizeSegment","char","customRe","consumeBuffer","addCharToBuffer","createRouteRecordMatcher","record","parser","matcher","createRouterMatcher","routes","globalOptions","matchers","matcherMap","getRecordMatcher","addRoute","originalRecord","isRootAdd","mainNormalizedRecord","normalizeRouteRecord","normalizedRecords","aliases","alias","originalMatcher","normalizedRecord","parentPath","connectingSlash","isAliasRecord","removeRoute","isMatchable","insertMatcher","matcherRef","getRoutes","paramsFromLocation","matched","parentMatcher","mergeMetaFields","clearRoutes","normalizeRecordProps","propsObject","meta","defaults","partialOptions","lower","upper","mid","insertionAncestor","getInsertionAncestor","ancestor","searchParams","searchParam","eqPos","currentValue","normalizeQuery","normalizedQuery","matchedRouteKey","viewDepthKey","routerKey","routeLocationKey","routerViewLocationKey","useCallbacks","handlers","add","guardToPromiseFn","runWithContext","enterCallbackArray","valid","guardReturn","guardCall","extractComponentsGuards","guardType","guards","rawComponent","componentPromise","resolvedComponent","useLink","router","currentRoute","activeRecordIndex","length","routeMatched","currentMatched","parentRecordPath","getOriginalPath","isActive","includesParams","isExactActive","navigate","guardEvent","RouterLinkImpl","elClass","getLinkClass","RouterLink","outer","inner","innerValue","outerValue","propClass","globalClass","defaultClass","RouterViewImpl","injectedRoute","routeToDisplay","injectedDepth","initialDepth","matchedRoute","matchedRouteRef","viewRef","oldInstance","oldName","currentName","ViewComponent","routePropsOption","routeProps","slotContent","RouterView","createRouter","parseQuery$1","stringifyQuery$1","beforeGuards","beforeResolveGuards","afterGuards","pendingLocation","normalizeParams","paramValue","encodeParams","decodeParams","parentOrRoute","recordMatcher","routeMatcher","hasRoute","rawLocation","locationNormalized","href","matcherLocation","targetParams","fullPath","locationAsObject","checkCanceledNavigation","pushWithRedirect","handleRedirectRecord","lastMatched","redirect","newTargetLocation","redirectedFrom","targetLocation","force","shouldRedirect","toLocation","failure","handleScroll","markAsReady","triggerError","finalizeNavigation","triggerAfterEach","checkCanceledNavigationAndReject","installedApps","leavingRecords","updatingRecords","enteringRecords","extractChangingRecords","canceledNavigationCheck","runGuardQueue","beforeEnter","isPush","isFirstNavigation","removeHistoryListener","setupListeners","_from","info","readyHandlers","errorListeners","ready","list","isReady","scrollBehavior","started","reactiveRoute","unmountApp","promise","recordFrom","recordTo","useRouter","useRoute","_name","_imports_0$1","inBrowser","makeSymbol","shareable","generateFormatCacheKey","locale","friendlyJSONstringify","json","isNumber","isRegExp","isEmptyObject","_create","create","escapeHtml","rawText","proto","join","items","incrementer","code","warn","msg","isNotObjectOrIsArray","deepCopy","src","des","stack","createPosition","line","column","createLocation","RE_ARGS","format","identifier","CompileWarnCodes","warnMessages","createCompileWarn","loc","CompileErrorCodes","errorMessages","createCompileError","domain","messages","defaultOnError","CHAR_SP","CHAR_CR","CHAR_LF","CHAR_LS","CHAR_PS","createScanner","_buf","_index","_line","_column","_peekOffset","isCRLF","isLF","isPS","isLS","isLineEnd","peekOffset","charAt","currentChar","currentPeek","peek","resetPeek","skipToPeek","EOF","DOT","LITERAL_DELIMITER","ERROR_DOMAIN$3","createTokenizer","_scnr","currentOffset","currentPosition","_initLoc","_initOffset","_context","emitError","pos","getToken","getEndToken","eat","scnr","ch","peekSpaces","buf","skipSpaces","isIdentifierStart","cc","isNumberStart","isNamedIdentifierStart","currentType","isListIdentifierStart","isLiteralStart","isLinkedDotStart","isLinkedModifierStart","isLinkedDelimiterStart","isLinkedReferStart","isTextStart","isPluralStart","detectModuloStart","spaces","hasSpace","detectModulo","takeChar","isIdentifier","takeIdentifierChar","isNamedIdentifier","takeNamedIdentifierChar","isDigit","takeDigit","isHexDigit","takeHexDigit","getDigits","num","readModulo","readText","readNamedIdentifier","readListIdentifier","isLiteral","readLiteral","literal","readEscapeSequence","readUnicodeEscapeSequence","unicode","digits","sequence","isInvalidIdentifier","readInvalidIdentifier","identifiers","readLinkedModifier","readLinkedRefer","readPlural","plural","readTokenInPlaceholder","readTokenInLinked","validNamedIdentifier","validListIdentifier","validLiteral","readToken","isModulo","nextToken","startLoc","endLoc","ERROR_DOMAIN$2","KNOWN_ESCAPES","fromEscapeSequence","codePoint4","codePoint6","codePoint","createParser","onWarn","tokenzer","emitWarn","startNode","endNode","parseText","tokenizer","parseList","parseNamed","modulo","parseLiteral","parseLinkedModifier","getTokenCaption","parseLinkedKey","parseLinked","linkedNode","parsed","nextContext","emptyLinkedKeyNode","parseMessage","startOffset","endOffset","parsePlural","msgNode","hasEmptyMessage","parseResource","createTransformer","ast","traverseNodes","nodes","transformer","traverseNode","transform","optimize","body","optimizeMessageNode","ERROR_DOMAIN$1","minify","resource","cases","valueNode","linked","named","ERROR_DOMAIN","createCodeGenerator","sourceMap","filename","breakLineCode","_needIndent","_newline","withBreakLine","_breakLineCode","indent","withNewLine","level","deindent","newline","generateLinkedNode","generator","helper","generateNode","generateMessageNode","needIndent","generatePluralNode","generateResource","generate","helpers","baseCompile","assignedOptions","jit","enalbeMinify","enambeOptimize","initFeatureFlags","pathStateMachine","literalValueRE","exp","stripQuotes","getPathCharType","formatSubPath","trimmed","subPathDepth","newChar","action","typeMap","actions","maybeUnescapeQuote","nextChar","resolveWithKeyValue","resolveValue$1","hit","DEFAULT_MODIFIER","DEFAULT_MESSAGE","DEFAULT_MESSAGE_DATA_TYPE","DEFAULT_NORMALIZE","DEFAULT_INTERPOLATE","pluralDefault","choice","choicesLength","getPluralIndex","normalizeNamed","pluralIndex","createMessageContext","pluralRule","orgPluralRule","_list","_named","_modifier","normalize","interpolate","arg1","arg2","modifier","devtools","setDevToolsHook","initI18nDevTools","i18n","translateDevTools","createDevToolsHook","payloads","code$1","inc$1","CoreWarnCodes","inc","CoreErrorCodes","createCoreError","getLocale","resolveLocale","_resolveLocale","fallbackWithSimple","fallbackWithLocaleChain","startLocale","DEFAULT_LOCALE","chain","block","appendBlockToChain","blocks","follow","appendLocaleToChain","appendItemToChain","VERSION","NOT_REOSLVED","MISSING_RESOLVE_VALUE","getDefaultLinkedModifiers","_compiler","registerMessageCompiler","compiler","_resolver","registerMessageResolver","resolver","_fallbacker","registerLocaleFallbacker","fallbacker","_additionalMeta","setAdditionalMeta","getAdditionalMeta","_fallbackContext","setFallbackContext","getFallbackContext","_cid","createCoreContext","_locale","fallbackLocale","createResources","datetimeFormats","numberFormats","pluralRules","missing","missingWarn","fallbackWarn","fallbackFormat","unresolving","postTranslation","processor","warnHtmlMessage","escapeParameter","messageCompiler","messageResolver","localeFallbacker","fallbackContext","internalOptions","__datetimeFormatters","__numberFormatters","__meta","handleMissing","updateFallbackLocale","isAlmostSameLocale","compareLocale","isImplicitFallback","targetLocale","locales","formatParts","resolveBody","createUnhandleNodeError","resolveType","resolveCases","formatMessageParts","PROPS_BODY","resolveProps","PROPS_CASES","static_","resolveStatic","resolveItems","acm","formatMessagePart","PROPS_STATIC","PROPS_ITEMS","resolveValue","resolveLinkedModifier","resolveLinkedKey","PROPS_TYPE","PROPS_VALUE","PROPS_MODIFIER","PROPS_KEY","defaultOnCacheKey","compileCache","isMessageAST","detectError","baseCompile$1","compileToFunction","NOOP_MESSAGE_FUNCTION","isMessageFunction","translate","parseTranslateArgs","resolvedMessage","defaultMsgOrKey","enableDefaultMsg","escapeParams","formatScope","resolveMessageFormat","cacheBaseKey","occurred","compileMessageFormat","ctxOptions","getMessageContextOptions","msgContext","messaged","evaluateMessage","missingRet","getCompileContext","msgCtx","arg3","datetime","overrides","parseDateTimeArgs","part","datetimeFormat","formatter","DATETIME_FORMAT_OPTIONS_KEYS","arg4","matches","dateTime","clearDateTimeFormat","parseNumberArgs","numberFormat","NUMBER_FORMAT_OPTIONS_KEYS","clearNumberFormat","I18nErrorCodes","createI18nError","TranslateVNodeSymbol","DatetimePartsSymbol","NumberPartsSymbol","SetPluralRulesSymbol","InejctWithOptionSymbol","DisposeSymbol","handleFlatJson","subKeys","lastIndex","currentObj","hasStringValue","getLocaleMessages","__i18n","flatJson","custom","getComponentOptions","adjustI18nResources","gl","componentOptions","createTextNode","DEVTOOLS_META","NOOP_RETURN_ARRAY","NOOP_RETURN_FALSE","composerID","defineCoreMissingHandler","getMetaInfo","createComposer","VueI18nLegacy","__root","__injectWithOption","_isGlobal","_ref","translateExistCompatible","_inheritLocale","_fallbackLocale","_messages","_datetimeFormats","_numberFormats","_missingWarn","_fallbackWarn","_fallbackRoot","_fallbackFormat","_missing","_runtimeMissing","_postTranslation","_warnHtmlMessage","_escapeParameter","_modifiers","_pluralRules","trackReactivityValues","getPostTranslationHandler","setPostTranslationHandler","getMissingHandler","setMissingHandler","wrapWithDeps","argumentParser","warnType","fallbackSuccess","fallbackFail","successCondition","translateVNode","numberParts","datetimeParts","setPluralRules","rules","te","getLocaleMessage","resolveMessages","targetLocaleMessages","messageValue","tm","setLocaleMessage","_message","mergeLocaleMessage","getDateTimeFormat","setDateTimeFormat","mergeDateTimeFormat","getNumberFormat","setNumberFormat","mergeNumberFormat","composer","convertComposerOptions","fallbackRoot","pluralizationRules","inheritLocale","sharedMessages","createVueI18n","__extender","vueI18n","baseFormatProps","getInterpolateArg","getFragmentableTag","TranslationImpl","useI18n","assignedAttrs","Translation","renderFormatter","slotKeys","partFormatter","parts","NumberFormatImpl","NumberFormat","DatetimeFormatImpl","DatetimeFormat","getComposer$2","i18nInternal","vTDirective","_process","parsedValue","parseValue","makeParams","textContent","pluginOptions","useI18nComponentName","defineMixin","vuei18n","optionsI18n","mergeToGlobal","_vueI18n","I18nInjectionKey","createI18n","__legacyMode","__globalInjection","__allowComposition","__instances","globalScope","__global","createGlobal","symbol","__getInstance","__setInstance","__deleteInstance","opts","globalReleaseHandler","injectGlobalFields","getI18nInstance","getGlobalComposer","getScope","useI18nForLegacy","getComposer","composerOptions","setupLifeCycle","legacyMode","useComponent","getParentComponentInstance","_composer","dispose","isLocalScope","warpWithDeps","sync","globalExportProps","globalExportMethods","desc","_imports_0","frontendUrl","apiUrl","appVersion","env_type","supported_locales","SUPPORTED_LOCALES","B2C_LOCALE","notFoundRouteName","socialPageRouteId","editBlocksRouteId","editBlockVersionsRouteId","apimproductsRouteId","mySubscriptionsRouteId","twSpacingScale","twSpacingNamedScale","twSpacingMaxWidthOnlyScale","sleep","ms","sleepUntil","predicate","retryCount","count","compose","asyncFunctionResult","composableResult","initComposable","loadComposable","composeWithRefresh","asyncFunction","autoRefreshTrigger","resetBeforeRefresh","composeWithRefreshInternal","delayLoad","composable","composeLazy","loading","lazyInit","refreshFn","noLoad","refresh","init","isRefreshing","throwOnError","defaultComputed","titleMsgId","descMsgId","routeItemsUrl","getRouteItemDTOs","response","menuData","menuItems","nonMenuItems","menuLocaleData","readMenu","wait","buildMenuTree","rawMenuDataToMenuTree","flat","useRouteItems","getMenuItems","useMenu","withHeaders","parentRoute","parentRouteName","targetPath","addLocaleData","routeBaseName","actualAliases","updateRouteItem","resp","createRouteItem","deleteRouteItem","docsRouteIdentifier","docsListRouteIdentifier","defaultBlocksRouteName","defaultBlocksSearchPageId","blocksRouteData","getEmptyDocRoute","getBlocksRouteLink","blockId","getDocumentRouteFromListRoute","getDocumentRouteName","getRouteItems","flattenMenu","menuHeaderTypes","isRouteItemWithChildren","isBlockDocumentRoute","routeName","rn","listRouteName","removeRouteIdentifier","baseRouteName","isListRoute","getRouteTitle","menuText","getRoute","translateInteractiveImage","blockValue","addFallbackInfo","translateBlockValue","translatedItem","attachSource","setInteractiveImageBlockLocaleValues","setBlockLocaleValue","setBlockLocaleValueInObject","newItem","getInteractiveImageLocaleUpdates","field","translateLayoutItem","setLayoutItemBlockLocaleValues","getLayoutItemLocaleUpdates","i18nInstance","locale_storage_key","set_locale","setI18nLanguage","set_locale_from_query","setupI18n","selected_locale","loadLocaleMessages","__variableDynamicImportRuntimeHelper","__vitePreload","localeData","typeId","itemId","currentLevel","lastLevel","lastKey","loadDynamicLocaleMessages","addRouterTitleTranslation","_source","schemaType","getTranslatedValueWithFallback","isLocaleValue","objBlockValue","translatedValue","complexSchemaTypeValues","emptyBlockValues","savedLocaleToUse","isNumberOrDate","getFallbackInfoText","excludeLanguage","language","startsWithFallbackInfoText","introText","isNewlyAddedFallback","currentIsFallback","newIsFallback","ensurePropertyIsLocaleValue","sourceObject","sourceValue","setPossiblyTranslatableProperty","newProperty","hasArrayItems","arrVal","hasNewlyAddedFallback","addLocaleUpdates","stringSchemaTypeValues","baseModelValue","updatesSource","updatedTime","retval","existingUpdates","translateStringOrLocaleWithDefault","translateStringOrLocale","getPropertyRecursive","property","firstKey","removeParentKey","parentProperty","WithUndefined","setsUndefined","EMPTY_GUID","Status","translateCategory","category","colorList","fgColorList","schemaTypeValues","getApimDetails","getApimDetailsWithKey","isBlockImage","layoutContentProperties","boxStyles","getEmptyLocaleValue","isBlockValueWithLocaleDate","routeTypes","error_pages","formConfigOwners","alzOperationTypes","alzEnvironmentTypes","alzSandboxEnvironmentTypes","testDataTypes","batRoleTypes","throwErrorPageTrigger","throwUnauthorized","throwForbidden","userInfo","useCurrentUser","useCurrentUserThrowIfNotLoggedOn","refreshCurrentUser","signIn","signInUrl","rd","editProfile","getSignoutUrl","signOutUrl","chatPageIds","suggestionPageParam","suggestionPageIdPrefix","isChatPage","getChatPageParamFromId","getChatPages","getChatPage","SocialPageType","socialPageBasePath","setSocialPageBasePath","getCommentPagePath","discussionId","discussionType","getCommentPageIdParam","statusUrl","userStatus","fetchStatus","useNewAppVersion","status","useUserSessionTimeout","useNotificationCount","updateNotificationCount","useNotifications","getNotifications","notifications","commentId","pageType","updateNotification","notificationId","read","deleteNotification","notificationCount","defineAbilities","user","can","build","useStoreAbility","useSubject","subjectType","subjectInstance","subject","memo","getDeps","deps","_b","_c","_d","depTime","newDeps","resultTime","depEndTime","resultEndTime","resultFpsPercentage","pad","notUndefined","approxEqual","debounce","targetWindow","timeoutId","defaultKeyExtractor","defaultRangeExtractor","range","observeElementRect","element","rect","width","height","observer","entry","box","addEventListenerOptions","supportsScrollend","observeElementOffset","createHandler","isScrolling","horizontal","isRtl","endHandler","measureElement","elementScroll","adjustments","behavior","toOffset","Virtualizer","_ro","opts2","scrollElement","measurements","furthestMeasurementsFound","furthestMeasurements","measurement","previousFurthestMeasurement","paddingStart","scrollMargin","getItemKey","enabled","itemSizeCache","min","furthestMeasurement","measuredSize","size","lane","outerSize","scrollOffset","calculateRange","rangeExtractor","overscan","attributeName","indexStr","prevNode","itemSize","indexes","virtualItems","findNearestBinarySearch","align","scrollSizeProp","maxOffset","initialAlign","offsetAndAlign","latestOffset","low","high","getCurrentValue","startIndex","endIndex","useVirtualizerBase","virtualizer","options2","useVirtualizer","e.useId","e.inject","s$5","T","L","De","Ee","Ve","ke","ne","ee","ie","Ae","define_process_env_default","de","D","Te","pe","le","ve","Re","se","Ie","ue","Oe","Pe","Se","he","ae","be","oe","Y","Ce","ge","fe","ye","we","xe","Ye","me","Ge","je","Fe","Me","__props","isTopLevel","__emit","itemsWithClickHandler","targetRoute","isActivePath","windowWidth","windowHeight","isLarge","isMedium","isBelowSmall","handleResize","setupResizeListener","useResizeListener","_useSlots","showChrome","useBlockListConnections","flatList","flattened","flattenLayout","connections","addBlockListConnectionRef","getLayoutBlockId","parentId","blockListConnections","getConnectedFilterByListId","getConnectedListByFilterId","filter","getConnectedListBySearchId","isConnectedFilter","lookupList","addConnection","connectionType","connectedType","connectedListId","input","searchText","userMenuItems","hardcodedMenuItems","localeMenuItems","filterTree","filteredMenuItems","showMobileSearch","searchFocused","factory","module","this","charMap","string","replacement","slug","appendChar","customMap","localizedErrorMessage","translationKey","isValidTranslationKey","createTranslationKey","slugify","useUsers","users","useRoles","types","useRoleMembers","role","updateRoles","userId","roleIds","updateUser","deleteUserAccount","includeB2C","saveNotifictionSettings","denyNotifications","setRouter","waitForRouterReady","flattenRoutes","hasOnlyOptionalParamsRe","hardcodedStaticRoutes","setStaticRoutes","ExtendedError","_details","errorMessage","errorPage","NotFoundView","ForbiddenView","UnauthorizedView","onErrorClose","routerReady","routeKey","bannerClasses","_title","_description","favoriteUrl","useBlockFavorite","getFavorite","useFavorites","getFavorites","favorites","addFavorite","removeFavorite","favoriteId","removeFavoriteByBlockId","updateFavorite","notes","favoriteNote","canSave","noteId","updateNote","favorite","note","unFavorite","commentsUrl","blockPageUrl","threadUrl","post","commentsGet","commenterMap","commentMap","comment","threads","stickiedComment","commentNew","discussion","parentHex","markdown","commentDelete","commentModeratorDelete","deleteReason","commentModeratorVerify","reason","commentDocownerDiscard","endpoint","vote","newDirection","commentEdit","pageUpdate","isLocked","stickyCommentHex","useDiscussion","useUnassessedComments","assessmentType","includeAllBlocks","getNonBlockComments","getUnassessedComments","useThreads","getMyThreads","getBlockPages","useBlockPages","meetingImage","suggestionsUrl","suggestionPageUrl","useSuggestions","getSuggestions","translated","suggestion","translateSuggestion","useSuggestion","suggestionId","includeWorkItem","getSuggestion","suggestions","addWorkItemsData","workItemIds","workItems","useSuggestionPages","getSuggestionPages","updateSuggestion","closeSuggestion","createSuggestion","deleteSuggestion","updateVote","direction","updateSubscription","subscribe","connectWorkItem","disconnectWorkItem","createWorkItem","getWorkItemFromSuggestion","blockPages","blockPagesWithDefault","suggestionPages","suggestionPagesWithDefault","chatPages","toDate","argument","argStr","constructFrom","date","addMonths","amount","_date","dayOfMonth","endOfDesiredMonth","daysInMonth","millisecondsInWeek","millisecondsInDay","millisecondsInMinute","millisecondsInHour","defaultOptions","getDefaultOptions","startOfWeek","weekStartsOn","day","startOfISOWeek","getISOWeekYear","year","fourthOfJanuaryOfNextYear","startOfNextYear","fourthOfJanuaryOfThisYear","startOfThisYear","startOfDay","getTimezoneOffsetInMilliseconds","utcDate","differenceInCalendarDays","dateLeft","dateRight","startOfDayLeft","startOfDayRight","timestampLeft","timestampRight","startOfISOWeekYear","fourthOfJanuary","isValid","startOfYear","cleanDate","formatDistanceLocale","formatDistance","tokenValue","buildFormatLongFn","dateFormats","timeFormats","dateTimeFormats","formatLong","formatRelativeLocale","formatRelative","_baseDate","_options","buildLocalizeFn","valuesArray","defaultWidth","eraValues","quarterValues","monthValues","dayValues","dayPeriodValues","formattingDayPeriodValues","ordinalNumber","dirtyNumber","rem100","localize","quarter","buildMatchFn","matchPattern","matchResult","matchedString","parsePatterns","findIndex","findKey","rest","buildMatchPatternFn","parseResult","matchOrdinalNumberPattern","parseOrdinalNumberPattern","matchEraPatterns","parseEraPatterns","matchQuarterPatterns","parseQuarterPatterns","matchMonthPatterns","parseMonthPatterns","matchDayPatterns","parseDayPatterns","matchDayPeriodPatterns","parseDayPeriodPatterns","enUS","getDayOfYear","getISOWeek","getWeekYear","firstWeekContainsDate","firstWeekOfNextYear","firstWeekOfThisYear","startOfWeekYear","firstWeek","getWeek","addLeadingZeros","targetLength","sign","output","lightFormatters","signedYear","month","dayPeriodEnumValue","numberOfDigits","milliseconds","fractionalSeconds","dayPeriodEnum","formatters","era","signedWeekYear","weekYear","twoDigitYear","isoWeekYear","week","isoWeek","dayOfYear","dayOfWeek","localDayOfWeek","isoDayOfWeek","hours","_localize","timezoneOffset","formatTimezoneWithOptionalMinutes","formatTimezone","formatTimezoneShort","timestamp","delimiter","absOffset","minutes","dateLongFormatter","timeLongFormatter","dateTimeLongFormatter","datePattern","timePattern","dateTimeFormat","longFormatters","dayOfYearTokenRE","weekYearTokenRE","throwTokens","isProtectedDayOfYearToken","isProtectedWeekYearToken","warnOrThrowProtectedError","formattingTokensRegExp","longFormattingTokensRegExp","escapedStringRegExp","doubleQuoteRegExp","unescapedLatinCharacterRegExp","formatStr","defaultLocale","originalDate","substring","firstCharacter","longFormatter","cleanEscapedString","formatterOptions","parseISO","dateStrings","splitDateString","parseYearResult","parseYear","parseDate","time","parseTime","parseTimezone","dirtyDate","patterns","dateRegex","timeRegex","timezoneRegex","dateString","timeString","additionalDigits","regex","captures","century","isWeekDate","parseDateUnit","validateWeekDate","dayOfISOWeekYear","validateDate","validateDayOfYearDate","parseTimeUnit","seconds","validateTime","timezoneString","validateTimezone","fourthOfJanuaryDay","daysInMonths","isLeapYearIndex","_year","_hours","timeDifference","previous","elapsed","colorFromString","colors","total","pageDescription","thread","formatDatetime","avatarName","avatarColor","routerLinkProps","finalLabel","decodeCache","getDecodeCache","exclude","seq","b1","b2","chr","b3","b4","encodeCache","getEncodeCache","encode","keepEscaped","nextCode","Url","protocolPattern","portPattern","simplePathPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","hostlessProtocol","slashedProtocol","urlParse","slashesDenoteHost","lowerProto","hec","slashes","simplePath","hostEnd","auth","atSign","host","ipv6Hostname","hostparts","newpart","validParts","notHost","bit","qm","port","Any","Cc","regex$1","htmlDecodeTree","xmlDecodeTree","decodeMap","fromCodePoint","replaceCodePoint","CharCodes","TO_LOWER_BIT","BinTrieFlags","isHexadecimalCharacter","isAsciiAlphaNumeric","isEntityInAttributeInvalidEnd","EntityDecoderState","DecodingMode","EntityDecoder","decodeTree","emitCodePoint","errors","decodeMode","digitCount","startIdx","lastCp","expectedLength","valueLength","determineBranch","consumed","getDecoder","decoder","nodeIdx","branchCount","jumpOffset","lo","hi","midVal","htmlDecoder","decodeHTML","_class","_hasOwnProperty","arrayReplaceAt","newElements","isValidEntityCode","surrogate1","surrogate2","UNESCAPE_MD_RE","ENTITY_RE","UNESCAPE_ALL_RE","DIGITAL_ENTITY_TEST_RE","replaceEntityPattern","decoded","unescapeMd","unescapeAll","escaped","entity","HTML_ESCAPE_TEST_RE","HTML_ESCAPE_REPLACE_RE","HTML_REPLACEMENTS","replaceUnsafeChar","REGEXP_ESCAPE_RE","escapeRE","isSpace","isWhiteSpace","isPunctChar","ucmicro.P","ucmicro.S","isMdAsciiPunct","normalizeReference","lib","mdurl","ucmicro","parseLinkLabel","disableNested","marker","prevPos","max","oldPos","labelEnd","parseLinkDestination","parseLinkTitle","prev_state","default_rules","idx","env","slf","langName","langAttrs","highlighted","tmpAttrs","tmpToken","Renderer","needLf","Ruler","chains","rule","altName","beforeName","ruleName","afterName","ignoreInvalid","chainName","Token","nesting","attrData","StateCore","md","NEWLINES_RE","NULL_RE","inline","tok","isLinkOpen","isLinkClose","linkify","blockTokens","htmlLinkLevel","currentToken","links","lastPos","ln","fullUrl","urlText","token_o","token_t","token_c","RARE_RE","SCOPED_ABBR_TEST_RE","SCOPED_ABBR_RE","SCOPED_ABBR","replaceFn","replace_scoped","inlineTokens","inside_autolink","replace_rare","blkIdx","QUOTE_TEST_RE","QUOTE_RE","APOSTROPHE","replaceAt","process_inlines","thisLevel","OUTER","canOpen","canClose","isSingle","lastChar","isLastPunctChar","isNextPunctChar","isLastWhiteSpace","isNextWhiteSpace","openQuote","closeQuote","smartquotes","text_join","curr","_rules","r_normalize","r_block","r_inline","r_linkify","r_replacements","r_smartquotes","r_text_join","Core","StateBlock","indent_found","begin","keepLastLF","lineIndent","lineStart","first","MAX_AUTOCOMPLETED_CELLS","getLine","escapedSplit","isEscaped","table","startLine","endLine","silent","nextLine","firstCh","secondCh","lineText","columns","aligns","columnCount","oldParentType","terminatorRules","token_to","tableLines","token_tho","token_htro","token_ho","token_il","tbodyLines","autocompletedCells","terminate","token_tbo","token_tro","token_tdo","fence","mem","markup","haveEndMarker","blockquote","oldLineMax","oldBMarks","oldBSCount","oldSCount","oldTShift","lastLineEmpty","isOutdented","initial","spaceAfterMarker","adjustTab","oldIndent","lines","hr","cnt","skipBulletListMarker","skipOrderedListMarker","markTightParagraphs","tight","isTerminatingParagraph","isOrdered","markerValue","posAfterMarker","markerCharCode","listTokIdx","listLines","prevEmptyEnd","contentStart","indentAfterMarker","itemLines","oldTight","oldListIndent","reference","_endLine","getNextLine","isContinuation","lineContent","destRes","destEndPos","destEndLineNo","titleRes","title","label","block_names","attr_name","unquoted","single_quoted","double_quoted","attr_value","attribute","open_tag","close_tag","processing","declaration","cdata","HTML_TAG_RE","HTML_OPEN_CLOSE_TAG_RE","HTML_SEQUENCES","html_block","heading","token_i","lheading","paragraph","r_table","r_code","r_fence","r_blockquote","r_hr","r_list","r_reference","r_html_block","r_heading","r_lheading","r_paragraph","ParserBlock","maxNesting","hasEmptyLines","prevLine","ok","outTokens","StateInline","token_meta","canSplitWord","left_flanking","right_flanking","isTerminatorChar","SCHEME_RE","pmax","ws","ESCAPED","escape","escapedStr","origStr","backtick","openerLength","matchEnd","matchStart","closerLength","strikethrough_tokenize","scanned","postProcess","loneMarkers","startDelim","endDelim","strikethrough_postProcess","tokens_meta","r_strikethrough","emphasis_tokenize","isStrong","emphasis_post_process","r_emphasis","parseReference","labelStart","image","EMAIL_RE","AUTOLINK_RE","autolink","isLetter","lc","html_inline","DIGITAL_RE","NAMED_RE","processDelimiters","openersBottom","headerIdx","lastTokenIdx","jumps","closerIdx","closer","minOpenerIdx","openerIdx","newMinOpenerIdx","opener","isOddMatch","lastJump","link_pairs","fragments_join","r_text","r_newline","r_escape","r_backticks","r_link","r_image","r_autolink","r_html_inline","r_entity","_rules2","r_balance_pairs","r_fragments_join","ParserInline","reFactory","text_separators","isOptionsObj","defaultSchemas","tlds_2ch_src_re","tlds_default","resetScanCache","createValidator","createNormalizer","tlds","untpl","tpl","schemaError","compiled","slist","Match","shift","createMatch","LinkifyIt","schemas","schema","definition","ml","tld_pos","at_pos","keepOld","maxInt","tMin","tMax","skew","damp","initialBias","initialN","regexPunycode","regexNonASCII","regexSeparators","baseMinusTMin","floor","stringFromCharCode","mapDomain","labels","encoded","ucs2decode","counter","extra","ucs2encode","codePoints","basicToDigit","digitToBasic","digit","adapt","numPoints","firstTime","inputLength","bias","basic","oldi","baseMinusT","out","basicLength","handledCPCount","handledCPCountPlusOne","qMinusT","toUnicode","toASCII","punycode","cfg_default","cfg_zero","cfg_commonmark","config","BAD_PROTO_RE","GOOD_DATA_RE","validateLink","RECODE_HOSTNAME_FOR","normalizeLink","mdurl.parse","mdurl.encode","mdurl.format","normalizeLinkText","mdurl.decode","MarkdownIt","presetName","utils.isString","ParserCore","utils","utils.assign","presets","missed","matchBR","markdownItBr","tokenize","br","delim","_default","deepFreeze","Response","escapeHTML","inherit$1","original","objects","SPAN_CLOSE","emitsWrappingTags","scopeToCSSClass","prefix","pieces","HTMLRenderer","parseTree","className","newNode","TokenTree","builder","TokenTreeEmitter","emitter","lookahead","concat","anyNumberOfTimes","stripOptionsFromArgs","either","countMatchGroups","startsWith","lexeme","BACKREF_RE","_rewriteBackreferences","regexps","joinWith","numCaptures","MATCH_NOTHING_RE","IDENT_RE","UNDERSCORE_IDENT_RE","NUMBER_RE","C_NUMBER_RE","BINARY_NUMBER_RE","RE_STARTERS_RE","SHEBANG","beginShebang","BACKSLASH_ESCAPE","APOS_STRING_MODE","QUOTE_STRING_MODE","PHRASAL_WORDS_MODE","COMMENT","modeOptions","ENGLISH_WORD","C_LINE_COMMENT_MODE","C_BLOCK_COMMENT_MODE","HASH_COMMENT_MODE","NUMBER_MODE","C_NUMBER_MODE","BINARY_NUMBER_MODE","REGEXP_MODE","TITLE_MODE","UNDERSCORE_TITLE_MODE","METHOD_GUARD","END_SAME_AS_BEGIN","MODES","skipIfHasPrecedingDot","scopeClassName","_parent","beginKeywords","compileIllegal","compileMatch","compileRelevance","beforeMatchExt","originalMode","COMMON_KEYWORDS","DEFAULT_KEYWORD_SCOPE","compileKeywords","rawKeywords","caseInsensitive","scopeName","compiledKeywords","compileList","keywordList","keyword","pair","scoreForKeyword","providedScore","commonKeyword","seenDeprecations","deprecated","MultiClassError","remapScopeNames","regexes","scopeNames","positions","beginMultiClass","endMultiClass","scopeSugar","MultiClass","compileLanguage","langRe","global","MultiRegex","terminators","matchData","ResumableMultiRegex","m2","buildModeRegex","mm","term","compileMode","cmode","ext","keywordPattern","expandOrCloneMode","dependencyOnParent","variant","HTMLInjectionError","html","inherit","NO_MATCH","MAX_KEYWORD_HITS","HLJS","hljs","languages","plugins","SAFE_MODE","LANGUAGE_NOT_FOUND","PLAINTEXT_LANGUAGE","shouldNotHighlight","languageName","blockLanguage","classes","getLanguage","highlight","codeOrLanguageName","optionsOrCode","ignoreIllegals","fire","_highlight","codeToHighlight","continuation","keywordHits","keywordData","matchText","processKeywords","top","modeBuffer","word","kind","keywordRelevance","relevance","cssClass","emitKeyword","processSubLanguage","continuations","highlightAuto","processBuffer","emitMultiClass","startNewMode","endOfMode","matchPlusRemainder","doIgnore","resumeScanAtSamePosition","doBeginMatch","newMode","beforeCallbacks","doEndMatch","endMode","origin","processContinuations","lastMatch","processLexeme","textBeforeMatch","processed","iterations","beforeMatch","processedCount","justTextHighlightResult","languageSubset","plaintext","results","autoDetection","sorted","best","secondBest","updateClassName","currentLang","resultLang","highlightElement","configure","userOptions","initHighlighting","highlightAll","initHighlightingOnLoad","wantsHighlight","boot","registerLanguage","languageDefinition","lang","error$1","registerAliases","unregisterLanguage","listLanguages","aliasList","upgradePluginAPI","addPlugin","removePlugin","deprecateHighlightBlock","core","container_plugin","validateDefault","renderDefault","min_markers","marker_str","marker_char","marker_len","validate","auto_closed","marker_count","old_parent","old_line_max","blobUrl","isBlockBlobUrlInput","isSuggestionBlobUrlInput","getBlobFilename","fileName","baseUrl","getBlobUrl","suffix","uploadBlob","blobLocation","file","fileId","importImage","sourceUrl","userError","knownData","useBlobs","blobs","getBlobs","deleteBlob","isBlobUrl","getMdEnv","urlRoot","calculateUrl","destination","getGroupRe","groupName","serializeMdExtensionAttributes","attributedata","linkData","attributes","InlineContainerTypes","OnelineContainerTypes","LinkbasedExtensionTypes","getInlineContainerAttributes","inlineMatch","modeKey","getLinkBasedExtensionAttributes","linkbasedRenderers","getOnelineContainerAttributes","modeMatch","renderReTxts","renderers","reTxt","fixWidgetNoise","tokenizeWhitelistedHtml","tags","tagRe","open_token","close_token","tokenizeCustomLink","customLinkRenderer","matchPos","tokenizeInlineContainer","WhitelistHtmlTags","InlineContainers","renderContainer","CustomLink","CustomImageRenderer","customImageRenderer","handleMdItContainer","containerRenderers","openHandler","renderLinkBasedItem","prependNode","AddGnistMarkdownContainers","containerKey","MarkdownItContainer","getRe","render_id","iconRenderer","span","getYoutubeEmbedCode","controls","iframe","interpretYoutubeEmbedCode","youtubeRenderer","groups","linkStyles","noBangBefore","notEmpty","lineDoesNotStartWithTable","alt","justify","large","justifyOptions","linkBox","attributeList","floatOptions","justifyToAlign","maxwidth","decorative","settingsBox","img","inlineRenderers","onelineRenderers","isAttrsType","isLinkbasedsAttrsType","MarkdownItAnchor","wrapCodeRenderer","defaultImageRender","imageRenderer","defaultLinkOpenRender","linkOpenRenderer","fixHeaders","fixExtensions","renderMd","mdValue","renderedMd","__default__","useDynamicLabelTexts","labelId","tooltipId","placeholderId","descriptionId","texts","linkTarget","showDescription","onChange","parsedVal","singleLineRef","multiLineRef","activeRef","formatDate","withTime","emptyValue","undefinedCompare","comparator","defaultCompare","stringCompareCaseInsensitive","propertyCompare","order","copy","zip","aVal","bVal","arrayCompare","aSorted","bSorted","undefComp","elementCompare","useSort","sortFields","defaultSortfield","defaultSortDirection","comparers","skipSortOnContentChange","useGroupCountOnSortField","isGrouped","sortFieldRef","sortDirection","headerClasses","getHeaderClasses","sortOnField","sortedValues","newField","oldField","oldDirection","orderChanged","countChanged","sortValues","sortField","testValue","itemComparer","previousItem","previousValue","_hoisted_1","_sfc_render","_ctx","_cache","_sortFields","columnList","col","showDetailsModal","viewDetails","updateTriggerEvent","closeDetails","keepNewRow","onCreateButtonClick","onSave","showDeleteModal","itemToDelete","doDelete","getDeleteText","discussions","comments","chatpage","commentColumns","discard","onCloseModal","showModal","modalTitle","modalButtonText","deleteComment","verifyComment","commentHex","tabs","activeTab","blockUrl","allBlocksLazy","getTranslatedBlocks","useBlock","useDraftReaderEndpoint","getBlock","versionNumber","translateBlock","useBlocks","useBlockListLazy","sort","translatedBlocks","getBlocks","updateBlock","deleteBlock","showHelp","commentContent","submit","badgeRoles","hasBadgeRole","getBadgeRole","colorMapping","badgeValue","firstParam","hasBadge","isLinkComment","showReplyToComment","toggleReply","showEditComment","toggleEdit","isCommentAuthor","isAuthenticated","saveComment","saveCommentReply","moderatorDeleteComment","upvoteClass","downvoteClass","voteUp","voteDown","color","timeAgo","isSticky","setSticky","removeSticky","collapsed","toggleCollapse","removeDeletedComments","threadLockToggle","commentText","newComment","sortStrategy","sortThreads","getSortFunction","strategy","sortComments","setSortStrategy","useWaitForObservedElement","elementId","useQuerySelector","watchVisibility","disconnectCreationObserver","_target","startObserveCreation","isVisible","disconnectVisibilityObserver","startObserveVisibility","getElement","_elementId","attrObserver","useScrollToIdWhenPresent","previousWatcher","unregisterWatcher","page","pageSettings","toGroupedDropdownItems","includeEmpty","emptyLabel","group","cmp","prevGroup","stringToDropdownItems","toDropdownItems","getOption","_getKey","unSelect","isSelected","onListboxChange","arrSelectedItems","arrSelectedKeys","canSelectArray","optKey","listboxButtonRef","isOpen","records","deepClone","blockValueEquals","removeSourceProp","stringifyBlockValue","useNestedMVDefault","triggerOnInternalStateReplaced","useInternalState","useNestedMV","extState","defaultState","getInternalState","getExternalState","updateOnNullUndefined","newExtState","newState","oldState","replacedState","setOldState","stateReplaced","oldVal","uploadInput","urlRef","imageError","confirmDelete","uploadFileNotUrl","previewUrl","handleImageUpload","files","validationMessage","validationErrors","satisfiesRequiredRule","performValidation","onDelete","arrayEquals","getCompareValue","bb","useStepScrolling","scrollSize","waitBeforeScrollMs","waitBeforeNextMs","nextScrollPos","activeTimeouts","ev","timeouts","id1","id2","listContainsItem","selected","compareTag","filteredItems","onModelValueChanged","internalState","modelKeys","selectedKeys","onSelectedItemsChanged","newIntState","tagListRef","selectedItems","sourceTag","newText","onFilterChanged","filterText","removeSelectedItem","showOptions","newList","oldList","inputRef","addedOption","createdOption","isFull","hideOptionsList","showOptionsList","searchBlocks","selectedBlockId","hardcodedRouteOptions","selectedHardcoded","searchHardcoded","_routeItems","routeItems","selectedRouteItem","searchRouteItems","blocksLoaded","routeMatch","savedRouteName","showLinkModal","oldLink","disableSave","unChanged","openModal","onCancel","showSelector","optionCount","selectedType","orgUrl","useOrganizations","includeAll","getOrganizations","getOrganization","orgId","throwForErrorPages","addFrontendData","frontendData","useOrganization","getBlocksForOrganization","useBlocksForOrganization","createOrganization","organizationData","updateOrganization","addUserToOrganization","organizationId","email","responseText","requestMembership","cancel","acceptMembershipRequest","requestedUser","removeUserFromOrganization","useValidationTracking","triggerFormValidation","deepWatch","initialState","formRef","runValidation","onValidChanged","memberOrgs","requestedOrgs","toInternalState","externalState","inputData","submitDisabled","filteredOrganizationData","org","requestMembershipOfOrg","organization","numberOfEmployees","userType","handleModalClick","cancelRequestMembershipOfOrg","script$2","_withId$2","_hoisted_1$2","render$2","$props","$setup","$data","$options","styleInject","css","insertAt","css_248z$2","script$1","_withId$1","_hoisted_1$1","_hoisted_2","render$1","css_248z$1","script","_withId","css_248z","translatedTags","suggestionManualStatuses","getSuggestionStatus","workItemStatus","statusValue","tagUrl","useTags","forGroupId","delayInit","getTags","createTag","updateTag","deleteTag","tagId","allTagGroupsLazy","getTagGroups","useTagGroupsLazy","useTagGroups","useTagGroup","tagGroupId","getTagGroup","createTagGroup","tagGroup","updateTagGroup","deleteTagGroup","searchTags","addTag","newTag","showEditButton","sortedSuggestions","selectedSuggestionStatuses","selectedSuggestionTypes","suggestionStatusOptions","statusFilter","typeFilter","selectedTags","tagFilter","bt","matchesSearch","searchLower","filterSuggestions","VoteDirection","userinfo","description","hasVoted","subscribed","shouldSubcribe","assertDefined","shouldThrow","assertMsg","isDefined","useStickyToolbar","topIntersector","bottomIntersector","topAboveViewport","movingBottomAboveStickyBottom","lastStickyBottom","topObserver","bottomObserver","observingTop","observingBottom","stopObserve","MarkdownEditor","ParagraphShimmer","onUpdateModelValue","satisfiesMinlengthRule","satisfiesMaxlengthRule","movedToolbarRef","movedInputRef","toolbarParentRef","editorRef","intersectionHelperDivRef","backupToolbarTargetRef","afterEditorRef","startObserveTop","startObserveBottom","editorAboveToolbarBottom","isPlaced","onUnplacedRef","placeSelf","externalToolbarParent","connect","placeEditor","externalInputTarget","externalToolbarTarget","onUnplaced","isStandaloneEditor","targetForEditorInput","targetForEditorToolbar","toolbarParent","focusAfterToolbar","__expose","onUpdate","caller","useVersions","blockID","includeContent","getVersions","updateVersion","versionId","publish","includeUnpublished","getVersion","createVersion","copyFromVersionId","deleteVersion","deleteDraft","setCurrentVersion","versionNumberPattern","versionNumberAntiPattern","isValidVersionNumber","newVersionNumber","copyFromVersion","showNewVersionModal","newVersionNumberIsValid","onCreate","newVersion","suggestionType","maxDescriptionLength","fromDevOps","handleCleanup","isEdit","_suggestion","showValidationMessages","validDevOpsConnections","updatedValue","editorHeight","selectedBlockName","selectedVersion","versions","versionOptions","statusOptions","statuses","connectDevOps","workItem","disconnectDevOps","setDone","createFromDevOps","noPrefix","enPrefix","masterdataUrl","getMasterData","urlEnd","getTexts","arrGroups","myAgreementReferences","adminAgreementReferences","applicationServices","companies","informationClasses","criticalities","archTypes","standardLzRoles","standardGithubTeams","alzFormTopics","useDynamicText","fieldGroups","msgGroups","richGroups","dbFieldLabels","dbMessages","dbRichtext","addMasterDataRow","keyProperty","payload","updateMasterDataRow","deleteMasterDataRow","mapValueList","i18nKey","getFieldSetKeys","fields","richtext","getFieldSetByKey","allFieldSets","getTextSetByKey","simpleSet","allSimpleTextSets","richSet","allRichTextSets","alzFieldKeys","batFieldKeys","kssContactFieldKeys","alzTextKeys","batTextKeys","kssContactTextKeys","richTextPrefix","alzRichTextKeys","allTextSets","groupBy","groupKey","keyProp","isTypeAndString","groupedFields","setOptions","usedFieldCount","availableFieldCount","existingGroupFields","fieldOptions","setLocaleValue","availableFields","fieldsFromDbExceptDeprecated","usedField","getText","textOptions","selectedGroup","roles","roleOptions","_selectedItem","selectedItem","tableData","_selectedUser","selectedUser","getUserById","searchUsers","loadingData","loadFailed","getKeyProperty","getKey","itemToSave","columnsMap","getColumnHeader","getNewItem","typeOptions","formConfigOwnerOptions","jsonValue","replaceExisting","importJson","toImport","row","githubUrl","useMyAlzSystems","showAll","getMyAlzSystems","useAlzSystem","systemId","isSandbox","getAlzVendingFilesForApplication","createLzSystem","dto","updateLzSystem","useTeamGroupsForSystem","getTeamGroupsForSystem","systemTeamGroups","environmentList","repoList","lzRoleOptions","ghTeamOptions","repo","team","envRoles","change","envName","canOrder","roleTypeOptions","deleteCustomProduct","product","textLoaded","richTextLookup","lookup","txt","dbFieldLookup","fld","_landingzone","system","sandbox_env","submitting","submitted","submitFailed","submitOrder","environments","companyOptions","critOptions","infoClassOptions","infoClass","archtypeOptions","archType","operationOptions","envTypeOptions","testDataOptions","addEnvironment","emptyEnv","addRepo","emptyRepo","searchServices","service","getServiceById","useAdminAgreementList","agreementReferences","missingAgreementReference","searchAgreements","itemLimit","agreement","getAgreementByNumber","calculateFileIdentifier","lz","getDynamicLabelProps","textKey","showBatModal","systems","useFeatureToggle","featureId","getFeatureStatus","useB2C","userModel","b2cDelete","localeOptions","KnownHttpHeaders","KnownMimeTypes","subscriptionKeyHeaderName","apimUrl","callApi","endPoint","operation","headers","Constants.subscriptionKeyHeaderName","respText","dataErr","useApim","startDate","endDate","apima","getApiMAnalytics","requestApimSubscription","productId","getApiSubscriptions","apimId","useSubscriptionList","apiName","getApiMSubscriptions","useApiList","onlyLoadSingleApi","getApiList","getApiMetadata","apimName","getApiData","useApimProductsList","getApimProducts","getApimProductDetails","showSubscriptionKey","displayedKeyValue","copyToClipboard","selectedApi","subscriptions","products","productSubMapping","isSubmittingApiMRequest","requestApimProduct","subscription","activeProduct","activeProductDetails","newsUrl","useNews","news","getNews","updateNewsArtice","addNewsArticle","deleteNewsArticle","newsArticleId","defaultContent","saveNews","newsData","useImageClick","onImageClick","parentElement","imageElements","disconnect","startObserve","imageElement","imageListRef","showImageModal","imageModalSource","handleClick","_content","articleItemId","edit","newsLogo","newArticle","markReadUnread","notification","notificationToDelete","deleteItem","deleteId","categoryUrl","allCategoriesLazy","getCategories","useCategoriesLazy","useBlockListCategories","categoryIdFilter","categoriesNullable","_categories","_categoryIdFilter","useCategoryHomePageLink","updateCategory","createCategory","deleteCategory","categoryId","_attrs","categories","categoryBackgroundColorClass","toggleFavorite","newFavorite","imgRef","refreshSize","imageUrl","getStartedId","activeStep","shownDescription","handleDrag","onMove","onStart","cursor","updateCursorPos","db","ev_move","startDrag","getClientXY","diffXY","sumXY","divXY","point","factor","getParentWithClass","newSize","bgRef","zoomFactor","popupItem","visualVersionRef","embedded","idEncode","ensureTabVisible","headerId","useCssReorder","cssIdentifier","themeStyleNode","renderSchema","showAs","hideTable","flattenedSchema","isArrayProperty","isObjectProperty","flatten","required","newPrefix","childRequired","childResult","removeExample","newSchema","computeEndpoint","apiData","enrichParam","typeI18nId","translatedType","allParams","requestBody","example","initialTab","apiMContainer","hasSubscription","subs","apiSchemas","updateRef","_items","showAllToggle","getOuterCssProperties","getInnerCssProperties","isEditing","forceToGridMode","getOuterAndInnerLayoutClasses","addShrinkGrowData","isAbsoluteFlexSize","getLinkLevelClasses","getLayoutClasses","getBlockAlignmentClasses","addMode","onRefCreated","connection","skip","mappedContent","contentKeys","hasCustomSchemaContent","hasBlockSchemaContent","_typeof","_extends","NEWTON_ITERATIONS","NEWTON_MIN_SLOPE","SUBDIVISION_PRECISION","SUBDIVISION_MAX_ITERATIONS","kSplineTableSize","kSampleStepSize","float32ArraySupported","aA1","aA2","calcBezier","aT","getSlope","binarySubdivide","aX","aA","aB","mX1","mX2","currentX","currentT","newtonRaphsonIterate","aGuessT","currentSlope","LinearEasing","mY1","mY2","sampleValues","getTForX","intervalStart","currentSample","lastSample","dist","guessForT","initialSlope","easings","supportsPassive","events","left","abortEvents","setDefaults","scroller","easing","cancelable","onDone","initialX","targetX","initialY","targetY","diffX","diffY","abort","cumulativeOffsetContainer","cumulativeOffsetElement","abortEv","abortFn","easingFn","timeStart","timeElapsed","progress","scrollTop","scrollLeft","recalculateTargets","step","topLeft","scrollTo","_duration","containerHeight","containerTop","containerBottom","elementTop","elementBottom","_scroller","deleteBinding","findBinding","getBinding","directiveHooks","VueScrollTo","install","Vue","properties","showSubtitle","toggleSubtitle","headingLevels","extractMenuItems","updateMenu","containers","exctractToc","flatmenu","scrollToTop","translatedTagList","productImage","productImageField","tagGroups","filtered_groups","gt","pt","orgBlocks","getStatusText","statusClass","_cardTemplates","BlockCard","ProductCard","SearchCard","cardTemplates","_pageTemplates","BlockPage","ApiPage","ProductPage","SupplierPage","FullPage","pageTemplates","templateId","useAudienceTargeting","returnAll","audience","setBlocks","externalBlocks","updateFilters","backlog","owners","showBacklog","selectedCategories","selectedOwners","setSearchText","isApproval","showOnlyEmptyCats","audienceTargetedBlocks","toggleCategory","filterCategories","getQueryIdParam","queryCategories","preselectedCategories","isInSelectedCategory","backlogFilter","ownerOptions","orgs","ownerFilter","queryTags","filteredBlocks","missingConnection","hideAllFiltersExceptSearch","showNewButton","canEdit","apiListGrouped","apiOptions","api","apimValue","tagOptions","tg","useRefreshable","refreshKey","localeValueEqual","defaultSchema","schemaTypeOptions","addRequiredFieds","matchingField","addSchemaItem","emptySchema","indexToDelete","moveItem","breadcrumbUrl","useBreadcrumbForPage","breadcrumbId","getBreadcrumbForPage","useBreadcrumbs","getBreadcrumbs","addParentsToBreadcrumbs","breadcrumb","createBreadcrumb","updateBreadcrumb","deleteBreadcrumb","save","deleteChild","addChild","form","ownerOrg","ownerDetails","loggedOnUserOwner","apimFieldInSchema","apimDataMovedToAnotherField","sourceContent","updatedContent","refreshApimValue","fieldUsedInContent","apimValueHasChanged","createNewBlock","updateExistingBlock","blockDTO","currentVersionId","blockHasChanged","doNotSaveBackLocation","ownerOrgOptions","ownerUserOptions","categoryOptions","isCustomPage","canCreateCustomPage","pageTemplateOptions","blockTitle","breadcrumbData","selectedBreadcrumb","showBreadcrumbSelector","selectBreadcrumb","reversedBcPath","currentBc","bcPath","isExistingBlock","SEMVER_SPEC_VERSION","MAX_LENGTH","MAX_SAFE_INTEGER","MAX_SAFE_COMPONENT_LENGTH","MAX_SAFE_BUILD_LENGTH","RELEASE_TYPES","constants","debug","debug_1","require$$0","require$$1","exports","safeRe","LETTERDASHNUMBER","safeRegexReplacements","makeSafeRegex","createToken","isGlobal","safe","looseOption","emptyOpts","parseOptions","parseOptions_1","numeric","compareIdentifiers","anum","bnum","rcompareIdentifiers","require$$2","require$$3","require$$4","SemVer$d","SemVer","other","release","identifierBase","prerelease","semver","throwErrors","er","parse_1","valid_1","clean","clean_1","inc_1","version1","version2","v1","v2","comparison","v1Higher","highVersion","lowVersion","highHasPre","diff_1","major","loose","major_1","minor","minor_1","patch_1","prerelease_1","compare","compare_1","rcompare","rcompare_1","compareLoose","compareLoose_1","compareBuild","versionA","versionB","compareBuild_1","sort_1","rsort","rsort_1","gt_1","lt_1","eq","eq_1","neq","neq_1","gte","gte_1","lte","lte_1","require$$5","op","cmp_1","coerce","coerceRtlRegex","coerce_1","LRUCache","lrucache","SPACE_CHARACTERS","Range","Comparator","isNullSet","isAny","comps","memoKey","FLAG_INCLUDE_PRERELEASE","FLAG_LOOSE","hyphenReplace","comparatorTrimReplace","tildeTrimReplace","caretTrimReplace","rangeList","parseComparator","replaceGTE0","rangeMap","comparators","thisComparators","isSatisfiable","rangeComparators","thisComparator","rangeComparator","testSet","LRU","require$$6","remainingComparators","testComparator","otherComparator","replaceCarets","replaceTildes","replaceXRanges","replaceStars","isX","replaceTilde","pr","replaceCaret","replaceXRange","gtlt","xM","xm","xp","anyX","incPr","$0","fM","fm","fp","fpr","fb","tM","tp","tpr","ANY","satisfies","satisfies_1","toComparators","toComparators_1","maxSatisfying","maxSV","rangeObj","maxSatisfying_1","minSatisfying","minSV","minSatisfying_1","minVersion","minver","setMin","compver","minVersion_1","validRange","require$$7","outside","hilo","gtfn","ltefn","ltfn","ecomp","outside_1","gtr","gtr_1","ltr","ltr_1","intersects","r1","r2","intersects_1","simplify","ranges","simplified","subset","dom","sawNonNull","simpleSub","simpleDom","isSub","simpleSubset","minimumVersionWithPreRelease","minimumVersion","eqSet","higherGT","lowerLT","gtltComp","higher","hasDomLT","hasDomGT","needDomLTPre","needDomGTPre","subset_1","internalRe","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","require$$22","require$$23","require$$24","require$$25","require$$26","require$$27","require$$28","require$$29","require$$30","require$$31","require$$32","require$$33","require$$34","require$$35","require$$36","require$$37","require$$38","simplifyRange","require$$39","require$$40","_version","changeStatus","isDraft","canPublish","targetOperation","availableStatuses","disableButton","versionToDelete","existingVersionNumber","showEditVersionNumberModal","validVersionNumber","editVersionNumber","updateCurrentVersion","hasWorkingCopy","buttonRef","menuRef","versionWarning","showDeleteBlockModal","doDeleteBlock","roleFilter","viewDetailsUser","rolesModel","filteredUsers","routeTypeOptions","targetMenuOptions","headerTypeOptions","parentOptions","colorOptions","triggerValidationMessages","updatedItem","cardTemplateOptions","categoryEditors","editorOptions","tagGroupOptions","saveValue","curl","shell","csharp$1","csharp","BUILT_IN_KEYWORDS","FUNCTION_MODIFIERS","LITERAL_KEYWORDS","NORMAL_KEYWORDS","CONTEXTUAL_KEYWORDS","KEYWORDS","NUMBERS","RAW_STRING","VERBATIM_STRING","VERBATIM_STRING_NO_LF","SUBST","SUBST_NO_LF","INTERPOLATED_STRING","INTERPOLATED_VERBATIM_STRING","INTERPOLATED_VERBATIM_STRING_NO_LF","STRING","GENERIC_MODIFIER","TYPE_IDENT_RE","AT_IDENTIFIER","http$1","http","HEADER_NAME","HEADER","HEADERS_AND_BODY","java$1","decimalDigits","frac","hexDigits","NUMERIC","recurRegex","substitution","java","JAVA_IDENT_RE","GENERIC_IDENT_RE","ANNOTATION","PARAMS","javascript$1","LITERALS","TYPES","ERROR_TYPES","BUILT_IN_GLOBALS","BUILT_IN_VARIABLES","BUILT_INS","javascript","hasClosingTag","after","IDENT_RE$1","FRAGMENT","XML_SELF_CLOSING","XML_TAG","afterMatchIndex","afterMatch","KEYWORDS$1","decimalInteger","NUMBER","HTML_TEMPLATE","CSS_TEMPLATE","GRAPHQL_TEMPLATE","TEMPLATE_STRING","SUBST_INTERNALS","SUBST_AND_COMMENTS","PARAMS_CONTAINS","CLASS_OR_EXTENDS","CLASS_REFERENCE","USE_STRICT","FUNCTION_DEFINITION","UPPER_CASE_CONSTANT","noneOf","FUNCTION_CALL","PROPERTY_ACCESS","GETTER_OR_SETTER","FUNC_LEAD_IN_RE","FUNCTION_VARIABLE","php$1","php","NOT_PERL_ETC","PASCAL_CASE_CLASS_NAME_RE","VARIABLE","PREPROCESSOR","SINGLE_QUOTED","DOUBLE_QUOTED","HEREDOC","NOWDOC","WHITESPACE","KWS","normalizeKeywords","CONSTRUCTOR_CALL","CONSTANT_REFERENCE","LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON","NAMED_ARGUMENT","PARAMS_MODE","FUNCTION_INVOKE","ATTRIBUTE_CONTAINS","ATTRIBUTES","python$1","python","RESERVED_WORDS","PROMPT","LITERAL_BRACKET","digitpart","pointfloat","COMMENT_TYPE","ruby$1","ruby","RUBY_METHOD_RE","CLASS_NAME_RE","CLASS_NAME_WITH_NAMESPACE_RE","RUBY_KEYWORDS","YARDOCTAG","IRB_OBJECT","COMMENT_MODES","decimal","RUBY_DEFAULT_CONTAINS","IRB_DEFAULT","swift$1","keywordWrapper","dotKeywords","optionalDotKeywords","keywordTypes","keywords","literals","precedencegroupKeywords","numberSignKeywords","builtIns","operatorHead","operatorCharacter","operator","identifierHead","identifierCharacter","typeIdentifier","keywordAttributes","availabilityKeywords","swift","BLOCK_COMMENT","COMMENTS","DOT_KEYWORD","KEYWORD_GUARD","PLAIN_KEYWORDS","kw","REGEX_KEYWORDS","KEYWORD","KEYWORD_MODES","BUILT_IN_GUARD","BUILT_IN","OPERATOR_GUARD","OPERATOR","OPERATORS","ESCAPED_CHARACTER","rawDelimiter","ESCAPED_NEWLINE","INTERPOLATION","MULTILINE_STRING","SINGLE_LINE_STRING","REGEXP_CONTENTS","BARE_REGEXP_LITERAL","EXTENDED_REGEXP_LITERAL","REGEXP","QUOTED_IDENTIFIER","IMPLICIT_PARAMETER","PROPERTY_WRAPPER_PROJECTION","IDENTIFIERS","AVAILABLE_ATTRIBUTE","KEYWORD_ATTRIBUTE","USER_DEFINED_ATTRIBUTE","TYPE","GENERIC_ARGUMENTS","TUPLE_ELEMENT_NAME","TUPLE","GENERIC_PARAMETERS","FUNCTION_PARAMETER_NAME","FUNCTION_PARAMETERS","FUNCTION_OR_MACRO","INIT_SUBSCRIPT","OPERATOR_DECLARATION","PRECEDENCEGROUP","TYPE_DECLARATION","interpolation","submodes","rust","RAW_IDENTIFIER","NUMBER_SUFFIX","BUILTINS","ATTRIBUTE","PUNCTUATION","LITERALS_MODE","templates","curlTemplate.default","csharpTemplate.default","httpTemplate.default","javaTemplate.default","javascriptTemplate.default","phpTemplate.default","pythonTemplate.default","rubyTemplate.default","swiftTemplate.default","registerLanguagesForHighlight","Drop","toString$1","toLowerCase","isIterator","escapeRegex","toValue","isNil","toEnumerable","isIterable","toArray","toLiquid","isUndefined","forOwn","iteratee","stop","padStart","padEnd","identify","changeCase","ellipsis","caseInsensitiveCompare","argumentsToValue","escapeRegExp","TRAIT","LiquidError","mkContext","mkMessage","TokenizationError","ParseError","RenderError","LiquidErrors","UndefinedVariableError","InternalUndefinedVariableError","variableName","AssertionError","lineNumber","rowIndicator","colIndicator","WORD","BLANK","QUOTE","INLINE_BLANK","SIGN","isWord","assert","assertEmpty","NullDrop","EmptyDrop","BlankDrop","ForloopDrop","collection","variable","BlockDrop","superBlockRender","isComparable","nil","literalValues","createTrie","trie","__assign","__awaiter","_arguments","adopt","fulfilled","rejected","toPromise","toValueSync","rFormat","isLeapYear","getWeekOfYear","startDay","now","then","ordinal","padWidths","padSpaceChars","getTimezoneOffset","nOffset","formatCodes","strftime","remaining","flagStr","conversion","convert","flags","padChar","padWidth","OneMinute","ISO8601_TIMEZONE_PATTERN","monthNames","monthNamesShort","dayNames","dayNamesShort","LiquidDate","timezone","timezoneName","localDateString","utcDateString","localDate","Limiter","limit","DelimitedToken","contentBegin","contentEnd","trimLeft","trimRight","tl","tr","TagToken","trimTagLeft","trimTagRight","tagDelimiterLeft","tagDelimiterRight","valueBegin","valueEnd","TokenKind","Tokenizer","OutputToken","trimOutputLeft","trimOutputRight","outputDelimiterLeft","outputDelimiterRight","valueRange","HTMLToken","NumberToken","IdentifierToken","LiteralToken","operatorPrecedences","operatorTypes","OperatorToken","PropertyAccessToken","FilterToken","HashToken","rHex","rOct","escapeChar","hexVal","parseStringLiteral","QuotedToken","RangeToken","lhs","rhs","LiquidTagToken","FilteredValueToken","polyfill","getPerformance","SimpleEmitter","StreamedEmitter","KeepingTypeEmitter","Render","Expression","toPostfix","lenient","operands","isOperatorToken","evalToken","isPropertyAccessToken","evalPropertyAccessToken","isRangeToken","evalRangeToken","evalQuotedToken","ops","isTruthy","isFalsy","defaultOperators","equals","Node$1","Node","domResolve","filepath","readFile","xhr","readFileSync","exists","existsSync","dirname","sep","fs","defaultFilter","space","inspect","ancestors","to_integer","misc","escapeMap","unescapeMap","xml_escape","unescape","escape_once","newline_to_br","strip_html","htmlFilters","MapFS","mapping","normalizeDirectoryList","getOutputEscapeFunction","nameOrFunction","whiteSpaceCtrl","inRaw","isDelimitedToken","isTagToken","greedy","isHTMLToken","mask","operators","operand","stopStrings","respectQuoted","leftPos","pred","jekyllStyle","hashes","isBegin","decimalFound","digitFound","htmlStopStrings","htmlStopStringSet","ParseStream","parseToken","TemplateImpl","Tag","remainTokens","liquid","Hash","createTagClass","isKeyValuePair","Filter","argv","Value","impl","Output","outputEscape","HTML","LookupType","Loader","rRelativePath","referencedFile","_referencedFile","currentFile","enforceRoot","extname","referenced","roots","Parser","TagClass","isOutputToken","tpls","task","taskOrTpl","getKind","isQuotedToken","Context","renderOptions","memoryLimit","renderLimit","_e","keyValues","paths","strictVariables","readProperty","candidate","ownPropertyOnly","readJSProperty","readSize","readFirst","readLast","BlockMode","abs","at_least","at_most","ceil","divided_by","dividend","divisor","integerArithmetic","minus","times","round","amp","plus","mathFilters","url_decode","url_encode","cgi_escape","uri_escape","rSlugifyDefault","rSlugifyReplacers","cased","removeAccents","urlFilters","complexity","last$1","reverse","lvalue","rvalue","tuple","sort_natural","propertyString","sum","compact","unshift","clone","pop","slice","where","expected","where_exp","itemName","keyTemplate","group_by","group_by_exp","find","find_exp","uniq","sample","shuffled","arrayFilters","date_to_xmlschema","date_to_rfc822","date_to_string","stringify_date","date_to_long_string","month_type","defaultTimezoneOffset","dateFilters","rCJKWord","rNonCJKWord","append","lstrip","chars","downcase","upcase","remove_first","remove_last","rstrip","split","strip","strip_newlines","replace_first","replace_last","truncate","truncatewords","words","normalize_whitespace","number_of_words","array_to_sentence_string","connector","stringFilters","AssignTag","MODIFIERS","ForTag","inStr","stream","continueKey","reversed","CaptureTag","tagToken","quoted","CaseTag","elseCount","branchHit","branch","valueToken","CommentTag","RenderTag","parseFilePath","beforeAs","asStr","renderFilePath","childCtx","IncludeTag","withVar","saved","DecrementTag","CycleTag","fingerprint","IfTag","IncrementTag","LayoutTag","BlockTag","blockRender","renderChild","renderCurrent","superBlock","RawTag","TablerowloopDrop","cols","TablerowTag","collectionToken","tablerowloop","UnlessTag","test","BreakTag","ContinueTag","EchoTag","LiquidTag","InlineCommentTag","Liquid","conf","lookupType","renderFileOptions","firstCall","filePath","nargs","stringTemplate","copied","getEndPointWithParams","pathParams","queryParams","queryString","HighlightJs","hljsVuePlugin","selectedLanguage","showSecrets","engine","endPointWithParams","getCodeSample","showKeys","authHeader","bearerHeader","requestHeaders","consoleOperation","languageKey","codeSample","codeSampleWithKeys","getExample","clamp","authUrl","validBody","responseData","selectedOperation","selectedKey","subTitle","validateBody","queryVersionNumber","apimConfig","keyOptions","callingApi","onSubmit","receiveMessage","openLoginWindow","dateOptions","distinct","removePathPrefix","getTotalApiCalls","apiMAnalytics","apiReports","report","apiId","totalCalls","getCallsByTimestamp","getCallsByOperation","getSubscriptionCounts","apiIds","counts","getBlocksCategoryGraph","analytics","blockNames","getBlocksFavoriteGraph","getPageCommentsGraph","lim","p2b","n2b","b2n","n2p","map$1","hex","h1","isShort","hexParse","alpha","hexString","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","rgb","hueValue","rgb2hsl","calln","hsl2rgb","hwb2rgb","hsv2rgb","hue","hueParse","p1","p2","rotate","deg","hslString","names$1","unpack","unpacked","tkeys","nk","names","nameParse","RGB_RE","rgbParse","rgbString","rgb1","rgb2","modHSL","ratio","fromObject","functionParse","Color","weight","w2","w1","isNullOrUndef","isNumberFinite","finiteOrDefault","valueOrDefault","toPercentage","dimension","toDimension","each","loopable","_elementsEqual","a0","a1","ilen","v0","klen","isValidKey","_merger","tval","sval","merge","sources","merger","mergeIf","_mergerIf","keyResolvers","_splitKey","_getKeyResolver","resolveObjectKey","_capitalize","defined","setsEqual","_isClickEvent","PI","TAU","PITAU","INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","almostEquals","epsilon","niceNum","roundedRange","niceRange","fraction","_factorize","sqrt","almostWhole","rounded","_setMinAndMaxByKey","toRadians","degrees","toDegrees","radians","_decimalPlaces","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","angle","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_int16Range","_isBetween","_lookup","_lookupByKey","ti","_rlookupByKey","_filterBetween","arrayEvents","listenArrayEvents","unlistenArrayEvents","stub","_arrayUnique","requestAnimFrame","throttled","argsToUse","ticking","_toLeftRightCenter","_alignStartEnd","_textX","right","rtl","_getStartAndCountOfVisiblePoints","points","animationsDisabled","pointCount","iScale","_parsed","axis","minDefined","maxDefined","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","changed","atEdge","elasticIn","elasticOut","effects","isPatternOrGradient","getHoverColor","numbers","applyAnimationsDefaults","applyLayoutsDefaults","intlCache","formatNumber","tickValue","ticks","notation","maxTick","calculateDelta","logDelta","numDecimal","remain","Ticks","applyScaleDefaults","descriptors","getScope$1","Defaults","_descriptors","_appliers","targetScope","targetName","scopeObject","targetScopeObject","privateName","local","appliers","toFontString","font","_measureText","gc","longest","textWidth","_alignPixel","chart","pixel","devicePixelRatio","halfWidth","clearCanvas","canvas","drawPoint","drawPointLegend","xOffset","yOffset","cornerRadius","xOffsetW","yOffsetW","rotation","radius","rad","_isPointInArea","area","margin","clipArea","unclipArea","_steppedLineTo","flip","midpoint","_bezierCurveTo","setRenderOpts","decorateText","metrics","bottom","yDecoration","drawBackdrop","oldColor","renderText","stroke","addRoundedRectPath","LINE_HEIGHT","FONT_STYLE","toLineHeight","numberOrZero","_readValueToProps","objProps","toTRBL","toTRBLCorners","toPadding","toFont","inputs","_addGrace","minmax","grace","beginAtZero","keepZero","createContext","parentContext","_createResolver","scopes","rootScopes","getTarget","finalRootScopes","_resolve","_cached","_resolveWithPrefixes","getKeysFromAllScopes","storage","_attachContext","subProxy","descriptorDefaults","_resolveWithContext","_scriptable","_indexable","_allKeys","readKey","needsSubResolver","_proxy","_subProxy","_resolveScriptable","_resolveArray","_stack","createSubResolver","isIndexable","resolveFallback","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","EPSILON","getPoint","getValueAxis","indexAxis","splineCurve","firstPoint","middlePoint","afterPoint","d01","d12","s01","s12","fa","monotoneAdjust","deltaK","mK","pointsLen","alphaK","betaK","tauK","squaredMagnitude","pointCurrent","pointAfter","monotoneCompute","valueAxis","pointBefore","iPixel","vPixel","splineCurveMonotone","slopeDelta","capControlPoint","capBezierPoints","inArea","inAreaPrev","inAreaNext","_updateBezierControlPoints","loop","controlPoints","_isDomSupported","_getParentNode","domNode","parseMaxStyle","styleValue","valueInPixels","getComputedStyle","getStyle","getPositionedStyle","useOffsetPos","getCanvasPosition","touches","offsetX","offsetY","getRelativePosition","currentDevicePixelRatio","borderBox","paddings","borders","getContainerSize","maxWidth","maxHeight","containerStyle","containerBorder","containerPadding","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","margins","containerSize","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","supportsEventListenerOptions","passiveSupported","readUsedSize","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","getRightToLeftAdapter","rectX","itemWidth","getLeftToRightAdapter","_itemWidth","getRtlAdapter","overrideTextDirection","restoreTextDirection","propertyFn","normalizeSegment","getSegment","bounds","startBound","endBound","between","_boundSegment","inside","subStart","startIsBefore","endIsBefore","shouldStart","shouldStop","_boundSegments","findStartAndEnd","spanGaps","solidSegments","_computeSegments","segmentOptions","splitByStyles","completeLoop","doSplitByStyles","chartContext","baseStyle","readStyle","datasetIndex","addStyle","styleChanged","Animator","anims","callbacks","numSteps","draw","charts","animator","transparent","interpolators","c0","Animation","cfg","promises","rej","Animations","animationOptions","animatedProps","newOptions","resolveTargetOptions","animations","awaitAll","running","animation","anim","scaleClip","scale","allowedOverflow","defaultClip","toClip","getSortedDatasetIndices","filterVisible","metasets","applyStack","dsIndex","singleMode","otherValue","convertObjectDataToArray","vScale","iAxisKey","vAxisKey","adata","isStacked","stacked","getStackKey","indexScale","valueScale","getUserBounds","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","positive","updateStacks","controller","iAxis","vAxis","itemStacks","visualValues","getFirstScaleId","scales","createDatasetContext","createDataContext","clearStacks","isDirectUpdateMode","cloneIfNotShared","shared","createStack","canStack","DatasetController","dataset","chooseId","xid","yid","rid","iid","vid","scaleID","_data","resetNewElements","stackChanged","oldStacked","scopeKeys","_stacked","isNotInOrderComparedToPrev","singleScale","xAxisKey","yAxisKey","otherScale","otherMin","otherMax","_skip","elements","active","drawActiveElementsOnTop","elementType","sharing","sharedOptions","firstOpts","previouslySharedOptions","includeOptions","numMeta","numData","removed","newCount","getAllScaleValues","visibleMetas","computeMinSampleSize","updateMinAndPrev","computeFitCategoryTraits","ruler","stackCount","thickness","computeFlexCategoryTraits","pixels","percent","parseFloatBar","startValue","endValue","barStart","barEnd","parseArrayOrPrimitive","isFloatBar","barSign","actualBase","borderProps","setBorderSkipped","edge","parseEdge","swap","startEnd","orig","setInflateAmount","inflateAmount","BarController","bars","vpixels","ipixels","dataIndex","currentParsed","iScaleValue","skipNull","barThickness","baseValue","minBarLength","floating","startPixel","endPixel","halfGrid","maxBarThickness","center","stackIndex","rects","getRatioAndOffset","circumference","cutout","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","DoughnutController","pointStyle","legendItem","legend","chartArea","arcs","spacing","maxSize","chartWeight","maxRadius","outerRadius","innerRadius","radiusLength","animationOpts","centerX","centerY","animateScale","arc","metaData","ringWeightOffset","LineController","_dataset","maxGapLength","directUpdate","pointsCount","prevParsed","nullData","border","lastPoint","PolarAreaController","minSize","datasetStartAngle","defaultAngle","abstract","DateAdapterBase","members","adapters","binarySearch","metaset","intersect","_sorted","lookupMethod","evaluateInteractionItems","getDistanceMetricForAxis","useX","useY","deltaX","deltaY","getIntersectItems","useFinalPosition","includeInvisible","getNearestRadialItems","evaluationFunc","getNearestCartesianItems","distanceMetric","minDistance","inRange","distance","getNearestItems","getAxisItems","rangeMethod","intersectsItem","Interaction","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","wrapBoxes","boxes","layoutBoxes","stackWeight","buildStacks","layouts","setLayoutDims","vBoxMaxWidth","hBoxMaxHeight","layout","fullSize","buildLayoutBoxes","centerHorizontal","centerVertical","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","newWidth","newHeight","widthChanged","heightChanged","handleMaxPadding","updatePos","getMargins","marginForPositions","fitBoxes","refitBoxes","refit","same","setBoxDims","placeBoxes","userPadding","layoutItem","minPadding","padding","availableWidth","availableHeight","verticalBoxes","horizontalBoxes","visibleVerticalBoxCount","BasePlatform","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","isNullOrEmpty","initCanvas","renderHeight","renderWidth","displayWidth","displayHeight","eventListenerOptions","addListener","removeListener","fromNativeEvent","nodeListContains","nodeList","createAttachObserver","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","resize","listenDevicePixelRatioChanges","unlistenDevicePixelRatioChanges","createResizeObserver","releaseObserver","createProxyAndListen","DomPlatform","proxies","_detectPlatform","Element$1","final","autoSkip","tickOpts","determinedMaxTicks","determineMaxTicks","ticksLimit","majorIndices","getMajorIndices","numMajorIndices","newTicks","skipMajors","calculateSpacing","avgMajorSpacing","tickLength","maxScale","maxChart","evenMajorSpacing","getEvenSpacing","factors","majorStart","majorEnd","reverseAlign","offsetFromEdge","getTicksLimit","ticksLength","maxTicksLimit","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","garbageCollect","caches","gcLen","getTickMarkLength","getTitleHeight","createScaleContext","createTickContext","tick","titleAlign","titleArgs","titleX","titleY","positionAxisID","Scale","Element","_userMin","_userMax","_suggestedMin","_suggestedMax","metas","sampleSize","samplingEnabled","reversePixels","numTicks","minRotation","maxRotation","labelRotation","tickWidth","maxLabelDiagonal","labelSizes","maxLabelWidth","maxLabelHeight","titleOpts","gridOpts","display","isHorizontal","titleHeight","widest","highest","tickPadding","angleRadians","cos","sin","labelHeight","labelWidth","isRotated","labelsBelowTicks","offsetLeft","offsetRight","paddingLeft","paddingRight","paddingTop","paddingBottom","widths","heights","widestLabelSize","highestLabelSize","jlen","tickFont","fontString","lineHeight","nestedLabel","valueAt","optionTicks","rot","grid","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","optsAtIndex","optsAtIndexBorder","lineWidth","lineColor","borderDash","borderDashOffset","tickColor","tickBorderDash","tickBorderDashOffset","crossAlign","mirror","tickAndPadding","hTickAndPadding","textAlign","lineCount","textOffset","textBaseline","halfCount","strokeColor","strokeWidth","tickTextAlign","backdrop","labelPadding","backgroundColor","drawLine","lastLineWidth","renderTextOptions","tz","gz","bz","axisID","fontSize","TypedRegistry","override","parentScope","isIChartComponent","registerDefaults","itemDefaults","routeDefaults","propertyParts","sourceName","sourceScope","Registry","typedRegistry","reg","itemReg","camelMethod","PluginService","all","allPlugins","createDescriptors","previousDescriptors","localIds","getOpts","pluginOpts","getIndexAxis","datasetDefaults","getAxisFromDefaultScaleID","getDefaultScaleIDFromAxis","idMatchesAxis","axisFromPosition","determineAxis","scaleOptions","getAxisFromDataset","retrieveAxisFromDatasets","boundDs","mergeScaleConfig","chartDefaults","configScales","chartIndexAxis","scaleConf","defaultId","defaultScaleOptions","defaultID","initOptions","initData","initConfig","keyCache","keysCached","cachedKeys","addIfFound","Config","datasetType","mainScope","resetCache","_scopeCache","keyLists","subPrefixes","getResolver","needContext","subResolver","resolverCache","hasFunction","isScriptable","scriptable","indexable","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","onAnimationsComplete","onAnimationProgress","getCanvas","instances","getChart","moveNumericKeys","intKey","determineLastEvent","lastEvent","inChartArea","isClick","getSizeForArea","getDatasetArea","Chart$1","invalidatePlugins","userConfig","initialCanvas","existingChart","maintainAspectRatio","_aspectRatio","newRatio","scalesOptions","axisOptions","scaleOpts","isRadial","scaleType","scaleClass","hasUpdated","datasets","newControllers","ControllerClass","datasetElementType","dataElementType","animsDisabled","_active","_lastEvent","existingEvents","newEvents","_hiddenIndices","changes","_dataChanges","datasetCount","makeSet","changeSet","noArea","layers","clip","useClip","visible","platform","_add","_remove","attached","activeElements","lastActive","pluginId","replay","hoverOptions","eventFilter","Chart","lineTo","getLineMethod","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","pathSegment","lineMethod","fastPathSegment","avgX","countX","prevX","lastY","pointIndex","drawX","truncX","_getSegmentMethod","_getInterpolationMethod","strokePathWithCache","strokePathDirect","segmentMethod","usePath2D","LineElement","_interpolate","interpolated","inRange$1","PointElement","mouseX","mouseY","borderWidth","getBarBounds","bar","half","skipOrLimit","parseBorderWidth","maxW","maxH","parseBorderRadius","enableBorderRadius","maxR","enableBorder","boundingRects","skipX","skipY","hasRadius","addNormalRectPath","inflateRect","refRect","BarElement","borderColor","addRectPath","BORDER_COLORS","BACKGROUND_COLORS","getBorderColor","getBackgroundColor","colorizeDefaultDataset","colorizeDoughnutDataset","colorizePolarAreaDataset","getColorizer","containsColorsDefinitions","containsColorsDefinition","plugin_colors","_args","chartOptions","colorizer","getBoxSize","labelOpts","boxHeight","boxWidth","itemsEqual","Legend","legendItems","labelFont","itemHeight","hitboxes","lineWidths","totalHeight","_itemHeight","columnSizes","heightLimit","totalWidth","currentColWidth","currentColHeight","calculateItemSize","rtlHelper","hitbox","defaultColor","halfFontSize","drawLegendBox","drawOptions","yBoxTop","xBoxLeft","borderRadius","fillText","realX","fontLineHeight","calculateLegendItemHeight","titleFont","titlePadding","topPaddingPlusHalfFontSize","hitBox","lh","isListened","hoveredItem","sameItem","calculateItemWidth","calculateItemHeight","legendItemText","plugin_legend","ci","usePointStyle","useBorderRadius","Title","textSize","fontOpts","createTitle","plugin_title","titleBlock","positioners","xSet","eventPosition","nearestElement","pushOrConcat","toPush","splitNewlines","createTooltipItem","getTooltipSize","tooltip","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","bodyLineHeight","widthPadding","maxLineWidth","determineYAlign","doesNotFitWithAlign","xAlign","caret","determineXAlign","yAlign","chartWidth","determineAlignment","alignX","alignY","paddingAndSize","getBackgroundPoint","alignment","caretSize","caretPadding","topRight","bottomLeft","bottomRight","getAlignedX","getBeforeAfterBodyLines","createTooltipContext","tooltipItems","overrideCallbacks","defaultCallbacks","labelCount","tooltipItem","invokeCallbackWithFallback","Tooltip","beforeTitle","afterTitle","bodyItems","scoped","beforeFooter","afterFooter","labelColors","labelPointStyles","labelTextColors","positionAndSize","backgroundPoint","tooltipPoint","caretPosition","ptX","ptY","x3","y3","titleSpacing","labelColor","labelPointStyle","colorX","rtlColorX","yOffSet","colorY","outerX","innerX","bodySpacing","bodyAlign","displayColors","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","tooltipSize","animX","animY","opacity","hasTooltipContent","positionChanged","caretX","caretY","plugin_tooltip","addIfString","addedLabels","findOrAddLabel","_getLabelForValue","CategoryScale","added","generateTicks$1","generationOptions","dataRange","precision","maxTicks","maxDigits","includeBounds","unit","maxSpaces","rmin","rmax","countDefined","minSpacing","niceMin","niceMax","numSpaces","decimalPlaces","relativeLabelSize","LinearScaleBase","setMax","minSign","maxSign","stepSize","numericGeneratorOptions","LinearScale","INTERVALS","UNITS","sorter","adapter","isoWeekday","determineUnitForAutoTicks","minUnit","capacity","interval","determineUnitForFormatting","determineMajorUnit","addTick","timestamps","setMajorTicks","majorUnit","ticksFromTimestamps","TimeScale","_applyBounds","timeOpts","weekday","hasWeekday","formats","fmt","minorFormat","majorFormat","offsets","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","displayFormats","exampleLabel","prevSource","nextSource","prevTarget","TimeSeriesScale","CommonProps","A11yProps","Props","compatProps","toRawIfProxy","cloneProxy","nextOptions","setLabels","currentData","nextLabels","setDatasets","nextDatasets","datasetIdKey","addedDatasets","nextDataset","currentDataset","cloneData","nextData","canvasRef","chartRef","renderChart","clonedData","proxiedData","destroyChart","param1","nextOptionsProxy","nextDataProxy","prevOptionsProxy","prevDataProxy","shouldUpdate","prevOptions","prevLabels","prevDatasets","createTypedChart","registerables","reforwardRef","Bar","Line","ChartJS","Colors","getOffsetDateAsString","setDateOffset","apimAnalytics","applyDateInterval","showDateModal","useAnalytics","getViewCountAnalytics","useContentAnalytics","getContentAnalytics","fromDate","analyticsData","userCount","pageViewCount","loginCount","newsViewCount","commentViewCount","blockViewCount","asPercentage","scalarData","getTruncatedLabel","loggedOnUser","userToDelete","isMembershipRequest","showDeleteUserModal","addUserInput","addUserError","removeUserError","emailValid","displayDeleteUserModal","isRequest","addUser","removeUser","filterUsers","approveUserToOrganization","throttleFireOnly","newRunRequested","outerContainer","innerContainer","ensureArray","innerContainerActualOffset","outerContainerAbsPos","innerContainerAbsPos","getAbsoluteRect","scrollX","scrollY","getRelativeRect","targetAbsPos","getMinRelative","elAbsPos","distanceFromOuterContainerEdge","setVisibilityClipping","wantedCenterX","wantedCenterY","visiblePartElements","visiblePartRect","wantedTopOffset","maxTopOffset","wantedLeftOffset","maxLeftOffset","markerDivs","addMarker","offsetFromOuterContainerTop","offsetFromOuterContainerLeft","lastVisibleLeft","markerWidth","lastVisibleTop","markerHeight","markerDiv","setMarkers","markers","markerElements","updateUi","addContentChangedObserver","loadMarker","parentContainer","isNorwegian","titleId","fileurl","getSource","primaryTagGroupOptions","editing","getLocaleKey","textPropPrefix","tagEditors","changeList","hasChanges","removedTags","hasChange","tagToSave","tagToDelete","quickEdit","removeTag","tagGroupEditors","removedTagGroups","tagGroupToSave","newTagGroup","tagGroupToDelete","minId","removeTagGroup","contactFormUrl","submitContactForm","contactFieldKeys","topicOptions","topic","BlockView","BlockContentEditorView","SocialView","SocialThreadView","SocialPageView","AboutRichtextView","MarkdownDocumentationView","ModeratorView","AdminView","BlockAdminView","MyDocumentsView","BlockDetailsEditorView","BlockVersionsView","UserAdministrationView","RouteAdministrationView","CategoryAdministrationView","TagsEditorView","TagGroupEditorView","AnalyticsView","ViewCountAnalyticsview","ApiMAnalyticsView","ContentAnalyticsView","ProfileView","AccountView","FavouriteView","SubscriptionsView","ApimProductsView","NotificationsView","ApiConsoleView","NewsView","MyOrganizationsView","OrganizationAdministrationView","SuggestionsListView","SuggestionEditView","SuggestionDetailsView","MasterDataEditorView","BreadCrumbAdminView","AlzMySystemsView","AlzOrderView","ContactFormView","setupRouter","optionalParam","TokenReceiver","finalRoutes","missingRoutes","LoadingView","_to","savedPosition","abilities","App","abilitiesPlugin","localePromise","fallbackLocalePromises","routerPromise"],"ignoreList":[0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,98,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,275,344,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,431,433,435,437,439,441,443,445,447,448,449,451,452,453,462,463,464,465],"sources":["../../../frontend/node_modules/@vue/shared/dist/shared.esm-bundler.js","../../../frontend/node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js","../../../frontend/node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js","../../../frontend/node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js","../../../frontend/node_modules/@ucast/core/dist/es6m/index.mjs","../../../frontend/node_modules/@ucast/mongo/dist/es6m/index.mjs","../../../frontend/node_modules/@ucast/js/dist/es6m/index.mjs","../../../frontend/node_modules/@ucast/mongo2js/dist/es6m/index.mjs","../../../frontend/node_modules/@casl/ability/dist/es6m/index.mjs","../../../frontend/node_modules/@casl/vue/dist/es6m/index.mjs","../../../frontend/node_modules/vue-router/dist/vue-router.mjs","../../../frontend/src/assets/sykehuspartner_logo_neg.svg","../../../frontend/node_modules/@intlify/shared/dist/shared.mjs","../../../frontend/node_modules/@intlify/message-compiler/dist/message-compiler.esm-browser.js","../../../frontend/node_modules/@intlify/core-base/dist/core-base.mjs","../../../frontend/node_modules/vue-i18n/dist/vue-i18n.mjs","../../../frontend/src/components/FooterBar.vue","../../../frontend/src/assets/gnist_logo.svg","../../../frontend/src/components/MaterialIcon.vue","../../../frontend/src/config.ts","../../../frontend/src/utilities/sleep.ts","../../../frontend/src/api/composable.ts","../../../frontend/src/api/menu.ts","../../../frontend/src/utilities/routeUtils.ts","../../../frontend/src/utilities/translateInteractiveImage.ts","../../../frontend/src/utilities/translateLayoutItem.ts","../../../frontend/src/i18n.ts","../../../frontend/src/api/types.ts","../../../frontend/src/utilities/throwErrorPageTrigger.ts","../../../frontend/src/api/auth.ts","../../../frontend/src/components/CurrentUser.vue","../../../frontend/src/api/commentoTypes.ts","../../../frontend/src/enums/SocialPageType.ts","../../../frontend/src/api/status.ts","../../../frontend/src/components/NotificationToast.vue","../../../frontend/src/abilities.ts","../../../frontend/node_modules/@tanstack/virtual-core/dist/esm/utils.js","../../../frontend/node_modules/@tanstack/virtual-core/dist/esm/index.js","../../../frontend/node_modules/@tanstack/vue-virtual/dist/esm/index.js","../../../frontend/node_modules/@headlessui/vue/dist/hooks/use-controllable.js","../../../frontend/node_modules/@headlessui/vue/dist/utils/micro-task.js","../../../frontend/node_modules/@headlessui/vue/dist/utils/disposables.js","../../../frontend/node_modules/@headlessui/vue/dist/hooks/use-disposables.js","../../../frontend/node_modules/@headlessui/vue/dist/hooks/use-frame-debounce.js","../../../frontend/node_modules/@headlessui/vue/dist/hooks/use-id.js","../../../frontend/node_modules/@headlessui/vue/dist/utils/dom.js","../../../frontend/node_modules/@headlessui/vue/dist/utils/match.js","../../../frontend/node_modules/@headlessui/vue/dist/utils/env.js","../../../frontend/node_modules/@headlessui/vue/dist/utils/owner.js","../../../frontend/node_modules/@headlessui/vue/dist/utils/focus-management.js","../../../frontend/node_modules/@headlessui/vue/dist/utils/platform.js","../../../frontend/node_modules/@headlessui/vue/dist/hooks/use-document-event.js","../../../frontend/node_modules/@headlessui/vue/dist/hooks/use-window-event.js","../../../frontend/node_modules/@headlessui/vue/dist/hooks/use-outside-click.js","../../../frontend/node_modules/@headlessui/vue/dist/hooks/use-resolve-button-type.js","../../../frontend/node_modules/@headlessui/vue/dist/hooks/use-tracked-pointer.js","../../../frontend/node_modules/@headlessui/vue/dist/hooks/use-tree-walker.js","../../../frontend/node_modules/@headlessui/vue/dist/utils/render.js","../../../frontend/node_modules/@headlessui/vue/dist/internal/hidden.js","../../../frontend/node_modules/@headlessui/vue/dist/internal/open-closed.js","../../../frontend/node_modules/@headlessui/vue/dist/keyboard.js","../../../frontend/node_modules/@headlessui/vue/dist/mouse.js","../../../frontend/node_modules/@headlessui/vue/dist/utils/document-ready.js","../../../frontend/node_modules/@headlessui/vue/dist/utils/active-element-history.js","../../../frontend/node_modules/@headlessui/vue/dist/utils/calculate-active-index.js","../../../frontend/node_modules/@headlessui/vue/dist/utils/form.js","../../../frontend/node_modules/@headlessui/vue/dist/components/combobox/combobox.js","../../../frontend/node_modules/@headlessui/vue/dist/hooks/use-event-listener.js","../../../frontend/node_modules/@headlessui/vue/dist/hooks/use-tab-direction.js","../../../frontend/node_modules/@headlessui/vue/dist/components/focus-trap/focus-trap.js","../../../frontend/node_modules/@headlessui/vue/dist/hooks/use-store.js","../../../frontend/node_modules/@headlessui/vue/dist/utils/store.js","../../../frontend/node_modules/@headlessui/vue/dist/hooks/document-overflow/adjust-scrollbar-padding.js","../../../frontend/node_modules/@headlessui/vue/dist/hooks/document-overflow/handle-ios-locking.js","../../../frontend/node_modules/@headlessui/vue/dist/hooks/document-overflow/prevent-scroll.js","../../../frontend/node_modules/@headlessui/vue/dist/hooks/document-overflow/overflow-store.js","../../../frontend/node_modules/@headlessui/vue/dist/hooks/document-overflow/use-document-overflow.js","../../../frontend/node_modules/@headlessui/vue/dist/hooks/use-inert.js","../../../frontend/node_modules/@headlessui/vue/dist/hooks/use-root-containers.js","../../../frontend/node_modules/@headlessui/vue/dist/internal/portal-force-root.js","../../../frontend/node_modules/@headlessui/vue/dist/internal/stack-context.js","../../../frontend/node_modules/@headlessui/vue/dist/components/description/description.js","../../../frontend/node_modules/@headlessui/vue/dist/components/portal/portal.js","../../../frontend/node_modules/@headlessui/vue/dist/components/dialog/dialog.js","../../../frontend/node_modules/@headlessui/vue/dist/components/disclosure/disclosure.js","../../../frontend/node_modules/@headlessui/vue/dist/utils/get-text-value.js","../../../frontend/node_modules/@headlessui/vue/dist/hooks/use-text-value.js","../../../frontend/node_modules/@headlessui/vue/dist/components/listbox/listbox.js","../../../frontend/node_modules/@headlessui/vue/dist/components/menu/menu.js","../../../frontend/node_modules/@headlessui/vue/dist/utils/once.js","../../../frontend/node_modules/@headlessui/vue/dist/components/transitions/utils/transition.js","../../../frontend/node_modules/@headlessui/vue/dist/components/transitions/transition.js","../../../frontend/src/components/DropdownMenu.vue","../../../frontend/src/utilities/useResizeListener.ts","../../../frontend/src/components/ButtonComponent.vue","../../../frontend/src/components/BlockListConnectionHelper.ts","../../../frontend/src/components/SearchBar.vue","../../../frontend/src/components/HeaderBar.vue","../../../frontend/node_modules/slugify/slugify.js","../../../frontend/src/components/ErrorMessagePopup.vue","../../../frontend/src/api/user.ts","../../../frontend/src/components/ModalComponent.vue","../../../frontend/src/components/NotificationPrompt.vue","../../../frontend/src/views/Errors/NotFoundView.vue","../../../frontend/src/views/Errors/UnauthorizedView.vue","../../../frontend/src/views/Errors/ForbiddenView.vue","../../../frontend/src/router/routeUtils.ts","../../../frontend/src/utilities/ExtendedError.ts","../../../frontend/src/App.vue","../../../frontend/src/components/PageBanner.vue","../../../frontend/src/components/SubNav.vue","../../../frontend/src/views/ProfileView.vue","../../../frontend/src/api/favorite.ts","../../../frontend/src/components/BlockNote.vue","../../../frontend/src/views/FavouriteView.vue","../../../frontend/src/api/commentoClient.ts","../../../frontend/src/assets/images/meeting.svg","../../../frontend/src/api/suggestion.ts","../../../frontend/src/views/SocialView.vue","../../../frontend/node_modules/date-fns/toDate.mjs","../../../frontend/node_modules/date-fns/constructFrom.mjs","../../../frontend/node_modules/date-fns/addMonths.mjs","../../../frontend/node_modules/date-fns/constants.mjs","../../../frontend/node_modules/date-fns/_lib/defaultOptions.mjs","../../../frontend/node_modules/date-fns/startOfWeek.mjs","../../../frontend/node_modules/date-fns/startOfISOWeek.mjs","../../../frontend/node_modules/date-fns/getISOWeekYear.mjs","../../../frontend/node_modules/date-fns/startOfDay.mjs","../../../frontend/node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.mjs","../../../frontend/node_modules/date-fns/differenceInCalendarDays.mjs","../../../frontend/node_modules/date-fns/startOfISOWeekYear.mjs","../../../frontend/node_modules/date-fns/isDate.mjs","../../../frontend/node_modules/date-fns/isValid.mjs","../../../frontend/node_modules/date-fns/startOfYear.mjs","../../../frontend/node_modules/date-fns/locale/en-US/_lib/formatDistance.mjs","../../../frontend/node_modules/date-fns/locale/_lib/buildFormatLongFn.mjs","../../../frontend/node_modules/date-fns/locale/en-US/_lib/formatLong.mjs","../../../frontend/node_modules/date-fns/locale/en-US/_lib/formatRelative.mjs","../../../frontend/node_modules/date-fns/locale/_lib/buildLocalizeFn.mjs","../../../frontend/node_modules/date-fns/locale/en-US/_lib/localize.mjs","../../../frontend/node_modules/date-fns/locale/_lib/buildMatchFn.mjs","../../../frontend/node_modules/date-fns/locale/_lib/buildMatchPatternFn.mjs","../../../frontend/node_modules/date-fns/locale/en-US/_lib/match.mjs","../../../frontend/node_modules/date-fns/locale/en-US.mjs","../../../frontend/node_modules/date-fns/getDayOfYear.mjs","../../../frontend/node_modules/date-fns/getISOWeek.mjs","../../../frontend/node_modules/date-fns/getWeekYear.mjs","../../../frontend/node_modules/date-fns/startOfWeekYear.mjs","../../../frontend/node_modules/date-fns/getWeek.mjs","../../../frontend/node_modules/date-fns/_lib/addLeadingZeros.mjs","../../../frontend/node_modules/date-fns/_lib/format/lightFormatters.mjs","../../../frontend/node_modules/date-fns/_lib/format/formatters.mjs","../../../frontend/node_modules/date-fns/_lib/format/longFormatters.mjs","../../../frontend/node_modules/date-fns/_lib/protectedTokens.mjs","../../../frontend/node_modules/date-fns/format.mjs","../../../frontend/node_modules/date-fns/parseISO.mjs","../../../frontend/src/components/discussion/util.ts","../../../frontend/src/views/SocialThreadView.vue","../../../frontend/src/components/IconLink.vue","../../../frontend/node_modules/mdurl/lib/decode.mjs","../../../frontend/node_modules/mdurl/lib/encode.mjs","../../../frontend/node_modules/mdurl/lib/format.mjs","../../../frontend/node_modules/mdurl/lib/parse.mjs","../../../frontend/node_modules/uc.micro/properties/Any/regex.mjs","../../../frontend/node_modules/uc.micro/categories/Cc/regex.mjs","../../../frontend/node_modules/uc.micro/categories/Cf/regex.mjs","../../../frontend/node_modules/uc.micro/categories/P/regex.mjs","../../../frontend/node_modules/uc.micro/categories/S/regex.mjs","../../../frontend/node_modules/uc.micro/categories/Z/regex.mjs","../../../frontend/node_modules/entities/lib/esm/generated/decode-data-html.js","../../../frontend/node_modules/entities/lib/esm/generated/decode-data-xml.js","../../../frontend/node_modules/entities/lib/esm/decode_codepoint.js","../../../frontend/node_modules/entities/lib/esm/decode.js","../../../frontend/node_modules/markdown-it/lib/common/utils.mjs","../../../frontend/node_modules/markdown-it/lib/helpers/parse_link_label.mjs","../../../frontend/node_modules/markdown-it/lib/helpers/parse_link_destination.mjs","../../../frontend/node_modules/markdown-it/lib/helpers/parse_link_title.mjs","../../../frontend/node_modules/markdown-it/lib/renderer.mjs","../../../frontend/node_modules/markdown-it/lib/ruler.mjs","../../../frontend/node_modules/markdown-it/lib/token.mjs","../../../frontend/node_modules/markdown-it/lib/rules_core/state_core.mjs","../../../frontend/node_modules/markdown-it/lib/rules_core/normalize.mjs","../../../frontend/node_modules/markdown-it/lib/rules_core/block.mjs","../../../frontend/node_modules/markdown-it/lib/rules_core/inline.mjs","../../../frontend/node_modules/markdown-it/lib/rules_core/linkify.mjs","../../../frontend/node_modules/markdown-it/lib/rules_core/replacements.mjs","../../../frontend/node_modules/markdown-it/lib/rules_core/smartquotes.mjs","../../../frontend/node_modules/markdown-it/lib/rules_core/text_join.mjs","../../../frontend/node_modules/markdown-it/lib/parser_core.mjs","../../../frontend/node_modules/markdown-it/lib/rules_block/state_block.mjs","../../../frontend/node_modules/markdown-it/lib/rules_block/table.mjs","../../../frontend/node_modules/markdown-it/lib/rules_block/code.mjs","../../../frontend/node_modules/markdown-it/lib/rules_block/fence.mjs","../../../frontend/node_modules/markdown-it/lib/rules_block/blockquote.mjs","../../../frontend/node_modules/markdown-it/lib/rules_block/hr.mjs","../../../frontend/node_modules/markdown-it/lib/rules_block/list.mjs","../../../frontend/node_modules/markdown-it/lib/rules_block/reference.mjs","../../../frontend/node_modules/markdown-it/lib/common/html_blocks.mjs","../../../frontend/node_modules/markdown-it/lib/common/html_re.mjs","../../../frontend/node_modules/markdown-it/lib/rules_block/html_block.mjs","../../../frontend/node_modules/markdown-it/lib/rules_block/heading.mjs","../../../frontend/node_modules/markdown-it/lib/rules_block/lheading.mjs","../../../frontend/node_modules/markdown-it/lib/rules_block/paragraph.mjs","../../../frontend/node_modules/markdown-it/lib/parser_block.mjs","../../../frontend/node_modules/markdown-it/lib/rules_inline/state_inline.mjs","../../../frontend/node_modules/markdown-it/lib/rules_inline/text.mjs","../../../frontend/node_modules/markdown-it/lib/rules_inline/linkify.mjs","../../../frontend/node_modules/markdown-it/lib/rules_inline/newline.mjs","../../../frontend/node_modules/markdown-it/lib/rules_inline/escape.mjs","../../../frontend/node_modules/markdown-it/lib/rules_inline/backticks.mjs","../../../frontend/node_modules/markdown-it/lib/rules_inline/strikethrough.mjs","../../../frontend/node_modules/markdown-it/lib/rules_inline/emphasis.mjs","../../../frontend/node_modules/markdown-it/lib/rules_inline/link.mjs","../../../frontend/node_modules/markdown-it/lib/rules_inline/image.mjs","../../../frontend/node_modules/markdown-it/lib/rules_inline/autolink.mjs","../../../frontend/node_modules/markdown-it/lib/rules_inline/html_inline.mjs","../../../frontend/node_modules/markdown-it/lib/rules_inline/entity.mjs","../../../frontend/node_modules/markdown-it/lib/rules_inline/balance_pairs.mjs","../../../frontend/node_modules/markdown-it/lib/rules_inline/fragments_join.mjs","../../../frontend/node_modules/markdown-it/lib/parser_inline.mjs","../../../frontend/node_modules/linkify-it/lib/re.mjs","../../../frontend/node_modules/linkify-it/index.mjs","../../../frontend/node_modules/punycode.js/punycode.es6.js","../../../frontend/node_modules/markdown-it/lib/presets/default.mjs","../../../frontend/node_modules/markdown-it/lib/presets/zero.mjs","../../../frontend/node_modules/markdown-it/lib/presets/commonmark.mjs","../../../frontend/node_modules/markdown-it/lib/index.mjs","../../../frontend/node_modules/markdown-it-anchor/dist/markdownItAnchor.mjs","../../../frontend/node_modules/@iktakahiro/markdown-it-br/lib/index.js","../../../frontend/node_modules/highlight.js/lib/core.js","../../../frontend/node_modules/markdown-it-container/index.mjs","../../../frontend/src/api/blob.ts","../../../frontend/src/utilities/markdown/utilities.ts","../../../frontend/src/utilities/markdown/GnistMarkdownExtension.ts","../../../frontend/src/utilities/markdown/MarkdownIt.ts","../../../frontend/src/components/OptionalDiv.vue","../../../frontend/src/components/block/MarkdownRenderer.vue","../../../frontend/src/components/forms/InputLabel.vue","../../../frontend/src/components/forms/InputText.vue","../../../frontend/src/utilities/formatDate.ts","../../../frontend/src/utilities/order.ts","../../../frontend/src/components/LoadingSpinner.vue","../../../frontend/src/components/TableComponent.vue","../../../frontend/src/components/CommentAssessmentOverview.vue","../../../frontend/src/components/SimpleTabSelector.vue","../../../frontend/src/views/ModeratorView.vue","../../../frontend/src/api/blocks.ts","../../../frontend/src/components/discussion/MarkdownHelp.vue","../../../frontend/src/components/discussion/WriteComment.vue","../../../frontend/src/components/RoleBadge.vue","../../../frontend/src/utilities/firstParam.ts","../../../frontend/src/components/discussion/CommentCard.vue","../../../frontend/src/components/discussion/CommentCommenter.vue","../../../frontend/src/components/discussion/CommentSortPolicy.vue","../../../frontend/src/components/discussion/DiscussionBoard.vue","../../../frontend/src/utilities/useWaitForObservedElement.ts","../../../frontend/src/utilities/useScrollToIdWhenPresent.ts","../../../frontend/src/views/SocialPageView.vue","../../../frontend/src/views/AnalyticsView.vue","../../../frontend/src/components/forms/InputDropdown.vue","../../../frontend/src/utilities/deepClone.ts","../../../frontend/src/utilities/blockValueEquals.ts","../../../frontend/src/utilities/useInternalState.ts","../../../frontend/src/components/forms/InputImage.vue","../../../frontend/src/utilities/arrayEquals.ts","../../../frontend/src/utilities/useStepScrolling.ts","../../../frontend/src/components/forms/InputPicker.vue","../../../frontend/src/components/forms/InputBlockPicker.vue","../../../frontend/src/components/InputLinkBase.vue","../../../frontend/src/components/forms/InputLink.vue","../../../frontend/src/components/forms/InputCheckbox.vue","../../../frontend/src/api/organization.ts","../../../frontend/src/utilities/useValidationTracking.ts","../../../frontend/src/components/EditOrganizationComponent.vue","../../../frontend/src/views/MyOrganizationsView.vue","../../../frontend/node_modules/vue3-shimmer/dist/vue3-shimmer.esm.js","../../../frontend/src/components/TagRenderer.vue","../../../frontend/src/utilities/getSuggestionStatus.ts","../../../frontend/src/components/SuggestionStatusBadge.vue","../../../frontend/src/api/tags.ts","../../../frontend/src/components/forms/InputTagPicker.vue","../../../frontend/src/views/SuggestionsListView.vue","../../../frontend/src/enums/VoteDirection.ts","../../../frontend/src/views/SuggestionDetailsView.vue","../../../frontend/src/utilities/debugUtils.ts","../../../frontend/src/utilities/markdown/useStickyToolbar.ts","../../../frontend/src/components/forms/InputMarkdown.vue","../../../frontend/src/api/versions.ts","../../../frontend/src/components/admin/VersionCopy.vue","../../../frontend/src/views/SuggestionEditView.vue","../../../frontend/src/components/EditSimpleLookupValue.vue","../../../frontend/src/api/masterdata.ts","../../../frontend/src/utilities/mapValueList.ts","../../../frontend/src/api/field_labels.ts","../../../frontend/src/utilities/groupBy.ts","../../../frontend/src/components/EditFieldLabel.vue","../../../frontend/src/components/EditCustomText.vue","../../../frontend/src/views/MasterDataEditorView.vue","../../../frontend/src/api/github.ts","../../../frontend/src/components/AdvancedFieldset.vue","../../../frontend/src/components/forms/InputDate.vue","../../../frontend/src/components/AlzBatProductEditor.vue","../../../frontend/src/views/AlzOrderView.vue","../../../frontend/src/views/AlzMySystemsView.vue","../../../frontend/src/utilities/useFeatureToggle.ts","../../../frontend/src/views/AccountView.vue","../../../frontend/src/temp/constants/knownHttpHeaders.ts","../../../frontend/src/temp/constants/knownMimeTypes.ts","../../../frontend/src/temp/constants/constants.ts","../../../frontend/src/api/apiM.ts","../../../frontend/src/components/SubscriptionKey.vue","../../../frontend/src/views/SubscriptionsView.vue","../../../frontend/src/views/ApimProductsView.vue","../../../frontend/src/api/news.ts","../../../frontend/src/components/EditNewsCard.vue","../../../frontend/src/utilities/useImageClick.ts","../../../frontend/src/components/NewsCard.vue","../../../frontend/src/components/NewsArticle.vue","../../../frontend/src/assets/images/news.svg","../../../frontend/src/views/NewsView.vue","../../../frontend/src/views/NotificationsView.vue","../../../frontend/src/api/category.ts","../../../frontend/src/components/OptionalRouterLink.vue","../../../frontend/src/components/block/BlockPageBanner.vue","../../../frontend/src/components/block/ImageRenderer.vue","../../../frontend/src/components/BlockStep.vue","../../../frontend/src/components/BlockSteps.vue","../../../frontend/src/utilities/dragUtils.ts","../../../frontend/src/components/block/InteractiveImageVisualBoxRenderer.vue","../../../frontend/src/components/block/InteractiveImageRenderer.vue","../../../frontend/src/utilities/idEncode.ts","../../../frontend/src/components/BlockContentTab.vue","../../../frontend/src/utilities/useCssReorder.ts","../../../frontend/src/components/JsonCodeBlock.vue","../../../frontend/src/components/ApimSchemaViewer.vue","../../../frontend/src/components/ApiDataRepresentation.vue","../../../frontend/src/utilities/computeEndpoint.ts","../../../frontend/src/views/ApiParameterList.vue","../../../frontend/src/components/ApiOperationDetails.vue","../../../frontend/src/components/block/ApiDetails.vue","../../../frontend/src/components/TagList.vue","../../../frontend/src/components/block/LayoutContentRenderer.vue","../../../frontend/src/components/block/LayoutRenderer.vue","../../../frontend/src/components/block/BlockRenderer.vue","../../../frontend/node_modules/vue-scrollto/vue-scrollto.js","../../../frontend/src/components/block/BlockTocItem.vue","../../../frontend/src/components/block/BlockToc.vue","../../../frontend/src/components/block/templates/ApiPage.vue","../../../frontend/src/components/TagListRenderer.vue","../../../frontend/src/components/block/templates/BlockPage.vue","../../../frontend/src/components/block/templates/FullPage.vue","../../../frontend/src/components/block/templates/ProductCard.vue","../../../frontend/src/components/TagListGroup.vue","../../../frontend/src/components/block/templates/ProductPage.vue","../../../frontend/src/components/BlockStatusBar.vue","../../../frontend/src/components/block/templates/SearchCard.vue","../../../frontend/src/components/block/templates/SupplierPage.vue","../../../frontend/src/renderTemplates.ts","../../../frontend/src/components/BlockListItem.vue","../../../frontend/src/utilities/useAudienceTargeting.ts","../../../frontend/src/components/BlockList.vue","../../../frontend/src/views/AdminView.vue","../../../frontend/src/components/DocumentsOverview.vue","../../../frontend/src/views/BlockAdminView.vue","../../../frontend/src/views/MyDocumentsView.vue","../../../frontend/src/components/admin/ApimEditor.vue","../../../frontend/src/components/forms/InputTagDropdown.vue","../../../frontend/src/utilities/useRefreshable.ts","../../../frontend/src/utilities/localeValueEqual.ts","../../../frontend/src/components/SchemaEditor.vue","../../../frontend/src/api/breadcrumbs.ts","../../../frontend/src/components/BreadCrumbTree.vue","../../../frontend/src/components/admin/DetailsEditor.vue","../../../frontend/src/views/BlockDetailsEditorView.vue","../../../frontend/node_modules/semver/internal/constants.js","../../../frontend/node_modules/semver/internal/debug.js","../../../frontend/node_modules/semver/internal/re.js","../../../frontend/node_modules/semver/internal/parse-options.js","../../../frontend/node_modules/semver/internal/identifiers.js","../../../frontend/node_modules/semver/classes/semver.js","../../../frontend/node_modules/semver/functions/parse.js","../../../frontend/node_modules/semver/functions/valid.js","../../../frontend/node_modules/semver/functions/clean.js","../../../frontend/node_modules/semver/functions/inc.js","../../../frontend/node_modules/semver/functions/diff.js","../../../frontend/node_modules/semver/functions/major.js","../../../frontend/node_modules/semver/functions/minor.js","../../../frontend/node_modules/semver/functions/patch.js","../../../frontend/node_modules/semver/functions/prerelease.js","../../../frontend/node_modules/semver/functions/compare.js","../../../frontend/node_modules/semver/functions/rcompare.js","../../../frontend/node_modules/semver/functions/compare-loose.js","../../../frontend/node_modules/semver/functions/compare-build.js","../../../frontend/node_modules/semver/functions/sort.js","../../../frontend/node_modules/semver/functions/rsort.js","../../../frontend/node_modules/semver/functions/gt.js","../../../frontend/node_modules/semver/functions/lt.js","../../../frontend/node_modules/semver/functions/eq.js","../../../frontend/node_modules/semver/functions/neq.js","../../../frontend/node_modules/semver/functions/gte.js","../../../frontend/node_modules/semver/functions/lte.js","../../../frontend/node_modules/semver/functions/cmp.js","../../../frontend/node_modules/semver/functions/coerce.js","../../../frontend/node_modules/semver/internal/lrucache.js","../../../frontend/node_modules/semver/classes/range.js","../../../frontend/node_modules/semver/classes/comparator.js","../../../frontend/node_modules/semver/functions/satisfies.js","../../../frontend/node_modules/semver/ranges/to-comparators.js","../../../frontend/node_modules/semver/ranges/max-satisfying.js","../../../frontend/node_modules/semver/ranges/min-satisfying.js","../../../frontend/node_modules/semver/ranges/min-version.js","../../../frontend/node_modules/semver/ranges/valid.js","../../../frontend/node_modules/semver/ranges/outside.js","../../../frontend/node_modules/semver/ranges/gtr.js","../../../frontend/node_modules/semver/ranges/ltr.js","../../../frontend/node_modules/semver/ranges/intersects.js","../../../frontend/node_modules/semver/ranges/simplify.js","../../../frontend/node_modules/semver/ranges/subset.js","../../../frontend/node_modules/semver/index.js","../../../frontend/src/components/admin/PublishSelector.vue","../../../frontend/src/components/admin/VersionDeletor.vue","../../../frontend/src/components/admin/VersionContextMenu.vue","../../../frontend/src/components/admin/VersionList.vue","../../../frontend/src/components/admin/BlockDetails.vue","../../../frontend/src/views/BlockVersionsView.vue","../../../frontend/src/views/UserAdministration.vue","../../../frontend/src/components/RouteEditor.vue","../../../frontend/src/views/RouteAdministration.vue","../../../frontend/src/components/CategoryEditor.vue","../../../frontend/src/views/CategoryAdministration.vue","../../../frontend/src/assets/templates/curl.liquid?raw","../../../frontend/node_modules/highlight.js/es/languages/shell.js","../../../frontend/src/assets/templates/csharp.liquid?raw","../../../frontend/node_modules/highlight.js/es/languages/csharp.js","../../../frontend/src/assets/templates/http.liquid?raw","../../../frontend/node_modules/highlight.js/es/languages/http.js","../../../frontend/src/assets/templates/java.liquid?raw","../../../frontend/node_modules/highlight.js/es/languages/java.js","../../../frontend/src/assets/templates/javascript.liquid?raw","../../../frontend/node_modules/highlight.js/es/languages/javascript.js","../../../frontend/src/assets/templates/php.liquid?raw","../../../frontend/node_modules/highlight.js/es/languages/php.js","../../../frontend/src/assets/templates/python.liquid?raw","../../../frontend/node_modules/highlight.js/es/languages/python.js","../../../frontend/src/assets/templates/ruby.liquid?raw","../../../frontend/node_modules/highlight.js/es/languages/ruby.js","../../../frontend/src/assets/templates/swift.liquid?raw","../../../frontend/node_modules/highlight.js/es/languages/swift.js","../../../frontend/node_modules/highlight.js/es/languages/rust.js","../../../frontend/node_modules/highlight.js/es/languages/json.js","../../../frontend/src/utilities/templates.ts","../../../frontend/node_modules/liquidjs/dist/liquid.browser.mjs","../../../frontend/node_modules/string-template/index.js","../../../frontend/node_modules/@highlightjs/vue-plugin/dist/highlightjs-vue.esm.min.js","../../../frontend/src/components/CopyButton.vue","../../../frontend/src/components/HttpRequest.vue","../../../frontend/src/components/HttpResponse.vue","../../../frontend/src/components/ApiOperationsHeader.vue","../../../frontend/src/components/ApiParameterInput.vue","../../../frontend/src/utilities/clamp.ts","../../../frontend/src/views/ApiConsoleView.vue","../../../frontend/src/utilities/analytics.ts","../../../frontend/node_modules/@kurkle/color/dist/color.esm.js","../../../frontend/node_modules/chart.js/dist/chunks/helpers.segment.js","../../../frontend/node_modules/chart.js/dist/chart.js","../../../frontend/node_modules/vue-chartjs/dist/index.js","../../../frontend/src/views/ApiMAnalyticsView.vue","../../../frontend/src/api/analytics.ts","../../../frontend/src/views/ViewCountAnalyticsview.vue","../../../frontend/src/views/ContentAnalyticsView.vue","../../../frontend/src/views/OrganizationAdministrationView.vue","../../../frontend/src/views/TokenReceiver.vue","../../../frontend/src/utilities/throttle.ts","../../../frontend/src/components/ComponentPreview.vue","../../../frontend/src/components/ComponentPreviewMdEditor.vue","../../../frontend/src/views/Documentation/AboutRichtextView.vue","../../../frontend/src/views/Documentation/MarkdownDocumentationView.vue","../../../frontend/src/components/TagEditor.vue","../../../frontend/src/views/TagsEditorView.vue","../../../frontend/src/components/TagGroupEditor.vue","../../../frontend/src/views/TagGroupEditorView.vue","../../../frontend/src/api/contactForm.ts","../../../frontend/src/views/ContactFormView.vue","../../../frontend/src/views/BreadCrumbAdminView.vue","../../../frontend/src/router/index.ts","../../../frontend/src/main.ts"],"sourcesContent":["/**\n* @vue/shared v3.5.12\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n/*! #__NO_SIDE_EFFECTS__ */\n// @__NO_SIDE_EFFECTS__\nfunction makeMap(str) {\n const map = /* @__PURE__ */ Object.create(null);\n for (const key of str.split(\",\")) map[key] = 1;\n return (val) => val in map;\n}\n\nconst EMPTY_OBJ = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze({}) : {};\nconst EMPTY_ARR = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze([]) : [];\nconst NOOP = () => {\n};\nconst NO = () => false;\nconst isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter\n(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97);\nconst isModelListener = (key) => key.startsWith(\"onUpdate:\");\nconst extend = Object.assign;\nconst remove = (arr, el) => {\n const i = arr.indexOf(el);\n if (i > -1) {\n arr.splice(i, 1);\n }\n};\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\nconst isArray = Array.isArray;\nconst isMap = (val) => toTypeString(val) === \"[object Map]\";\nconst isSet = (val) => toTypeString(val) === \"[object Set]\";\nconst isDate = (val) => toTypeString(val) === \"[object Date]\";\nconst isRegExp = (val) => toTypeString(val) === \"[object RegExp]\";\nconst isFunction = (val) => typeof val === \"function\";\nconst isString = (val) => typeof val === \"string\";\nconst isSymbol = (val) => typeof val === \"symbol\";\nconst isObject = (val) => val !== null && typeof val === \"object\";\nconst isPromise = (val) => {\n return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch);\n};\nconst objectToString = Object.prototype.toString;\nconst toTypeString = (value) => objectToString.call(value);\nconst toRawType = (value) => {\n return toTypeString(value).slice(8, -1);\n};\nconst isPlainObject = (val) => toTypeString(val) === \"[object Object]\";\nconst isIntegerKey = (key) => isString(key) && key !== \"NaN\" && key[0] !== \"-\" && \"\" + parseInt(key, 10) === key;\nconst isReservedProp = /* @__PURE__ */ makeMap(\n // the leading comma is intentional so empty string \"\" is also included\n \",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"\n);\nconst isBuiltInDirective = /* @__PURE__ */ makeMap(\n \"bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo\"\n);\nconst cacheStringFunction = (fn) => {\n const cache = /* @__PURE__ */ Object.create(null);\n return (str) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n};\nconst camelizeRE = /-(\\w)/g;\nconst camelize = cacheStringFunction(\n (str) => {\n return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n }\n);\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction(\n (str) => str.replace(hyphenateRE, \"-$1\").toLowerCase()\n);\nconst capitalize = cacheStringFunction((str) => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n});\nconst toHandlerKey = cacheStringFunction(\n (str) => {\n const s = str ? `on${capitalize(str)}` : ``;\n return s;\n }\n);\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\nconst invokeArrayFns = (fns, ...arg) => {\n for (let i = 0; i < fns.length; i++) {\n fns[i](...arg);\n }\n};\nconst def = (obj, key, value, writable = false) => {\n Object.defineProperty(obj, key, {\n configurable: true,\n enumerable: false,\n writable,\n value\n });\n};\nconst looseToNumber = (val) => {\n const n = parseFloat(val);\n return isNaN(n) ? val : n;\n};\nconst toNumber = (val) => {\n const n = isString(val) ? Number(val) : NaN;\n return isNaN(n) ? val : n;\n};\nlet _globalThis;\nconst getGlobalThis = () => {\n return _globalThis || (_globalThis = typeof globalThis !== \"undefined\" ? globalThis : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : {});\n};\nconst identRE = /^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/;\nfunction genPropsAccessExp(name) {\n return identRE.test(name) ? `__props.${name}` : `__props[${JSON.stringify(name)}]`;\n}\nfunction genCacheKey(source, options) {\n return source + JSON.stringify(\n options,\n (_, val) => typeof val === \"function\" ? val.toString() : val\n );\n}\n\nconst PatchFlags = {\n \"TEXT\": 1,\n \"1\": \"TEXT\",\n \"CLASS\": 2,\n \"2\": \"CLASS\",\n \"STYLE\": 4,\n \"4\": \"STYLE\",\n \"PROPS\": 8,\n \"8\": \"PROPS\",\n \"FULL_PROPS\": 16,\n \"16\": \"FULL_PROPS\",\n \"NEED_HYDRATION\": 32,\n \"32\": \"NEED_HYDRATION\",\n \"STABLE_FRAGMENT\": 64,\n \"64\": \"STABLE_FRAGMENT\",\n \"KEYED_FRAGMENT\": 128,\n \"128\": \"KEYED_FRAGMENT\",\n \"UNKEYED_FRAGMENT\": 256,\n \"256\": \"UNKEYED_FRAGMENT\",\n \"NEED_PATCH\": 512,\n \"512\": \"NEED_PATCH\",\n \"DYNAMIC_SLOTS\": 1024,\n \"1024\": \"DYNAMIC_SLOTS\",\n \"DEV_ROOT_FRAGMENT\": 2048,\n \"2048\": \"DEV_ROOT_FRAGMENT\",\n \"CACHED\": -1,\n \"-1\": \"CACHED\",\n \"BAIL\": -2,\n \"-2\": \"BAIL\"\n};\nconst PatchFlagNames = {\n [1]: `TEXT`,\n [2]: `CLASS`,\n [4]: `STYLE`,\n [8]: `PROPS`,\n [16]: `FULL_PROPS`,\n [32]: `NEED_HYDRATION`,\n [64]: `STABLE_FRAGMENT`,\n [128]: `KEYED_FRAGMENT`,\n [256]: `UNKEYED_FRAGMENT`,\n [512]: `NEED_PATCH`,\n [1024]: `DYNAMIC_SLOTS`,\n [2048]: `DEV_ROOT_FRAGMENT`,\n [-1]: `HOISTED`,\n [-2]: `BAIL`\n};\n\nconst ShapeFlags = {\n \"ELEMENT\": 1,\n \"1\": \"ELEMENT\",\n \"FUNCTIONAL_COMPONENT\": 2,\n \"2\": \"FUNCTIONAL_COMPONENT\",\n \"STATEFUL_COMPONENT\": 4,\n \"4\": \"STATEFUL_COMPONENT\",\n \"TEXT_CHILDREN\": 8,\n \"8\": \"TEXT_CHILDREN\",\n \"ARRAY_CHILDREN\": 16,\n \"16\": \"ARRAY_CHILDREN\",\n \"SLOTS_CHILDREN\": 32,\n \"32\": \"SLOTS_CHILDREN\",\n \"TELEPORT\": 64,\n \"64\": \"TELEPORT\",\n \"SUSPENSE\": 128,\n \"128\": \"SUSPENSE\",\n \"COMPONENT_SHOULD_KEEP_ALIVE\": 256,\n \"256\": \"COMPONENT_SHOULD_KEEP_ALIVE\",\n \"COMPONENT_KEPT_ALIVE\": 512,\n \"512\": \"COMPONENT_KEPT_ALIVE\",\n \"COMPONENT\": 6,\n \"6\": \"COMPONENT\"\n};\n\nconst SlotFlags = {\n \"STABLE\": 1,\n \"1\": \"STABLE\",\n \"DYNAMIC\": 2,\n \"2\": \"DYNAMIC\",\n \"FORWARDED\": 3,\n \"3\": \"FORWARDED\"\n};\nconst slotFlagsText = {\n [1]: \"STABLE\",\n [2]: \"DYNAMIC\",\n [3]: \"FORWARDED\"\n};\n\nconst GLOBALS_ALLOWED = \"Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol\";\nconst isGloballyAllowed = /* @__PURE__ */ makeMap(GLOBALS_ALLOWED);\nconst isGloballyWhitelisted = isGloballyAllowed;\n\nconst range = 2;\nfunction generateCodeFrame(source, start = 0, end = source.length) {\n start = Math.max(0, Math.min(start, source.length));\n end = Math.max(0, Math.min(end, source.length));\n if (start > end) return \"\";\n let lines = source.split(/(\\r?\\n)/);\n const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\n lines = lines.filter((_, idx) => idx % 2 === 0);\n let count = 0;\n const res = [];\n for (let i = 0; i < lines.length; i++) {\n count += lines[i].length + (newlineSequences[i] && newlineSequences[i].length || 0);\n if (count >= start) {\n for (let j = i - range; j <= i + range || end > count; j++) {\n if (j < 0 || j >= lines.length) continue;\n const line = j + 1;\n res.push(\n `${line}${\" \".repeat(Math.max(3 - String(line).length, 0))}| ${lines[j]}`\n );\n const lineLength = lines[j].length;\n const newLineSeqLength = newlineSequences[j] && newlineSequences[j].length || 0;\n if (j === i) {\n const pad = start - (count - (lineLength + newLineSeqLength));\n const length = Math.max(\n 1,\n end > count ? lineLength - pad : end - start\n );\n res.push(` | ` + \" \".repeat(pad) + \"^\".repeat(length));\n } else if (j > i) {\n if (end > count) {\n const length = Math.max(Math.min(end - count, lineLength), 1);\n res.push(` | ` + \"^\".repeat(length));\n }\n count += lineLength + newLineSeqLength;\n }\n }\n break;\n }\n }\n return res.join(\"\\n\");\n}\n\nfunction normalizeStyle(value) {\n if (isArray(value)) {\n const res = {};\n for (let i = 0; i < value.length; i++) {\n const item = value[i];\n const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item);\n if (normalized) {\n for (const key in normalized) {\n res[key] = normalized[key];\n }\n }\n }\n return res;\n } else if (isString(value) || isObject(value)) {\n return value;\n }\n}\nconst listDelimiterRE = /;(?![^(]*\\))/g;\nconst propertyDelimiterRE = /:([^]+)/;\nconst styleCommentRE = /\\/\\*[^]*?\\*\\//g;\nfunction parseStringStyle(cssText) {\n const ret = {};\n cssText.replace(styleCommentRE, \"\").split(listDelimiterRE).forEach((item) => {\n if (item) {\n const tmp = item.split(propertyDelimiterRE);\n tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n }\n });\n return ret;\n}\nfunction stringifyStyle(styles) {\n let ret = \"\";\n if (!styles || isString(styles)) {\n return ret;\n }\n for (const key in styles) {\n const value = styles[key];\n if (isString(value) || typeof value === \"number\") {\n const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\n ret += `${normalizedKey}:${value};`;\n }\n }\n return ret;\n}\nfunction normalizeClass(value) {\n let res = \"\";\n if (isString(value)) {\n res = value;\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const normalized = normalizeClass(value[i]);\n if (normalized) {\n res += normalized + \" \";\n }\n }\n } else if (isObject(value)) {\n for (const name in value) {\n if (value[name]) {\n res += name + \" \";\n }\n }\n }\n return res.trim();\n}\nfunction normalizeProps(props) {\n if (!props) return null;\n let { class: klass, style } = props;\n if (klass && !isString(klass)) {\n props.class = normalizeClass(klass);\n }\n if (style) {\n props.style = normalizeStyle(style);\n }\n return props;\n}\n\nconst HTML_TAGS = \"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot\";\nconst SVG_TAGS = \"svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view\";\nconst MATH_TAGS = \"annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics\";\nconst VOID_TAGS = \"area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr\";\nconst isHTMLTag = /* @__PURE__ */ makeMap(HTML_TAGS);\nconst isSVGTag = /* @__PURE__ */ makeMap(SVG_TAGS);\nconst isMathMLTag = /* @__PURE__ */ makeMap(MATH_TAGS);\nconst isVoidTag = /* @__PURE__ */ makeMap(VOID_TAGS);\n\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\nconst isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs);\nconst isBooleanAttr = /* @__PURE__ */ makeMap(\n specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`\n);\nfunction includeBooleanAttr(value) {\n return !!value || value === \"\";\n}\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\nconst attrValidationCache = {};\nfunction isSSRSafeAttrName(name) {\n if (attrValidationCache.hasOwnProperty(name)) {\n return attrValidationCache[name];\n }\n const isUnsafe = unsafeAttrCharRE.test(name);\n if (isUnsafe) {\n console.error(`unsafe attribute name: ${name}`);\n }\n return attrValidationCache[name] = !isUnsafe;\n}\nconst propsToAttrMap = {\n acceptCharset: \"accept-charset\",\n className: \"class\",\n htmlFor: \"for\",\n httpEquiv: \"http-equiv\"\n};\nconst isKnownHtmlAttr = /* @__PURE__ */ makeMap(\n `accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap`\n);\nconst isKnownSvgAttr = /* @__PURE__ */ makeMap(\n `xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`\n);\nconst isKnownMathMLAttr = /* @__PURE__ */ makeMap(\n `accent,accentunder,actiontype,align,alignmentscope,altimg,altimg-height,altimg-valign,altimg-width,alttext,bevelled,close,columnsalign,columnlines,columnspan,denomalign,depth,dir,display,displaystyle,encoding,equalcolumns,equalrows,fence,fontstyle,fontweight,form,frame,framespacing,groupalign,height,href,id,indentalign,indentalignfirst,indentalignlast,indentshift,indentshiftfirst,indentshiftlast,indextype,justify,largetop,largeop,lquote,lspace,mathbackground,mathcolor,mathsize,mathvariant,maxsize,minlabelspacing,mode,other,overflow,position,rowalign,rowlines,rowspan,rquote,rspace,scriptlevel,scriptminsize,scriptsizemultiplier,selection,separator,separators,shift,side,src,stackalign,stretchy,subscriptshift,superscriptshift,symmetric,voffset,width,widths,xlink:href,xlink:show,xlink:type,xmlns`\n);\nfunction isRenderableAttrValue(value) {\n if (value == null) {\n return false;\n }\n const type = typeof value;\n return type === \"string\" || type === \"number\" || type === \"boolean\";\n}\n\nconst escapeRE = /[\"'&<>]/;\nfunction escapeHtml(string) {\n const str = \"\" + string;\n const match = escapeRE.exec(str);\n if (!match) {\n return str;\n }\n let html = \"\";\n let escaped;\n let index;\n let lastIndex = 0;\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n escaped = \""\";\n break;\n case 38:\n escaped = \"&\";\n break;\n case 39:\n escaped = \"'\";\n break;\n case 60:\n escaped = \"<\";\n break;\n case 62:\n escaped = \">\";\n break;\n default:\n continue;\n }\n if (lastIndex !== index) {\n html += str.slice(lastIndex, index);\n }\n lastIndex = index + 1;\n html += escaped;\n }\n return lastIndex !== index ? html + str.slice(lastIndex, index) : html;\n}\nconst commentStripRE = /^-?>||--!>|?@[\\\\\\]^`{|}~]/g;\nfunction getEscapedCssVarName(key, doubleEscape) {\n return key.replace(\n cssVarNameEscapeSymbolsRE,\n (s) => doubleEscape ? s === '\"' ? '\\\\\\\\\\\\\"' : `\\\\\\\\${s}` : `\\\\${s}`\n );\n}\n\nfunction looseCompareArrays(a, b) {\n if (a.length !== b.length) return false;\n let equal = true;\n for (let i = 0; equal && i < a.length; i++) {\n equal = looseEqual(a[i], b[i]);\n }\n return equal;\n}\nfunction looseEqual(a, b) {\n if (a === b) return true;\n let aValidType = isDate(a);\n let bValidType = isDate(b);\n if (aValidType || bValidType) {\n return aValidType && bValidType ? a.getTime() === b.getTime() : false;\n }\n aValidType = isSymbol(a);\n bValidType = isSymbol(b);\n if (aValidType || bValidType) {\n return a === b;\n }\n aValidType = isArray(a);\n bValidType = isArray(b);\n if (aValidType || bValidType) {\n return aValidType && bValidType ? looseCompareArrays(a, b) : false;\n }\n aValidType = isObject(a);\n bValidType = isObject(b);\n if (aValidType || bValidType) {\n if (!aValidType || !bValidType) {\n return false;\n }\n const aKeysCount = Object.keys(a).length;\n const bKeysCount = Object.keys(b).length;\n if (aKeysCount !== bKeysCount) {\n return false;\n }\n for (const key in a) {\n const aHasKey = a.hasOwnProperty(key);\n const bHasKey = b.hasOwnProperty(key);\n if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a[key], b[key])) {\n return false;\n }\n }\n }\n return String(a) === String(b);\n}\nfunction looseIndexOf(arr, val) {\n return arr.findIndex((item) => looseEqual(item, val));\n}\n\nconst isRef = (val) => {\n return !!(val && val[\"__v_isRef\"] === true);\n};\nconst toDisplayString = (val) => {\n return isString(val) ? val : val == null ? \"\" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? isRef(val) ? toDisplayString(val.value) : JSON.stringify(val, replacer, 2) : String(val);\n};\nconst replacer = (_key, val) => {\n if (isRef(val)) {\n return replacer(_key, val.value);\n } else if (isMap(val)) {\n return {\n [`Map(${val.size})`]: [...val.entries()].reduce(\n (entries, [key, val2], i) => {\n entries[stringifySymbol(key, i) + \" =>\"] = val2;\n return entries;\n },\n {}\n )\n };\n } else if (isSet(val)) {\n return {\n [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v))\n };\n } else if (isSymbol(val)) {\n return stringifySymbol(val);\n } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\n return String(val);\n }\n return val;\n};\nconst stringifySymbol = (v, i = \"\") => {\n var _a;\n return (\n // Symbol.description in es2019+ so we need to cast here to pass\n // the lib: es2016 check\n isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v\n );\n};\n\nexport { EMPTY_ARR, EMPTY_OBJ, NO, NOOP, PatchFlagNames, PatchFlags, ShapeFlags, SlotFlags, camelize, capitalize, cssVarNameEscapeSymbolsRE, def, escapeHtml, escapeHtmlComment, extend, genCacheKey, genPropsAccessExp, generateCodeFrame, getEscapedCssVarName, getGlobalThis, hasChanged, hasOwn, hyphenate, includeBooleanAttr, invokeArrayFns, isArray, isBooleanAttr, isBuiltInDirective, isDate, isFunction, isGloballyAllowed, isGloballyWhitelisted, isHTMLTag, isIntegerKey, isKnownHtmlAttr, isKnownMathMLAttr, isKnownSvgAttr, isMap, isMathMLTag, isModelListener, isObject, isOn, isPlainObject, isPromise, isRegExp, isRenderableAttrValue, isReservedProp, isSSRSafeAttrName, isSVGTag, isSet, isSpecialBooleanAttr, isString, isSymbol, isVoidTag, looseEqual, looseIndexOf, looseToNumber, makeMap, normalizeClass, normalizeProps, normalizeStyle, objectToString, parseStringStyle, propsToAttrMap, remove, slotFlagsText, stringifyStyle, toDisplayString, toHandlerKey, toNumber, toRawType, toTypeString };\n","/**\n* @vue/reactivity v3.5.12\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { hasChanged, extend, isArray, isIntegerKey, isSymbol, isMap, hasOwn, isObject, makeMap, toRawType, capitalize, def, isFunction, EMPTY_OBJ, isSet, isPlainObject, NOOP, remove } from '@vue/shared';\n\nfunction warn(msg, ...args) {\n console.warn(`[Vue warn] ${msg}`, ...args);\n}\n\nlet activeEffectScope;\nclass EffectScope {\n constructor(detached = false) {\n this.detached = detached;\n /**\n * @internal\n */\n this._active = true;\n /**\n * @internal\n */\n this.effects = [];\n /**\n * @internal\n */\n this.cleanups = [];\n this._isPaused = false;\n this.parent = activeEffectScope;\n if (!detached && activeEffectScope) {\n this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(\n this\n ) - 1;\n }\n }\n get active() {\n return this._active;\n }\n pause() {\n if (this._active) {\n this._isPaused = true;\n let i, l;\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].pause();\n }\n }\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].pause();\n }\n }\n }\n /**\n * Resumes the effect scope, including all child scopes and effects.\n */\n resume() {\n if (this._active) {\n if (this._isPaused) {\n this._isPaused = false;\n let i, l;\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].resume();\n }\n }\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].resume();\n }\n }\n }\n }\n run(fn) {\n if (this._active) {\n const currentEffectScope = activeEffectScope;\n try {\n activeEffectScope = this;\n return fn();\n } finally {\n activeEffectScope = currentEffectScope;\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(`cannot run an inactive effect scope.`);\n }\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n on() {\n activeEffectScope = this;\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n off() {\n activeEffectScope = this.parent;\n }\n stop(fromParent) {\n if (this._active) {\n let i, l;\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].stop();\n }\n for (i = 0, l = this.cleanups.length; i < l; i++) {\n this.cleanups[i]();\n }\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].stop(true);\n }\n }\n if (!this.detached && this.parent && !fromParent) {\n const last = this.parent.scopes.pop();\n if (last && last !== this) {\n this.parent.scopes[this.index] = last;\n last.index = this.index;\n }\n }\n this.parent = void 0;\n this._active = false;\n }\n }\n}\nfunction effectScope(detached) {\n return new EffectScope(detached);\n}\nfunction getCurrentScope() {\n return activeEffectScope;\n}\nfunction onScopeDispose(fn, failSilently = false) {\n if (activeEffectScope) {\n activeEffectScope.cleanups.push(fn);\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onScopeDispose() is called when there is no active effect scope to be associated with.`\n );\n }\n}\n\nlet activeSub;\nconst EffectFlags = {\n \"ACTIVE\": 1,\n \"1\": \"ACTIVE\",\n \"RUNNING\": 2,\n \"2\": \"RUNNING\",\n \"TRACKING\": 4,\n \"4\": \"TRACKING\",\n \"NOTIFIED\": 8,\n \"8\": \"NOTIFIED\",\n \"DIRTY\": 16,\n \"16\": \"DIRTY\",\n \"ALLOW_RECURSE\": 32,\n \"32\": \"ALLOW_RECURSE\",\n \"PAUSED\": 64,\n \"64\": \"PAUSED\"\n};\nconst pausedQueueEffects = /* @__PURE__ */ new WeakSet();\nclass ReactiveEffect {\n constructor(fn) {\n this.fn = fn;\n /**\n * @internal\n */\n this.deps = void 0;\n /**\n * @internal\n */\n this.depsTail = void 0;\n /**\n * @internal\n */\n this.flags = 1 | 4;\n /**\n * @internal\n */\n this.next = void 0;\n /**\n * @internal\n */\n this.cleanup = void 0;\n this.scheduler = void 0;\n if (activeEffectScope && activeEffectScope.active) {\n activeEffectScope.effects.push(this);\n }\n }\n pause() {\n this.flags |= 64;\n }\n resume() {\n if (this.flags & 64) {\n this.flags &= ~64;\n if (pausedQueueEffects.has(this)) {\n pausedQueueEffects.delete(this);\n this.trigger();\n }\n }\n }\n /**\n * @internal\n */\n notify() {\n if (this.flags & 2 && !(this.flags & 32)) {\n return;\n }\n if (!(this.flags & 8)) {\n batch(this);\n }\n }\n run() {\n if (!(this.flags & 1)) {\n return this.fn();\n }\n this.flags |= 2;\n cleanupEffect(this);\n prepareDeps(this);\n const prevEffect = activeSub;\n const prevShouldTrack = shouldTrack;\n activeSub = this;\n shouldTrack = true;\n try {\n return this.fn();\n } finally {\n if (!!(process.env.NODE_ENV !== \"production\") && activeSub !== this) {\n warn(\n \"Active effect was not restored correctly - this is likely a Vue internal bug.\"\n );\n }\n cleanupDeps(this);\n activeSub = prevEffect;\n shouldTrack = prevShouldTrack;\n this.flags &= ~2;\n }\n }\n stop() {\n if (this.flags & 1) {\n for (let link = this.deps; link; link = link.nextDep) {\n removeSub(link);\n }\n this.deps = this.depsTail = void 0;\n cleanupEffect(this);\n this.onStop && this.onStop();\n this.flags &= ~1;\n }\n }\n trigger() {\n if (this.flags & 64) {\n pausedQueueEffects.add(this);\n } else if (this.scheduler) {\n this.scheduler();\n } else {\n this.runIfDirty();\n }\n }\n /**\n * @internal\n */\n runIfDirty() {\n if (isDirty(this)) {\n this.run();\n }\n }\n get dirty() {\n return isDirty(this);\n }\n}\nlet batchDepth = 0;\nlet batchedSub;\nlet batchedComputed;\nfunction batch(sub, isComputed = false) {\n sub.flags |= 8;\n if (isComputed) {\n sub.next = batchedComputed;\n batchedComputed = sub;\n return;\n }\n sub.next = batchedSub;\n batchedSub = sub;\n}\nfunction startBatch() {\n batchDepth++;\n}\nfunction endBatch() {\n if (--batchDepth > 0) {\n return;\n }\n if (batchedComputed) {\n let e = batchedComputed;\n batchedComputed = void 0;\n while (e) {\n const next = e.next;\n e.next = void 0;\n e.flags &= ~8;\n e = next;\n }\n }\n let error;\n while (batchedSub) {\n let e = batchedSub;\n batchedSub = void 0;\n while (e) {\n const next = e.next;\n e.next = void 0;\n e.flags &= ~8;\n if (e.flags & 1) {\n try {\n ;\n e.trigger();\n } catch (err) {\n if (!error) error = err;\n }\n }\n e = next;\n }\n }\n if (error) throw error;\n}\nfunction prepareDeps(sub) {\n for (let link = sub.deps; link; link = link.nextDep) {\n link.version = -1;\n link.prevActiveLink = link.dep.activeLink;\n link.dep.activeLink = link;\n }\n}\nfunction cleanupDeps(sub) {\n let head;\n let tail = sub.depsTail;\n let link = tail;\n while (link) {\n const prev = link.prevDep;\n if (link.version === -1) {\n if (link === tail) tail = prev;\n removeSub(link);\n removeDep(link);\n } else {\n head = link;\n }\n link.dep.activeLink = link.prevActiveLink;\n link.prevActiveLink = void 0;\n link = prev;\n }\n sub.deps = head;\n sub.depsTail = tail;\n}\nfunction isDirty(sub) {\n for (let link = sub.deps; link; link = link.nextDep) {\n if (link.dep.version !== link.version || link.dep.computed && (refreshComputed(link.dep.computed) || link.dep.version !== link.version)) {\n return true;\n }\n }\n if (sub._dirty) {\n return true;\n }\n return false;\n}\nfunction refreshComputed(computed) {\n if (computed.flags & 4 && !(computed.flags & 16)) {\n return;\n }\n computed.flags &= ~16;\n if (computed.globalVersion === globalVersion) {\n return;\n }\n computed.globalVersion = globalVersion;\n const dep = computed.dep;\n computed.flags |= 2;\n if (dep.version > 0 && !computed.isSSR && computed.deps && !isDirty(computed)) {\n computed.flags &= ~2;\n return;\n }\n const prevSub = activeSub;\n const prevShouldTrack = shouldTrack;\n activeSub = computed;\n shouldTrack = true;\n try {\n prepareDeps(computed);\n const value = computed.fn(computed._value);\n if (dep.version === 0 || hasChanged(value, computed._value)) {\n computed._value = value;\n dep.version++;\n }\n } catch (err) {\n dep.version++;\n throw err;\n } finally {\n activeSub = prevSub;\n shouldTrack = prevShouldTrack;\n cleanupDeps(computed);\n computed.flags &= ~2;\n }\n}\nfunction removeSub(link, soft = false) {\n const { dep, prevSub, nextSub } = link;\n if (prevSub) {\n prevSub.nextSub = nextSub;\n link.prevSub = void 0;\n }\n if (nextSub) {\n nextSub.prevSub = prevSub;\n link.nextSub = void 0;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && dep.subsHead === link) {\n dep.subsHead = nextSub;\n }\n if (dep.subs === link) {\n dep.subs = prevSub;\n if (!prevSub && dep.computed) {\n dep.computed.flags &= ~4;\n for (let l = dep.computed.deps; l; l = l.nextDep) {\n removeSub(l, true);\n }\n }\n }\n if (!soft && !--dep.sc && dep.map) {\n dep.map.delete(dep.key);\n }\n}\nfunction removeDep(link) {\n const { prevDep, nextDep } = link;\n if (prevDep) {\n prevDep.nextDep = nextDep;\n link.prevDep = void 0;\n }\n if (nextDep) {\n nextDep.prevDep = prevDep;\n link.nextDep = void 0;\n }\n}\nfunction effect(fn, options) {\n if (fn.effect instanceof ReactiveEffect) {\n fn = fn.effect.fn;\n }\n const e = new ReactiveEffect(fn);\n if (options) {\n extend(e, options);\n }\n try {\n e.run();\n } catch (err) {\n e.stop();\n throw err;\n }\n const runner = e.run.bind(e);\n runner.effect = e;\n return runner;\n}\nfunction stop(runner) {\n runner.effect.stop();\n}\nlet shouldTrack = true;\nconst trackStack = [];\nfunction pauseTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = false;\n}\nfunction enableTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = true;\n}\nfunction resetTracking() {\n const last = trackStack.pop();\n shouldTrack = last === void 0 ? true : last;\n}\nfunction onEffectCleanup(fn, failSilently = false) {\n if (activeSub instanceof ReactiveEffect) {\n activeSub.cleanup = fn;\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onEffectCleanup() was called when there was no active effect to associate with.`\n );\n }\n}\nfunction cleanupEffect(e) {\n const { cleanup } = e;\n e.cleanup = void 0;\n if (cleanup) {\n const prevSub = activeSub;\n activeSub = void 0;\n try {\n cleanup();\n } finally {\n activeSub = prevSub;\n }\n }\n}\n\nlet globalVersion = 0;\nclass Link {\n constructor(sub, dep) {\n this.sub = sub;\n this.dep = dep;\n this.version = dep.version;\n this.nextDep = this.prevDep = this.nextSub = this.prevSub = this.prevActiveLink = void 0;\n }\n}\nclass Dep {\n constructor(computed) {\n this.computed = computed;\n this.version = 0;\n /**\n * Link between this dep and the current active effect\n */\n this.activeLink = void 0;\n /**\n * Doubly linked list representing the subscribing effects (tail)\n */\n this.subs = void 0;\n /**\n * For object property deps cleanup\n */\n this.map = void 0;\n this.key = void 0;\n /**\n * Subscriber counter\n */\n this.sc = 0;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.subsHead = void 0;\n }\n }\n track(debugInfo) {\n if (!activeSub || !shouldTrack || activeSub === this.computed) {\n return;\n }\n let link = this.activeLink;\n if (link === void 0 || link.sub !== activeSub) {\n link = this.activeLink = new Link(activeSub, this);\n if (!activeSub.deps) {\n activeSub.deps = activeSub.depsTail = link;\n } else {\n link.prevDep = activeSub.depsTail;\n activeSub.depsTail.nextDep = link;\n activeSub.depsTail = link;\n }\n addSub(link);\n } else if (link.version === -1) {\n link.version = this.version;\n if (link.nextDep) {\n const next = link.nextDep;\n next.prevDep = link.prevDep;\n if (link.prevDep) {\n link.prevDep.nextDep = next;\n }\n link.prevDep = activeSub.depsTail;\n link.nextDep = void 0;\n activeSub.depsTail.nextDep = link;\n activeSub.depsTail = link;\n if (activeSub.deps === link) {\n activeSub.deps = next;\n }\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") && activeSub.onTrack) {\n activeSub.onTrack(\n extend(\n {\n effect: activeSub\n },\n debugInfo\n )\n );\n }\n return link;\n }\n trigger(debugInfo) {\n this.version++;\n globalVersion++;\n this.notify(debugInfo);\n }\n notify(debugInfo) {\n startBatch();\n try {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n for (let head = this.subsHead; head; head = head.nextSub) {\n if (head.sub.onTrigger && !(head.sub.flags & 8)) {\n head.sub.onTrigger(\n extend(\n {\n effect: head.sub\n },\n debugInfo\n )\n );\n }\n }\n }\n for (let link = this.subs; link; link = link.prevSub) {\n if (link.sub.notify()) {\n ;\n link.sub.dep.notify();\n }\n }\n } finally {\n endBatch();\n }\n }\n}\nfunction addSub(link) {\n link.dep.sc++;\n if (link.sub.flags & 4) {\n const computed = link.dep.computed;\n if (computed && !link.dep.subs) {\n computed.flags |= 4 | 16;\n for (let l = computed.deps; l; l = l.nextDep) {\n addSub(l);\n }\n }\n const currentTail = link.dep.subs;\n if (currentTail !== link) {\n link.prevSub = currentTail;\n if (currentTail) currentTail.nextSub = link;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && link.dep.subsHead === void 0) {\n link.dep.subsHead = link;\n }\n link.dep.subs = link;\n }\n}\nconst targetMap = /* @__PURE__ */ new WeakMap();\nconst ITERATE_KEY = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Object iterate\" : \"\"\n);\nconst MAP_KEY_ITERATE_KEY = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Map keys iterate\" : \"\"\n);\nconst ARRAY_ITERATE_KEY = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Array iterate\" : \"\"\n);\nfunction track(target, type, key) {\n if (shouldTrack && activeSub) {\n let depsMap = targetMap.get(target);\n if (!depsMap) {\n targetMap.set(target, depsMap = /* @__PURE__ */ new Map());\n }\n let dep = depsMap.get(key);\n if (!dep) {\n depsMap.set(key, dep = new Dep());\n dep.map = depsMap;\n dep.key = key;\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n dep.track({\n target,\n type,\n key\n });\n } else {\n dep.track();\n }\n }\n}\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\n const depsMap = targetMap.get(target);\n if (!depsMap) {\n globalVersion++;\n return;\n }\n const run = (dep) => {\n if (dep) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n dep.trigger({\n target,\n type,\n key,\n newValue,\n oldValue,\n oldTarget\n });\n } else {\n dep.trigger();\n }\n }\n };\n startBatch();\n if (type === \"clear\") {\n depsMap.forEach(run);\n } else {\n const targetIsArray = isArray(target);\n const isArrayIndex = targetIsArray && isIntegerKey(key);\n if (targetIsArray && key === \"length\") {\n const newLength = Number(newValue);\n depsMap.forEach((dep, key2) => {\n if (key2 === \"length\" || key2 === ARRAY_ITERATE_KEY || !isSymbol(key2) && key2 >= newLength) {\n run(dep);\n }\n });\n } else {\n if (key !== void 0 || depsMap.has(void 0)) {\n run(depsMap.get(key));\n }\n if (isArrayIndex) {\n run(depsMap.get(ARRAY_ITERATE_KEY));\n }\n switch (type) {\n case \"add\":\n if (!targetIsArray) {\n run(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n run(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n } else if (isArrayIndex) {\n run(depsMap.get(\"length\"));\n }\n break;\n case \"delete\":\n if (!targetIsArray) {\n run(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n run(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n }\n break;\n case \"set\":\n if (isMap(target)) {\n run(depsMap.get(ITERATE_KEY));\n }\n break;\n }\n }\n }\n endBatch();\n}\nfunction getDepFromReactive(object, key) {\n const depMap = targetMap.get(object);\n return depMap && depMap.get(key);\n}\n\nfunction reactiveReadArray(array) {\n const raw = toRaw(array);\n if (raw === array) return raw;\n track(raw, \"iterate\", ARRAY_ITERATE_KEY);\n return isShallow(array) ? raw : raw.map(toReactive);\n}\nfunction shallowReadArray(arr) {\n track(arr = toRaw(arr), \"iterate\", ARRAY_ITERATE_KEY);\n return arr;\n}\nconst arrayInstrumentations = {\n __proto__: null,\n [Symbol.iterator]() {\n return iterator(this, Symbol.iterator, toReactive);\n },\n concat(...args) {\n return reactiveReadArray(this).concat(\n ...args.map((x) => isArray(x) ? reactiveReadArray(x) : x)\n );\n },\n entries() {\n return iterator(this, \"entries\", (value) => {\n value[1] = toReactive(value[1]);\n return value;\n });\n },\n every(fn, thisArg) {\n return apply(this, \"every\", fn, thisArg, void 0, arguments);\n },\n filter(fn, thisArg) {\n return apply(this, \"filter\", fn, thisArg, (v) => v.map(toReactive), arguments);\n },\n find(fn, thisArg) {\n return apply(this, \"find\", fn, thisArg, toReactive, arguments);\n },\n findIndex(fn, thisArg) {\n return apply(this, \"findIndex\", fn, thisArg, void 0, arguments);\n },\n findLast(fn, thisArg) {\n return apply(this, \"findLast\", fn, thisArg, toReactive, arguments);\n },\n findLastIndex(fn, thisArg) {\n return apply(this, \"findLastIndex\", fn, thisArg, void 0, arguments);\n },\n // flat, flatMap could benefit from ARRAY_ITERATE but are not straight-forward to implement\n forEach(fn, thisArg) {\n return apply(this, \"forEach\", fn, thisArg, void 0, arguments);\n },\n includes(...args) {\n return searchProxy(this, \"includes\", args);\n },\n indexOf(...args) {\n return searchProxy(this, \"indexOf\", args);\n },\n join(separator) {\n return reactiveReadArray(this).join(separator);\n },\n // keys() iterator only reads `length`, no optimisation required\n lastIndexOf(...args) {\n return searchProxy(this, \"lastIndexOf\", args);\n },\n map(fn, thisArg) {\n return apply(this, \"map\", fn, thisArg, void 0, arguments);\n },\n pop() {\n return noTracking(this, \"pop\");\n },\n push(...args) {\n return noTracking(this, \"push\", args);\n },\n reduce(fn, ...args) {\n return reduce(this, \"reduce\", fn, args);\n },\n reduceRight(fn, ...args) {\n return reduce(this, \"reduceRight\", fn, args);\n },\n shift() {\n return noTracking(this, \"shift\");\n },\n // slice could use ARRAY_ITERATE but also seems to beg for range tracking\n some(fn, thisArg) {\n return apply(this, \"some\", fn, thisArg, void 0, arguments);\n },\n splice(...args) {\n return noTracking(this, \"splice\", args);\n },\n toReversed() {\n return reactiveReadArray(this).toReversed();\n },\n toSorted(comparer) {\n return reactiveReadArray(this).toSorted(comparer);\n },\n toSpliced(...args) {\n return reactiveReadArray(this).toSpliced(...args);\n },\n unshift(...args) {\n return noTracking(this, \"unshift\", args);\n },\n values() {\n return iterator(this, \"values\", toReactive);\n }\n};\nfunction iterator(self, method, wrapValue) {\n const arr = shallowReadArray(self);\n const iter = arr[method]();\n if (arr !== self && !isShallow(self)) {\n iter._next = iter.next;\n iter.next = () => {\n const result = iter._next();\n if (result.value) {\n result.value = wrapValue(result.value);\n }\n return result;\n };\n }\n return iter;\n}\nconst arrayProto = Array.prototype;\nfunction apply(self, method, fn, thisArg, wrappedRetFn, args) {\n const arr = shallowReadArray(self);\n const needsWrap = arr !== self && !isShallow(self);\n const methodFn = arr[method];\n if (methodFn !== arrayProto[method]) {\n const result2 = methodFn.apply(self, args);\n return needsWrap ? toReactive(result2) : result2;\n }\n let wrappedFn = fn;\n if (arr !== self) {\n if (needsWrap) {\n wrappedFn = function(item, index) {\n return fn.call(this, toReactive(item), index, self);\n };\n } else if (fn.length > 2) {\n wrappedFn = function(item, index) {\n return fn.call(this, item, index, self);\n };\n }\n }\n const result = methodFn.call(arr, wrappedFn, thisArg);\n return needsWrap && wrappedRetFn ? wrappedRetFn(result) : result;\n}\nfunction reduce(self, method, fn, args) {\n const arr = shallowReadArray(self);\n let wrappedFn = fn;\n if (arr !== self) {\n if (!isShallow(self)) {\n wrappedFn = function(acc, item, index) {\n return fn.call(this, acc, toReactive(item), index, self);\n };\n } else if (fn.length > 3) {\n wrappedFn = function(acc, item, index) {\n return fn.call(this, acc, item, index, self);\n };\n }\n }\n return arr[method](wrappedFn, ...args);\n}\nfunction searchProxy(self, method, args) {\n const arr = toRaw(self);\n track(arr, \"iterate\", ARRAY_ITERATE_KEY);\n const res = arr[method](...args);\n if ((res === -1 || res === false) && isProxy(args[0])) {\n args[0] = toRaw(args[0]);\n return arr[method](...args);\n }\n return res;\n}\nfunction noTracking(self, method, args = []) {\n pauseTracking();\n startBatch();\n const res = toRaw(self)[method].apply(self, args);\n endBatch();\n resetTracking();\n return res;\n}\n\nconst isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`);\nconst builtInSymbols = new Set(\n /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== \"arguments\" && key !== \"caller\").map((key) => Symbol[key]).filter(isSymbol)\n);\nfunction hasOwnProperty(key) {\n if (!isSymbol(key)) key = String(key);\n const obj = toRaw(this);\n track(obj, \"has\", key);\n return obj.hasOwnProperty(key);\n}\nclass BaseReactiveHandler {\n constructor(_isReadonly = false, _isShallow = false) {\n this._isReadonly = _isReadonly;\n this._isShallow = _isShallow;\n }\n get(target, key, receiver) {\n const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow;\n if (key === \"__v_isReactive\") {\n return !isReadonly2;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly2;\n } else if (key === \"__v_isShallow\") {\n return isShallow2;\n } else if (key === \"__v_raw\") {\n if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype\n // this means the receiver is a user proxy of the reactive proxy\n Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) {\n return target;\n }\n return;\n }\n const targetIsArray = isArray(target);\n if (!isReadonly2) {\n let fn;\n if (targetIsArray && (fn = arrayInstrumentations[key])) {\n return fn;\n }\n if (key === \"hasOwnProperty\") {\n return hasOwnProperty;\n }\n }\n const res = Reflect.get(\n target,\n key,\n // if this is a proxy wrapping a ref, return methods using the raw ref\n // as receiver so that we don't have to call `toRaw` on the ref in all\n // its class methods\n isRef(target) ? target : receiver\n );\n if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n return res;\n }\n if (!isReadonly2) {\n track(target, \"get\", key);\n }\n if (isShallow2) {\n return res;\n }\n if (isRef(res)) {\n return targetIsArray && isIntegerKey(key) ? res : res.value;\n }\n if (isObject(res)) {\n return isReadonly2 ? readonly(res) : reactive(res);\n }\n return res;\n }\n}\nclass MutableReactiveHandler extends BaseReactiveHandler {\n constructor(isShallow2 = false) {\n super(false, isShallow2);\n }\n set(target, key, value, receiver) {\n let oldValue = target[key];\n if (!this._isShallow) {\n const isOldValueReadonly = isReadonly(oldValue);\n if (!isShallow(value) && !isReadonly(value)) {\n oldValue = toRaw(oldValue);\n value = toRaw(value);\n }\n if (!isArray(target) && isRef(oldValue) && !isRef(value)) {\n if (isOldValueReadonly) {\n return false;\n } else {\n oldValue.value = value;\n return true;\n }\n }\n }\n const hadKey = isArray(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn(target, key);\n const result = Reflect.set(\n target,\n key,\n value,\n isRef(target) ? target : receiver\n );\n if (target === toRaw(receiver)) {\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n }\n return result;\n }\n deleteProperty(target, key) {\n const hadKey = hasOwn(target, key);\n const oldValue = target[key];\n const result = Reflect.deleteProperty(target, key);\n if (result && hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n }\n has(target, key) {\n const result = Reflect.has(target, key);\n if (!isSymbol(key) || !builtInSymbols.has(key)) {\n track(target, \"has\", key);\n }\n return result;\n }\n ownKeys(target) {\n track(\n target,\n \"iterate\",\n isArray(target) ? \"length\" : ITERATE_KEY\n );\n return Reflect.ownKeys(target);\n }\n}\nclass ReadonlyReactiveHandler extends BaseReactiveHandler {\n constructor(isShallow2 = false) {\n super(true, isShallow2);\n }\n set(target, key) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Set operation on key \"${String(key)}\" failed: target is readonly.`,\n target\n );\n }\n return true;\n }\n deleteProperty(target, key) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Delete operation on key \"${String(key)}\" failed: target is readonly.`,\n target\n );\n }\n return true;\n }\n}\nconst mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler();\nconst readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler();\nconst shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler(true);\nconst shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(true);\n\nconst toShallow = (value) => value;\nconst getProto = (v) => Reflect.getPrototypeOf(v);\nfunction createIterableMethod(method, isReadonly2, isShallow2) {\n return function(...args) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const targetIsMap = isMap(rawTarget);\n const isPair = method === \"entries\" || method === Symbol.iterator && targetIsMap;\n const isKeyOnly = method === \"keys\" && targetIsMap;\n const innerIterator = target[method](...args);\n const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;\n !isReadonly2 && track(\n rawTarget,\n \"iterate\",\n isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY\n );\n return {\n // iterator protocol\n next() {\n const { value, done } = innerIterator.next();\n return done ? { value, done } : {\n value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n done\n };\n },\n // iterable protocol\n [Symbol.iterator]() {\n return this;\n }\n };\n };\n}\nfunction createReadonlyMethod(type) {\n return function(...args) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const key = args[0] ? `on key \"${args[0]}\" ` : ``;\n warn(\n `${capitalize(type)} operation ${key}failed: target is readonly.`,\n toRaw(this)\n );\n }\n return type === \"delete\" ? false : type === \"clear\" ? void 0 : this;\n };\n}\nfunction createInstrumentations(readonly, shallow) {\n const instrumentations = {\n get(key) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!readonly) {\n if (hasChanged(key, rawKey)) {\n track(rawTarget, \"get\", key);\n }\n track(rawTarget, \"get\", rawKey);\n }\n const { has } = getProto(rawTarget);\n const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive;\n if (has.call(rawTarget, key)) {\n return wrap(target.get(key));\n } else if (has.call(rawTarget, rawKey)) {\n return wrap(target.get(rawKey));\n } else if (target !== rawTarget) {\n target.get(key);\n }\n },\n get size() {\n const target = this[\"__v_raw\"];\n !readonly && track(toRaw(target), \"iterate\", ITERATE_KEY);\n return Reflect.get(target, \"size\", target);\n },\n has(key) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!readonly) {\n if (hasChanged(key, rawKey)) {\n track(rawTarget, \"has\", key);\n }\n track(rawTarget, \"has\", rawKey);\n }\n return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);\n },\n forEach(callback, thisArg) {\n const observed = this;\n const target = observed[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive;\n !readonly && track(rawTarget, \"iterate\", ITERATE_KEY);\n return target.forEach((value, key) => {\n return callback.call(thisArg, wrap(value), wrap(key), observed);\n });\n }\n };\n extend(\n instrumentations,\n readonly ? {\n add: createReadonlyMethod(\"add\"),\n set: createReadonlyMethod(\"set\"),\n delete: createReadonlyMethod(\"delete\"),\n clear: createReadonlyMethod(\"clear\")\n } : {\n add(value) {\n if (!shallow && !isShallow(value) && !isReadonly(value)) {\n value = toRaw(value);\n }\n const target = toRaw(this);\n const proto = getProto(target);\n const hadKey = proto.has.call(target, value);\n if (!hadKey) {\n target.add(value);\n trigger(target, \"add\", value, value);\n }\n return this;\n },\n set(key, value) {\n if (!shallow && !isShallow(value) && !isReadonly(value)) {\n value = toRaw(value);\n }\n const target = toRaw(this);\n const { has, get } = getProto(target);\n let hadKey = has.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has.call(target, key);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n checkIdentityKeys(target, has, key);\n }\n const oldValue = get.call(target, key);\n target.set(key, value);\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n return this;\n },\n delete(key) {\n const target = toRaw(this);\n const { has, get } = getProto(target);\n let hadKey = has.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has.call(target, key);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n checkIdentityKeys(target, has, key);\n }\n const oldValue = get ? get.call(target, key) : void 0;\n const result = target.delete(key);\n if (hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n },\n clear() {\n const target = toRaw(this);\n const hadItems = target.size !== 0;\n const oldTarget = !!(process.env.NODE_ENV !== \"production\") ? isMap(target) ? new Map(target) : new Set(target) : void 0;\n const result = target.clear();\n if (hadItems) {\n trigger(\n target,\n \"clear\",\n void 0,\n void 0,\n oldTarget\n );\n }\n return result;\n }\n }\n );\n const iteratorMethods = [\n \"keys\",\n \"values\",\n \"entries\",\n Symbol.iterator\n ];\n iteratorMethods.forEach((method) => {\n instrumentations[method] = createIterableMethod(method, readonly, shallow);\n });\n return instrumentations;\n}\nfunction createInstrumentationGetter(isReadonly2, shallow) {\n const instrumentations = createInstrumentations(isReadonly2, shallow);\n return (target, key, receiver) => {\n if (key === \"__v_isReactive\") {\n return !isReadonly2;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly2;\n } else if (key === \"__v_raw\") {\n return target;\n }\n return Reflect.get(\n hasOwn(instrumentations, key) && key in target ? instrumentations : target,\n key,\n receiver\n );\n };\n}\nconst mutableCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(false, false)\n};\nconst shallowCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(false, true)\n};\nconst readonlyCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(true, false)\n};\nconst shallowReadonlyCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(true, true)\n};\nfunction checkIdentityKeys(target, has, key) {\n const rawKey = toRaw(key);\n if (rawKey !== key && has.call(target, rawKey)) {\n const type = toRawType(target);\n warn(\n `Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`\n );\n }\n}\n\nconst reactiveMap = /* @__PURE__ */ new WeakMap();\nconst shallowReactiveMap = /* @__PURE__ */ new WeakMap();\nconst readonlyMap = /* @__PURE__ */ new WeakMap();\nconst shallowReadonlyMap = /* @__PURE__ */ new WeakMap();\nfunction targetTypeMap(rawType) {\n switch (rawType) {\n case \"Object\":\n case \"Array\":\n return 1 /* COMMON */;\n case \"Map\":\n case \"Set\":\n case \"WeakMap\":\n case \"WeakSet\":\n return 2 /* COLLECTION */;\n default:\n return 0 /* INVALID */;\n }\n}\nfunction getTargetType(value) {\n return value[\"__v_skip\"] || !Object.isExtensible(value) ? 0 /* INVALID */ : targetTypeMap(toRawType(value));\n}\nfunction reactive(target) {\n if (isReadonly(target)) {\n return target;\n }\n return createReactiveObject(\n target,\n false,\n mutableHandlers,\n mutableCollectionHandlers,\n reactiveMap\n );\n}\nfunction shallowReactive(target) {\n return createReactiveObject(\n target,\n false,\n shallowReactiveHandlers,\n shallowCollectionHandlers,\n shallowReactiveMap\n );\n}\nfunction readonly(target) {\n return createReactiveObject(\n target,\n true,\n readonlyHandlers,\n readonlyCollectionHandlers,\n readonlyMap\n );\n}\nfunction shallowReadonly(target) {\n return createReactiveObject(\n target,\n true,\n shallowReadonlyHandlers,\n shallowReadonlyCollectionHandlers,\n shallowReadonlyMap\n );\n}\nfunction createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) {\n if (!isObject(target)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `value cannot be made ${isReadonly2 ? \"readonly\" : \"reactive\"}: ${String(\n target\n )}`\n );\n }\n return target;\n }\n if (target[\"__v_raw\"] && !(isReadonly2 && target[\"__v_isReactive\"])) {\n return target;\n }\n const existingProxy = proxyMap.get(target);\n if (existingProxy) {\n return existingProxy;\n }\n const targetType = getTargetType(target);\n if (targetType === 0 /* INVALID */) {\n return target;\n }\n const proxy = new Proxy(\n target,\n targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers\n );\n proxyMap.set(target, proxy);\n return proxy;\n}\nfunction isReactive(value) {\n if (isReadonly(value)) {\n return isReactive(value[\"__v_raw\"]);\n }\n return !!(value && value[\"__v_isReactive\"]);\n}\nfunction isReadonly(value) {\n return !!(value && value[\"__v_isReadonly\"]);\n}\nfunction isShallow(value) {\n return !!(value && value[\"__v_isShallow\"]);\n}\nfunction isProxy(value) {\n return value ? !!value[\"__v_raw\"] : false;\n}\nfunction toRaw(observed) {\n const raw = observed && observed[\"__v_raw\"];\n return raw ? toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n if (!hasOwn(value, \"__v_skip\") && Object.isExtensible(value)) {\n def(value, \"__v_skip\", true);\n }\n return value;\n}\nconst toReactive = (value) => isObject(value) ? reactive(value) : value;\nconst toReadonly = (value) => isObject(value) ? readonly(value) : value;\n\nfunction isRef(r) {\n return r ? r[\"__v_isRef\"] === true : false;\n}\nfunction ref(value) {\n return createRef(value, false);\n}\nfunction shallowRef(value) {\n return createRef(value, true);\n}\nfunction createRef(rawValue, shallow) {\n if (isRef(rawValue)) {\n return rawValue;\n }\n return new RefImpl(rawValue, shallow);\n}\nclass RefImpl {\n constructor(value, isShallow2) {\n this.dep = new Dep();\n this[\"__v_isRef\"] = true;\n this[\"__v_isShallow\"] = false;\n this._rawValue = isShallow2 ? value : toRaw(value);\n this._value = isShallow2 ? value : toReactive(value);\n this[\"__v_isShallow\"] = isShallow2;\n }\n get value() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.dep.track({\n target: this,\n type: \"get\",\n key: \"value\"\n });\n } else {\n this.dep.track();\n }\n return this._value;\n }\n set value(newValue) {\n const oldValue = this._rawValue;\n const useDirectValue = this[\"__v_isShallow\"] || isShallow(newValue) || isReadonly(newValue);\n newValue = useDirectValue ? newValue : toRaw(newValue);\n if (hasChanged(newValue, oldValue)) {\n this._rawValue = newValue;\n this._value = useDirectValue ? newValue : toReactive(newValue);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.dep.trigger({\n target: this,\n type: \"set\",\n key: \"value\",\n newValue,\n oldValue\n });\n } else {\n this.dep.trigger();\n }\n }\n }\n}\nfunction triggerRef(ref2) {\n if (ref2.dep) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n ref2.dep.trigger({\n target: ref2,\n type: \"set\",\n key: \"value\",\n newValue: ref2._value\n });\n } else {\n ref2.dep.trigger();\n }\n }\n}\nfunction unref(ref2) {\n return isRef(ref2) ? ref2.value : ref2;\n}\nfunction toValue(source) {\n return isFunction(source) ? source() : unref(source);\n}\nconst shallowUnwrapHandlers = {\n get: (target, key, receiver) => key === \"__v_raw\" ? target : unref(Reflect.get(target, key, receiver)),\n set: (target, key, value, receiver) => {\n const oldValue = target[key];\n if (isRef(oldValue) && !isRef(value)) {\n oldValue.value = value;\n return true;\n } else {\n return Reflect.set(target, key, value, receiver);\n }\n }\n};\nfunction proxyRefs(objectWithRefs) {\n return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers);\n}\nclass CustomRefImpl {\n constructor(factory) {\n this[\"__v_isRef\"] = true;\n this._value = void 0;\n const dep = this.dep = new Dep();\n const { get, set } = factory(dep.track.bind(dep), dep.trigger.bind(dep));\n this._get = get;\n this._set = set;\n }\n get value() {\n return this._value = this._get();\n }\n set value(newVal) {\n this._set(newVal);\n }\n}\nfunction customRef(factory) {\n return new CustomRefImpl(factory);\n}\nfunction toRefs(object) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isProxy(object)) {\n warn(`toRefs() expects a reactive object but received a plain one.`);\n }\n const ret = isArray(object) ? new Array(object.length) : {};\n for (const key in object) {\n ret[key] = propertyToRef(object, key);\n }\n return ret;\n}\nclass ObjectRefImpl {\n constructor(_object, _key, _defaultValue) {\n this._object = _object;\n this._key = _key;\n this._defaultValue = _defaultValue;\n this[\"__v_isRef\"] = true;\n this._value = void 0;\n }\n get value() {\n const val = this._object[this._key];\n return this._value = val === void 0 ? this._defaultValue : val;\n }\n set value(newVal) {\n this._object[this._key] = newVal;\n }\n get dep() {\n return getDepFromReactive(toRaw(this._object), this._key);\n }\n}\nclass GetterRefImpl {\n constructor(_getter) {\n this._getter = _getter;\n this[\"__v_isRef\"] = true;\n this[\"__v_isReadonly\"] = true;\n this._value = void 0;\n }\n get value() {\n return this._value = this._getter();\n }\n}\nfunction toRef(source, key, defaultValue) {\n if (isRef(source)) {\n return source;\n } else if (isFunction(source)) {\n return new GetterRefImpl(source);\n } else if (isObject(source) && arguments.length > 1) {\n return propertyToRef(source, key, defaultValue);\n } else {\n return ref(source);\n }\n}\nfunction propertyToRef(source, key, defaultValue) {\n const val = source[key];\n return isRef(val) ? val : new ObjectRefImpl(source, key, defaultValue);\n}\n\nclass ComputedRefImpl {\n constructor(fn, setter, isSSR) {\n this.fn = fn;\n this.setter = setter;\n /**\n * @internal\n */\n this._value = void 0;\n /**\n * @internal\n */\n this.dep = new Dep(this);\n /**\n * @internal\n */\n this.__v_isRef = true;\n // TODO isolatedDeclarations \"__v_isReadonly\"\n // A computed is also a subscriber that tracks other deps\n /**\n * @internal\n */\n this.deps = void 0;\n /**\n * @internal\n */\n this.depsTail = void 0;\n /**\n * @internal\n */\n this.flags = 16;\n /**\n * @internal\n */\n this.globalVersion = globalVersion - 1;\n /**\n * @internal\n */\n this.next = void 0;\n // for backwards compat\n this.effect = this;\n this[\"__v_isReadonly\"] = !setter;\n this.isSSR = isSSR;\n }\n /**\n * @internal\n */\n notify() {\n this.flags |= 16;\n if (!(this.flags & 8) && // avoid infinite self recursion\n activeSub !== this) {\n batch(this, true);\n return true;\n } else if (!!(process.env.NODE_ENV !== \"production\")) ;\n }\n get value() {\n const link = !!(process.env.NODE_ENV !== \"production\") ? this.dep.track({\n target: this,\n type: \"get\",\n key: \"value\"\n }) : this.dep.track();\n refreshComputed(this);\n if (link) {\n link.version = this.dep.version;\n }\n return this._value;\n }\n set value(newValue) {\n if (this.setter) {\n this.setter(newValue);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\"Write operation failed: computed value is readonly\");\n }\n }\n}\nfunction computed(getterOrOptions, debugOptions, isSSR = false) {\n let getter;\n let setter;\n if (isFunction(getterOrOptions)) {\n getter = getterOrOptions;\n } else {\n getter = getterOrOptions.get;\n setter = getterOrOptions.set;\n }\n const cRef = new ComputedRefImpl(getter, setter, isSSR);\n if (!!(process.env.NODE_ENV !== \"production\") && debugOptions && !isSSR) {\n cRef.onTrack = debugOptions.onTrack;\n cRef.onTrigger = debugOptions.onTrigger;\n }\n return cRef;\n}\n\nconst TrackOpTypes = {\n \"GET\": \"get\",\n \"HAS\": \"has\",\n \"ITERATE\": \"iterate\"\n};\nconst TriggerOpTypes = {\n \"SET\": \"set\",\n \"ADD\": \"add\",\n \"DELETE\": \"delete\",\n \"CLEAR\": \"clear\"\n};\nconst ReactiveFlags = {\n \"SKIP\": \"__v_skip\",\n \"IS_REACTIVE\": \"__v_isReactive\",\n \"IS_READONLY\": \"__v_isReadonly\",\n \"IS_SHALLOW\": \"__v_isShallow\",\n \"RAW\": \"__v_raw\",\n \"IS_REF\": \"__v_isRef\"\n};\n\nconst WatchErrorCodes = {\n \"WATCH_GETTER\": 2,\n \"2\": \"WATCH_GETTER\",\n \"WATCH_CALLBACK\": 3,\n \"3\": \"WATCH_CALLBACK\",\n \"WATCH_CLEANUP\": 4,\n \"4\": \"WATCH_CLEANUP\"\n};\nconst INITIAL_WATCHER_VALUE = {};\nconst cleanupMap = /* @__PURE__ */ new WeakMap();\nlet activeWatcher = void 0;\nfunction getCurrentWatcher() {\n return activeWatcher;\n}\nfunction onWatcherCleanup(cleanupFn, failSilently = false, owner = activeWatcher) {\n if (owner) {\n let cleanups = cleanupMap.get(owner);\n if (!cleanups) cleanupMap.set(owner, cleanups = []);\n cleanups.push(cleanupFn);\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onWatcherCleanup() was called when there was no active watcher to associate with.`\n );\n }\n}\nfunction watch(source, cb, options = EMPTY_OBJ) {\n const { immediate, deep, once, scheduler, augmentJob, call } = options;\n const warnInvalidSource = (s) => {\n (options.onWarn || warn)(\n `Invalid watch source: `,\n s,\n `A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.`\n );\n };\n const reactiveGetter = (source2) => {\n if (deep) return source2;\n if (isShallow(source2) || deep === false || deep === 0)\n return traverse(source2, 1);\n return traverse(source2);\n };\n let effect;\n let getter;\n let cleanup;\n let boundCleanup;\n let forceTrigger = false;\n let isMultiSource = false;\n if (isRef(source)) {\n getter = () => source.value;\n forceTrigger = isShallow(source);\n } else if (isReactive(source)) {\n getter = () => reactiveGetter(source);\n forceTrigger = true;\n } else if (isArray(source)) {\n isMultiSource = true;\n forceTrigger = source.some((s) => isReactive(s) || isShallow(s));\n getter = () => source.map((s) => {\n if (isRef(s)) {\n return s.value;\n } else if (isReactive(s)) {\n return reactiveGetter(s);\n } else if (isFunction(s)) {\n return call ? call(s, 2) : s();\n } else {\n !!(process.env.NODE_ENV !== \"production\") && warnInvalidSource(s);\n }\n });\n } else if (isFunction(source)) {\n if (cb) {\n getter = call ? () => call(source, 2) : source;\n } else {\n getter = () => {\n if (cleanup) {\n pauseTracking();\n try {\n cleanup();\n } finally {\n resetTracking();\n }\n }\n const currentEffect = activeWatcher;\n activeWatcher = effect;\n try {\n return call ? call(source, 3, [boundCleanup]) : source(boundCleanup);\n } finally {\n activeWatcher = currentEffect;\n }\n };\n }\n } else {\n getter = NOOP;\n !!(process.env.NODE_ENV !== \"production\") && warnInvalidSource(source);\n }\n if (cb && deep) {\n const baseGetter = getter;\n const depth = deep === true ? Infinity : deep;\n getter = () => traverse(baseGetter(), depth);\n }\n const scope = getCurrentScope();\n const watchHandle = () => {\n effect.stop();\n if (scope) {\n remove(scope.effects, effect);\n }\n };\n if (once && cb) {\n const _cb = cb;\n cb = (...args) => {\n _cb(...args);\n watchHandle();\n };\n }\n let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE;\n const job = (immediateFirstRun) => {\n if (!(effect.flags & 1) || !effect.dirty && !immediateFirstRun) {\n return;\n }\n if (cb) {\n const newValue = effect.run();\n if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue))) {\n if (cleanup) {\n cleanup();\n }\n const currentWatcher = activeWatcher;\n activeWatcher = effect;\n try {\n const args = [\n newValue,\n // pass undefined as the old value when it's changed for the first time\n oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue,\n boundCleanup\n ];\n call ? call(cb, 3, args) : (\n // @ts-expect-error\n cb(...args)\n );\n oldValue = newValue;\n } finally {\n activeWatcher = currentWatcher;\n }\n }\n } else {\n effect.run();\n }\n };\n if (augmentJob) {\n augmentJob(job);\n }\n effect = new ReactiveEffect(getter);\n effect.scheduler = scheduler ? () => scheduler(job, false) : job;\n boundCleanup = (fn) => onWatcherCleanup(fn, false, effect);\n cleanup = effect.onStop = () => {\n const cleanups = cleanupMap.get(effect);\n if (cleanups) {\n if (call) {\n call(cleanups, 4);\n } else {\n for (const cleanup2 of cleanups) cleanup2();\n }\n cleanupMap.delete(effect);\n }\n };\n if (!!(process.env.NODE_ENV !== \"production\")) {\n effect.onTrack = options.onTrack;\n effect.onTrigger = options.onTrigger;\n }\n if (cb) {\n if (immediate) {\n job(true);\n } else {\n oldValue = effect.run();\n }\n } else if (scheduler) {\n scheduler(job.bind(null, true), true);\n } else {\n effect.run();\n }\n watchHandle.pause = effect.pause.bind(effect);\n watchHandle.resume = effect.resume.bind(effect);\n watchHandle.stop = watchHandle;\n return watchHandle;\n}\nfunction traverse(value, depth = Infinity, seen) {\n if (depth <= 0 || !isObject(value) || value[\"__v_skip\"]) {\n return value;\n }\n seen = seen || /* @__PURE__ */ new Set();\n if (seen.has(value)) {\n return value;\n }\n seen.add(value);\n depth--;\n if (isRef(value)) {\n traverse(value.value, depth, seen);\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n traverse(value[i], depth, seen);\n }\n } else if (isSet(value) || isMap(value)) {\n value.forEach((v) => {\n traverse(v, depth, seen);\n });\n } else if (isPlainObject(value)) {\n for (const key in value) {\n traverse(value[key], depth, seen);\n }\n for (const key of Object.getOwnPropertySymbols(value)) {\n if (Object.prototype.propertyIsEnumerable.call(value, key)) {\n traverse(value[key], depth, seen);\n }\n }\n }\n return value;\n}\n\nexport { ARRAY_ITERATE_KEY, EffectFlags, EffectScope, ITERATE_KEY, MAP_KEY_ITERATE_KEY, ReactiveEffect, ReactiveFlags, TrackOpTypes, TriggerOpTypes, WatchErrorCodes, computed, customRef, effect, effectScope, enableTracking, getCurrentScope, getCurrentWatcher, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onEffectCleanup, onScopeDispose, onWatcherCleanup, pauseTracking, proxyRefs, reactive, reactiveReadArray, readonly, ref, resetTracking, shallowReactive, shallowReadArray, shallowReadonly, shallowRef, stop, toRaw, toReactive, toReadonly, toRef, toRefs, toValue, track, traverse, trigger, triggerRef, unref, watch };\n","/**\n* @vue/runtime-core v3.5.12\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { pauseTracking, resetTracking, isRef, toRaw, traverse, shallowRef, readonly, isReactive, ref, isShallow, shallowReadArray, toReactive, shallowReadonly, track, reactive, shallowReactive, trigger, ReactiveEffect, watch as watch$1, customRef, isProxy, proxyRefs, markRaw, EffectScope, computed as computed$1, isReadonly } from '@vue/reactivity';\nexport { EffectScope, ReactiveEffect, TrackOpTypes, TriggerOpTypes, customRef, effect, effectScope, getCurrentScope, getCurrentWatcher, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onScopeDispose, onWatcherCleanup, proxyRefs, reactive, readonly, ref, shallowReactive, shallowReadonly, shallowRef, stop, toRaw, toRef, toRefs, toValue, triggerRef, unref } from '@vue/reactivity';\nimport { isString, isFunction, isPromise, isArray, EMPTY_OBJ, NOOP, getGlobalThis, extend, isBuiltInDirective, hasOwn, remove, def, isOn, isReservedProp, normalizeClass, stringifyStyle, normalizeStyle, isKnownSvgAttr, isBooleanAttr, isKnownHtmlAttr, includeBooleanAttr, isRenderableAttrValue, getEscapedCssVarName, isObject, isRegExp, invokeArrayFns, toHandlerKey, capitalize, camelize, isSymbol, isGloballyAllowed, NO, hyphenate, EMPTY_ARR, toRawType, makeMap, hasChanged, looseToNumber, isModelListener, toNumber } from '@vue/shared';\nexport { camelize, capitalize, normalizeClass, normalizeProps, normalizeStyle, toDisplayString, toHandlerKey } from '@vue/shared';\n\nconst stack = [];\nfunction pushWarningContext(vnode) {\n stack.push(vnode);\n}\nfunction popWarningContext() {\n stack.pop();\n}\nlet isWarning = false;\nfunction warn$1(msg, ...args) {\n if (isWarning) return;\n isWarning = true;\n pauseTracking();\n const instance = stack.length ? stack[stack.length - 1].component : null;\n const appWarnHandler = instance && instance.appContext.config.warnHandler;\n const trace = getComponentTrace();\n if (appWarnHandler) {\n callWithErrorHandling(\n appWarnHandler,\n instance,\n 11,\n [\n // eslint-disable-next-line no-restricted-syntax\n msg + args.map((a) => {\n var _a, _b;\n return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a);\n }).join(\"\"),\n instance && instance.proxy,\n trace.map(\n ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`\n ).join(\"\\n\"),\n trace\n ]\n );\n } else {\n const warnArgs = [`[Vue warn]: ${msg}`, ...args];\n if (trace.length && // avoid spamming console during tests\n true) {\n warnArgs.push(`\n`, ...formatTrace(trace));\n }\n console.warn(...warnArgs);\n }\n resetTracking();\n isWarning = false;\n}\nfunction getComponentTrace() {\n let currentVNode = stack[stack.length - 1];\n if (!currentVNode) {\n return [];\n }\n const normalizedStack = [];\n while (currentVNode) {\n const last = normalizedStack[0];\n if (last && last.vnode === currentVNode) {\n last.recurseCount++;\n } else {\n normalizedStack.push({\n vnode: currentVNode,\n recurseCount: 0\n });\n }\n const parentInstance = currentVNode.component && currentVNode.component.parent;\n currentVNode = parentInstance && parentInstance.vnode;\n }\n return normalizedStack;\n}\nfunction formatTrace(trace) {\n const logs = [];\n trace.forEach((entry, i) => {\n logs.push(...i === 0 ? [] : [`\n`], ...formatTraceEntry(entry));\n });\n return logs;\n}\nfunction formatTraceEntry({ vnode, recurseCount }) {\n const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;\n const isRoot = vnode.component ? vnode.component.parent == null : false;\n const open = ` at <${formatComponentName(\n vnode.component,\n vnode.type,\n isRoot\n )}`;\n const close = `>` + postfix;\n return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close];\n}\nfunction formatProps(props) {\n const res = [];\n const keys = Object.keys(props);\n keys.slice(0, 3).forEach((key) => {\n res.push(...formatProp(key, props[key]));\n });\n if (keys.length > 3) {\n res.push(` ...`);\n }\n return res;\n}\nfunction formatProp(key, value, raw) {\n if (isString(value)) {\n value = JSON.stringify(value);\n return raw ? value : [`${key}=${value}`];\n } else if (typeof value === \"number\" || typeof value === \"boolean\" || value == null) {\n return raw ? value : [`${key}=${value}`];\n } else if (isRef(value)) {\n value = formatProp(key, toRaw(value.value), true);\n return raw ? value : [`${key}=Ref<`, value, `>`];\n } else if (isFunction(value)) {\n return [`${key}=fn${value.name ? `<${value.name}>` : ``}`];\n } else {\n value = toRaw(value);\n return raw ? value : [`${key}=`, value];\n }\n}\nfunction assertNumber(val, type) {\n if (!!!(process.env.NODE_ENV !== \"production\")) return;\n if (val === void 0) {\n return;\n } else if (typeof val !== \"number\") {\n warn$1(`${type} is not a valid number - got ${JSON.stringify(val)}.`);\n } else if (isNaN(val)) {\n warn$1(`${type} is NaN - the duration expression might be incorrect.`);\n }\n}\n\nconst ErrorCodes = {\n \"SETUP_FUNCTION\": 0,\n \"0\": \"SETUP_FUNCTION\",\n \"RENDER_FUNCTION\": 1,\n \"1\": \"RENDER_FUNCTION\",\n \"NATIVE_EVENT_HANDLER\": 5,\n \"5\": \"NATIVE_EVENT_HANDLER\",\n \"COMPONENT_EVENT_HANDLER\": 6,\n \"6\": \"COMPONENT_EVENT_HANDLER\",\n \"VNODE_HOOK\": 7,\n \"7\": \"VNODE_HOOK\",\n \"DIRECTIVE_HOOK\": 8,\n \"8\": \"DIRECTIVE_HOOK\",\n \"TRANSITION_HOOK\": 9,\n \"9\": \"TRANSITION_HOOK\",\n \"APP_ERROR_HANDLER\": 10,\n \"10\": \"APP_ERROR_HANDLER\",\n \"APP_WARN_HANDLER\": 11,\n \"11\": \"APP_WARN_HANDLER\",\n \"FUNCTION_REF\": 12,\n \"12\": \"FUNCTION_REF\",\n \"ASYNC_COMPONENT_LOADER\": 13,\n \"13\": \"ASYNC_COMPONENT_LOADER\",\n \"SCHEDULER\": 14,\n \"14\": \"SCHEDULER\",\n \"COMPONENT_UPDATE\": 15,\n \"15\": \"COMPONENT_UPDATE\",\n \"APP_UNMOUNT_CLEANUP\": 16,\n \"16\": \"APP_UNMOUNT_CLEANUP\"\n};\nconst ErrorTypeStrings$1 = {\n [\"sp\"]: \"serverPrefetch hook\",\n [\"bc\"]: \"beforeCreate hook\",\n [\"c\"]: \"created hook\",\n [\"bm\"]: \"beforeMount hook\",\n [\"m\"]: \"mounted hook\",\n [\"bu\"]: \"beforeUpdate hook\",\n [\"u\"]: \"updated\",\n [\"bum\"]: \"beforeUnmount hook\",\n [\"um\"]: \"unmounted hook\",\n [\"a\"]: \"activated hook\",\n [\"da\"]: \"deactivated hook\",\n [\"ec\"]: \"errorCaptured hook\",\n [\"rtc\"]: \"renderTracked hook\",\n [\"rtg\"]: \"renderTriggered hook\",\n [0]: \"setup function\",\n [1]: \"render function\",\n [2]: \"watcher getter\",\n [3]: \"watcher callback\",\n [4]: \"watcher cleanup function\",\n [5]: \"native event handler\",\n [6]: \"component event handler\",\n [7]: \"vnode hook\",\n [8]: \"directive hook\",\n [9]: \"transition hook\",\n [10]: \"app errorHandler\",\n [11]: \"app warnHandler\",\n [12]: \"ref function\",\n [13]: \"async component loader\",\n [14]: \"scheduler flush\",\n [15]: \"component update\",\n [16]: \"app unmount cleanup function\"\n};\nfunction callWithErrorHandling(fn, instance, type, args) {\n try {\n return args ? fn(...args) : fn();\n } catch (err) {\n handleError(err, instance, type);\n }\n}\nfunction callWithAsyncErrorHandling(fn, instance, type, args) {\n if (isFunction(fn)) {\n const res = callWithErrorHandling(fn, instance, type, args);\n if (res && isPromise(res)) {\n res.catch((err) => {\n handleError(err, instance, type);\n });\n }\n return res;\n }\n if (isArray(fn)) {\n const values = [];\n for (let i = 0; i < fn.length; i++) {\n values.push(callWithAsyncErrorHandling(fn[i], instance, type, args));\n }\n return values;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `Invalid value type passed to callWithAsyncErrorHandling(): ${typeof fn}`\n );\n }\n}\nfunction handleError(err, instance, type, throwInDev = true) {\n const contextVNode = instance ? instance.vnode : null;\n const { errorHandler, throwUnhandledErrorInProduction } = instance && instance.appContext.config || EMPTY_OBJ;\n if (instance) {\n let cur = instance.parent;\n const exposedInstance = instance.proxy;\n const errorInfo = !!(process.env.NODE_ENV !== \"production\") ? ErrorTypeStrings$1[type] : `https://vuejs.org/error-reference/#runtime-${type}`;\n while (cur) {\n const errorCapturedHooks = cur.ec;\n if (errorCapturedHooks) {\n for (let i = 0; i < errorCapturedHooks.length; i++) {\n if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {\n return;\n }\n }\n }\n cur = cur.parent;\n }\n if (errorHandler) {\n pauseTracking();\n callWithErrorHandling(errorHandler, null, 10, [\n err,\n exposedInstance,\n errorInfo\n ]);\n resetTracking();\n return;\n }\n }\n logError(err, type, contextVNode, throwInDev, throwUnhandledErrorInProduction);\n}\nfunction logError(err, type, contextVNode, throwInDev = true, throwInProd = false) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const info = ErrorTypeStrings$1[type];\n if (contextVNode) {\n pushWarningContext(contextVNode);\n }\n warn$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`);\n if (contextVNode) {\n popWarningContext();\n }\n if (throwInDev) {\n throw err;\n } else {\n console.error(err);\n }\n } else if (throwInProd) {\n throw err;\n } else {\n console.error(err);\n }\n}\n\nconst queue = [];\nlet flushIndex = -1;\nconst pendingPostFlushCbs = [];\nlet activePostFlushCbs = null;\nlet postFlushIndex = 0;\nconst resolvedPromise = /* @__PURE__ */ Promise.resolve();\nlet currentFlushPromise = null;\nconst RECURSION_LIMIT = 100;\nfunction nextTick(fn) {\n const p = currentFlushPromise || resolvedPromise;\n return fn ? p.then(this ? fn.bind(this) : fn) : p;\n}\nfunction findInsertionIndex(id) {\n let start = flushIndex + 1;\n let end = queue.length;\n while (start < end) {\n const middle = start + end >>> 1;\n const middleJob = queue[middle];\n const middleJobId = getId(middleJob);\n if (middleJobId < id || middleJobId === id && middleJob.flags & 2) {\n start = middle + 1;\n } else {\n end = middle;\n }\n }\n return start;\n}\nfunction queueJob(job) {\n if (!(job.flags & 1)) {\n const jobId = getId(job);\n const lastJob = queue[queue.length - 1];\n if (!lastJob || // fast path when the job id is larger than the tail\n !(job.flags & 2) && jobId >= getId(lastJob)) {\n queue.push(job);\n } else {\n queue.splice(findInsertionIndex(jobId), 0, job);\n }\n job.flags |= 1;\n queueFlush();\n }\n}\nfunction queueFlush() {\n if (!currentFlushPromise) {\n currentFlushPromise = resolvedPromise.then(flushJobs);\n }\n}\nfunction queuePostFlushCb(cb) {\n if (!isArray(cb)) {\n if (activePostFlushCbs && cb.id === -1) {\n activePostFlushCbs.splice(postFlushIndex + 1, 0, cb);\n } else if (!(cb.flags & 1)) {\n pendingPostFlushCbs.push(cb);\n cb.flags |= 1;\n }\n } else {\n pendingPostFlushCbs.push(...cb);\n }\n queueFlush();\n}\nfunction flushPreFlushCbs(instance, seen, i = flushIndex + 1) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n for (; i < queue.length; i++) {\n const cb = queue[i];\n if (cb && cb.flags & 2) {\n if (instance && cb.id !== instance.uid) {\n continue;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && checkRecursiveUpdates(seen, cb)) {\n continue;\n }\n queue.splice(i, 1);\n i--;\n if (cb.flags & 4) {\n cb.flags &= ~1;\n }\n cb();\n if (!(cb.flags & 4)) {\n cb.flags &= ~1;\n }\n }\n }\n}\nfunction flushPostFlushCbs(seen) {\n if (pendingPostFlushCbs.length) {\n const deduped = [...new Set(pendingPostFlushCbs)].sort(\n (a, b) => getId(a) - getId(b)\n );\n pendingPostFlushCbs.length = 0;\n if (activePostFlushCbs) {\n activePostFlushCbs.push(...deduped);\n return;\n }\n activePostFlushCbs = deduped;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {\n const cb = activePostFlushCbs[postFlushIndex];\n if (!!(process.env.NODE_ENV !== \"production\") && checkRecursiveUpdates(seen, cb)) {\n continue;\n }\n if (cb.flags & 4) {\n cb.flags &= ~1;\n }\n if (!(cb.flags & 8)) cb();\n cb.flags &= ~1;\n }\n activePostFlushCbs = null;\n postFlushIndex = 0;\n }\n}\nconst getId = (job) => job.id == null ? job.flags & 2 ? -1 : Infinity : job.id;\nfunction flushJobs(seen) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n const check = !!(process.env.NODE_ENV !== \"production\") ? (job) => checkRecursiveUpdates(seen, job) : NOOP;\n try {\n for (flushIndex = 0; flushIndex < queue.length; flushIndex++) {\n const job = queue[flushIndex];\n if (job && !(job.flags & 8)) {\n if (!!(process.env.NODE_ENV !== \"production\") && check(job)) {\n continue;\n }\n if (job.flags & 4) {\n job.flags &= ~1;\n }\n callWithErrorHandling(\n job,\n job.i,\n job.i ? 15 : 14\n );\n if (!(job.flags & 4)) {\n job.flags &= ~1;\n }\n }\n }\n } finally {\n for (; flushIndex < queue.length; flushIndex++) {\n const job = queue[flushIndex];\n if (job) {\n job.flags &= ~1;\n }\n }\n flushIndex = -1;\n queue.length = 0;\n flushPostFlushCbs(seen);\n currentFlushPromise = null;\n if (queue.length || pendingPostFlushCbs.length) {\n flushJobs(seen);\n }\n }\n}\nfunction checkRecursiveUpdates(seen, fn) {\n const count = seen.get(fn) || 0;\n if (count > RECURSION_LIMIT) {\n const instance = fn.i;\n const componentName = instance && getComponentName(instance.type);\n handleError(\n `Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`,\n null,\n 10\n );\n return true;\n }\n seen.set(fn, count + 1);\n return false;\n}\n\nlet isHmrUpdating = false;\nconst hmrDirtyComponents = /* @__PURE__ */ new Map();\nif (!!(process.env.NODE_ENV !== \"production\")) {\n getGlobalThis().__VUE_HMR_RUNTIME__ = {\n createRecord: tryWrap(createRecord),\n rerender: tryWrap(rerender),\n reload: tryWrap(reload)\n };\n}\nconst map = /* @__PURE__ */ new Map();\nfunction registerHMR(instance) {\n const id = instance.type.__hmrId;\n let record = map.get(id);\n if (!record) {\n createRecord(id, instance.type);\n record = map.get(id);\n }\n record.instances.add(instance);\n}\nfunction unregisterHMR(instance) {\n map.get(instance.type.__hmrId).instances.delete(instance);\n}\nfunction createRecord(id, initialDef) {\n if (map.has(id)) {\n return false;\n }\n map.set(id, {\n initialDef: normalizeClassComponent(initialDef),\n instances: /* @__PURE__ */ new Set()\n });\n return true;\n}\nfunction normalizeClassComponent(component) {\n return isClassComponent(component) ? component.__vccOpts : component;\n}\nfunction rerender(id, newRender) {\n const record = map.get(id);\n if (!record) {\n return;\n }\n record.initialDef.render = newRender;\n [...record.instances].forEach((instance) => {\n if (newRender) {\n instance.render = newRender;\n normalizeClassComponent(instance.type).render = newRender;\n }\n instance.renderCache = [];\n isHmrUpdating = true;\n instance.update();\n isHmrUpdating = false;\n });\n}\nfunction reload(id, newComp) {\n const record = map.get(id);\n if (!record) return;\n newComp = normalizeClassComponent(newComp);\n updateComponentDef(record.initialDef, newComp);\n const instances = [...record.instances];\n for (let i = 0; i < instances.length; i++) {\n const instance = instances[i];\n const oldComp = normalizeClassComponent(instance.type);\n let dirtyInstances = hmrDirtyComponents.get(oldComp);\n if (!dirtyInstances) {\n if (oldComp !== record.initialDef) {\n updateComponentDef(oldComp, newComp);\n }\n hmrDirtyComponents.set(oldComp, dirtyInstances = /* @__PURE__ */ new Set());\n }\n dirtyInstances.add(instance);\n instance.appContext.propsCache.delete(instance.type);\n instance.appContext.emitsCache.delete(instance.type);\n instance.appContext.optionsCache.delete(instance.type);\n if (instance.ceReload) {\n dirtyInstances.add(instance);\n instance.ceReload(newComp.styles);\n dirtyInstances.delete(instance);\n } else if (instance.parent) {\n queueJob(() => {\n isHmrUpdating = true;\n instance.parent.update();\n isHmrUpdating = false;\n dirtyInstances.delete(instance);\n });\n } else if (instance.appContext.reload) {\n instance.appContext.reload();\n } else if (typeof window !== \"undefined\") {\n window.location.reload();\n } else {\n console.warn(\n \"[HMR] Root or manually mounted instance modified. Full reload required.\"\n );\n }\n if (instance.root.ce && instance !== instance.root) {\n instance.root.ce._removeChildStyle(oldComp);\n }\n }\n queuePostFlushCb(() => {\n hmrDirtyComponents.clear();\n });\n}\nfunction updateComponentDef(oldComp, newComp) {\n extend(oldComp, newComp);\n for (const key in oldComp) {\n if (key !== \"__file\" && !(key in newComp)) {\n delete oldComp[key];\n }\n }\n}\nfunction tryWrap(fn) {\n return (id, arg) => {\n try {\n return fn(id, arg);\n } catch (e) {\n console.error(e);\n console.warn(\n `[HMR] Something went wrong during Vue component hot-reload. Full reload required.`\n );\n }\n };\n}\n\nlet devtools$1;\nlet buffer = [];\nlet devtoolsNotInstalled = false;\nfunction emit$1(event, ...args) {\n if (devtools$1) {\n devtools$1.emit(event, ...args);\n } else if (!devtoolsNotInstalled) {\n buffer.push({ event, args });\n }\n}\nfunction setDevtoolsHook$1(hook, target) {\n var _a, _b;\n devtools$1 = hook;\n if (devtools$1) {\n devtools$1.enabled = true;\n buffer.forEach(({ event, args }) => devtools$1.emit(event, ...args));\n buffer = [];\n } else if (\n // handle late devtools injection - only do this if we are in an actual\n // browser environment to avoid the timer handle stalling test runner exit\n // (#4815)\n typeof window !== \"undefined\" && // some envs mock window but not fully\n window.HTMLElement && // also exclude jsdom\n // eslint-disable-next-line no-restricted-syntax\n !((_b = (_a = window.navigator) == null ? void 0 : _a.userAgent) == null ? void 0 : _b.includes(\"jsdom\"))\n ) {\n const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || [];\n replay.push((newHook) => {\n setDevtoolsHook$1(newHook, target);\n });\n setTimeout(() => {\n if (!devtools$1) {\n target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null;\n devtoolsNotInstalled = true;\n buffer = [];\n }\n }, 3e3);\n } else {\n devtoolsNotInstalled = true;\n buffer = [];\n }\n}\nfunction devtoolsInitApp(app, version) {\n emit$1(\"app:init\" /* APP_INIT */, app, version, {\n Fragment,\n Text,\n Comment,\n Static\n });\n}\nfunction devtoolsUnmountApp(app) {\n emit$1(\"app:unmount\" /* APP_UNMOUNT */, app);\n}\nconst devtoolsComponentAdded = /* @__PURE__ */ createDevtoolsComponentHook(\"component:added\" /* COMPONENT_ADDED */);\nconst devtoolsComponentUpdated = /* @__PURE__ */ createDevtoolsComponentHook(\"component:updated\" /* COMPONENT_UPDATED */);\nconst _devtoolsComponentRemoved = /* @__PURE__ */ createDevtoolsComponentHook(\n \"component:removed\" /* COMPONENT_REMOVED */\n);\nconst devtoolsComponentRemoved = (component) => {\n if (devtools$1 && typeof devtools$1.cleanupBuffer === \"function\" && // remove the component if it wasn't buffered\n !devtools$1.cleanupBuffer(component)) {\n _devtoolsComponentRemoved(component);\n }\n};\n/*! #__NO_SIDE_EFFECTS__ */\n// @__NO_SIDE_EFFECTS__\nfunction createDevtoolsComponentHook(hook) {\n return (component) => {\n emit$1(\n hook,\n component.appContext.app,\n component.uid,\n component.parent ? component.parent.uid : void 0,\n component\n );\n };\n}\nconst devtoolsPerfStart = /* @__PURE__ */ createDevtoolsPerformanceHook(\"perf:start\" /* PERFORMANCE_START */);\nconst devtoolsPerfEnd = /* @__PURE__ */ createDevtoolsPerformanceHook(\"perf:end\" /* PERFORMANCE_END */);\nfunction createDevtoolsPerformanceHook(hook) {\n return (component, type, time) => {\n emit$1(hook, component.appContext.app, component.uid, component, type, time);\n };\n}\nfunction devtoolsComponentEmit(component, event, params) {\n emit$1(\n \"component:emit\" /* COMPONENT_EMIT */,\n component.appContext.app,\n component,\n event,\n params\n );\n}\n\nlet currentRenderingInstance = null;\nlet currentScopeId = null;\nfunction setCurrentRenderingInstance(instance) {\n const prev = currentRenderingInstance;\n currentRenderingInstance = instance;\n currentScopeId = instance && instance.type.__scopeId || null;\n return prev;\n}\nfunction pushScopeId(id) {\n currentScopeId = id;\n}\nfunction popScopeId() {\n currentScopeId = null;\n}\nconst withScopeId = (_id) => withCtx;\nfunction withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) {\n if (!ctx) return fn;\n if (fn._n) {\n return fn;\n }\n const renderFnWithContext = (...args) => {\n if (renderFnWithContext._d) {\n setBlockTracking(-1);\n }\n const prevInstance = setCurrentRenderingInstance(ctx);\n let res;\n try {\n res = fn(...args);\n } finally {\n setCurrentRenderingInstance(prevInstance);\n if (renderFnWithContext._d) {\n setBlockTracking(1);\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentUpdated(ctx);\n }\n return res;\n };\n renderFnWithContext._n = true;\n renderFnWithContext._c = true;\n renderFnWithContext._d = true;\n return renderFnWithContext;\n}\n\nfunction validateDirectiveName(name) {\n if (isBuiltInDirective(name)) {\n warn$1(\"Do not use built-in directive ids as custom directive id: \" + name);\n }\n}\nfunction withDirectives(vnode, directives) {\n if (currentRenderingInstance === null) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`withDirectives can only be used inside render functions.`);\n return vnode;\n }\n const instance = getComponentPublicInstance(currentRenderingInstance);\n const bindings = vnode.dirs || (vnode.dirs = []);\n for (let i = 0; i < directives.length; i++) {\n let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i];\n if (dir) {\n if (isFunction(dir)) {\n dir = {\n mounted: dir,\n updated: dir\n };\n }\n if (dir.deep) {\n traverse(value);\n }\n bindings.push({\n dir,\n instance,\n value,\n oldValue: void 0,\n arg,\n modifiers\n });\n }\n }\n return vnode;\n}\nfunction invokeDirectiveHook(vnode, prevVNode, instance, name) {\n const bindings = vnode.dirs;\n const oldBindings = prevVNode && prevVNode.dirs;\n for (let i = 0; i < bindings.length; i++) {\n const binding = bindings[i];\n if (oldBindings) {\n binding.oldValue = oldBindings[i].value;\n }\n let hook = binding.dir[name];\n if (hook) {\n pauseTracking();\n callWithAsyncErrorHandling(hook, instance, 8, [\n vnode.el,\n binding,\n vnode,\n prevVNode\n ]);\n resetTracking();\n }\n }\n}\n\nconst TeleportEndKey = Symbol(\"_vte\");\nconst isTeleport = (type) => type.__isTeleport;\nconst isTeleportDisabled = (props) => props && (props.disabled || props.disabled === \"\");\nconst isTeleportDeferred = (props) => props && (props.defer || props.defer === \"\");\nconst isTargetSVG = (target) => typeof SVGElement !== \"undefined\" && target instanceof SVGElement;\nconst isTargetMathML = (target) => typeof MathMLElement === \"function\" && target instanceof MathMLElement;\nconst resolveTarget = (props, select) => {\n const targetSelector = props && props.to;\n if (isString(targetSelector)) {\n if (!select) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(\n `Current renderer does not support string target for Teleports. (missing querySelector renderer option)`\n );\n return null;\n } else {\n const target = select(targetSelector);\n if (!!(process.env.NODE_ENV !== \"production\") && !target && !isTeleportDisabled(props)) {\n warn$1(\n `Failed to locate Teleport target with selector \"${targetSelector}\". Note the target element must exist before the component is mounted - i.e. the target cannot be rendered by the component itself, and ideally should be outside of the entire Vue component tree.`\n );\n }\n return target;\n }\n } else {\n if (!!(process.env.NODE_ENV !== \"production\") && !targetSelector && !isTeleportDisabled(props)) {\n warn$1(`Invalid Teleport target: ${targetSelector}`);\n }\n return targetSelector;\n }\n};\nconst TeleportImpl = {\n name: \"Teleport\",\n __isTeleport: true,\n process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, internals) {\n const {\n mc: mountChildren,\n pc: patchChildren,\n pbc: patchBlockChildren,\n o: { insert, querySelector, createText, createComment }\n } = internals;\n const disabled = isTeleportDisabled(n2.props);\n let { shapeFlag, children, dynamicChildren } = n2;\n if (!!(process.env.NODE_ENV !== \"production\") && isHmrUpdating) {\n optimized = false;\n dynamicChildren = null;\n }\n if (n1 == null) {\n const placeholder = n2.el = !!(process.env.NODE_ENV !== \"production\") ? createComment(\"teleport start\") : createText(\"\");\n const mainAnchor = n2.anchor = !!(process.env.NODE_ENV !== \"production\") ? createComment(\"teleport end\") : createText(\"\");\n insert(placeholder, container, anchor);\n insert(mainAnchor, container, anchor);\n const mount = (container2, anchor2) => {\n if (shapeFlag & 16) {\n if (parentComponent && parentComponent.isCE) {\n parentComponent.ce._teleportTarget = container2;\n }\n mountChildren(\n children,\n container2,\n anchor2,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n }\n };\n const mountToTarget = () => {\n const target = n2.target = resolveTarget(n2.props, querySelector);\n const targetAnchor = prepareAnchor(target, n2, createText, insert);\n if (target) {\n if (namespace !== \"svg\" && isTargetSVG(target)) {\n namespace = \"svg\";\n } else if (namespace !== \"mathml\" && isTargetMathML(target)) {\n namespace = \"mathml\";\n }\n if (!disabled) {\n mount(target, targetAnchor);\n updateCssVars(n2, false);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\") && !disabled) {\n warn$1(\n \"Invalid Teleport target on mount:\",\n target,\n `(${typeof target})`\n );\n }\n };\n if (disabled) {\n mount(container, mainAnchor);\n updateCssVars(n2, true);\n }\n if (isTeleportDeferred(n2.props)) {\n queuePostRenderEffect(mountToTarget, parentSuspense);\n } else {\n mountToTarget();\n }\n } else {\n n2.el = n1.el;\n n2.targetStart = n1.targetStart;\n const mainAnchor = n2.anchor = n1.anchor;\n const target = n2.target = n1.target;\n const targetAnchor = n2.targetAnchor = n1.targetAnchor;\n const wasDisabled = isTeleportDisabled(n1.props);\n const currentContainer = wasDisabled ? container : target;\n const currentAnchor = wasDisabled ? mainAnchor : targetAnchor;\n if (namespace === \"svg\" || isTargetSVG(target)) {\n namespace = \"svg\";\n } else if (namespace === \"mathml\" || isTargetMathML(target)) {\n namespace = \"mathml\";\n }\n if (dynamicChildren) {\n patchBlockChildren(\n n1.dynamicChildren,\n dynamicChildren,\n currentContainer,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds\n );\n traverseStaticChildren(n1, n2, true);\n } else if (!optimized) {\n patchChildren(\n n1,\n n2,\n currentContainer,\n currentAnchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n false\n );\n }\n if (disabled) {\n if (!wasDisabled) {\n moveTeleport(\n n2,\n container,\n mainAnchor,\n internals,\n 1\n );\n } else {\n if (n2.props && n1.props && n2.props.to !== n1.props.to) {\n n2.props.to = n1.props.to;\n }\n }\n } else {\n if ((n2.props && n2.props.to) !== (n1.props && n1.props.to)) {\n const nextTarget = n2.target = resolveTarget(\n n2.props,\n querySelector\n );\n if (nextTarget) {\n moveTeleport(\n n2,\n nextTarget,\n null,\n internals,\n 0\n );\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n \"Invalid Teleport target on update:\",\n target,\n `(${typeof target})`\n );\n }\n } else if (wasDisabled) {\n moveTeleport(\n n2,\n target,\n targetAnchor,\n internals,\n 1\n );\n }\n }\n updateCssVars(n2, disabled);\n }\n },\n remove(vnode, parentComponent, parentSuspense, { um: unmount, o: { remove: hostRemove } }, doRemove) {\n const {\n shapeFlag,\n children,\n anchor,\n targetStart,\n targetAnchor,\n target,\n props\n } = vnode;\n if (target) {\n hostRemove(targetStart);\n hostRemove(targetAnchor);\n }\n doRemove && hostRemove(anchor);\n if (shapeFlag & 16) {\n const shouldRemove = doRemove || !isTeleportDisabled(props);\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n unmount(\n child,\n parentComponent,\n parentSuspense,\n shouldRemove,\n !!child.dynamicChildren\n );\n }\n }\n },\n move: moveTeleport,\n hydrate: hydrateTeleport\n};\nfunction moveTeleport(vnode, container, parentAnchor, { o: { insert }, m: move }, moveType = 2) {\n if (moveType === 0) {\n insert(vnode.targetAnchor, container, parentAnchor);\n }\n const { el, anchor, shapeFlag, children, props } = vnode;\n const isReorder = moveType === 2;\n if (isReorder) {\n insert(el, container, parentAnchor);\n }\n if (!isReorder || isTeleportDisabled(props)) {\n if (shapeFlag & 16) {\n for (let i = 0; i < children.length; i++) {\n move(\n children[i],\n container,\n parentAnchor,\n 2\n );\n }\n }\n }\n if (isReorder) {\n insert(anchor, container, parentAnchor);\n }\n}\nfunction hydrateTeleport(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized, {\n o: { nextSibling, parentNode, querySelector, insert, createText }\n}, hydrateChildren) {\n const target = vnode.target = resolveTarget(\n vnode.props,\n querySelector\n );\n if (target) {\n const disabled = isTeleportDisabled(vnode.props);\n const targetNode = target._lpa || target.firstChild;\n if (vnode.shapeFlag & 16) {\n if (disabled) {\n vnode.anchor = hydrateChildren(\n nextSibling(node),\n vnode,\n parentNode(node),\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n vnode.targetStart = targetNode;\n vnode.targetAnchor = targetNode && nextSibling(targetNode);\n } else {\n vnode.anchor = nextSibling(node);\n let targetAnchor = targetNode;\n while (targetAnchor) {\n if (targetAnchor && targetAnchor.nodeType === 8) {\n if (targetAnchor.data === \"teleport start anchor\") {\n vnode.targetStart = targetAnchor;\n } else if (targetAnchor.data === \"teleport anchor\") {\n vnode.targetAnchor = targetAnchor;\n target._lpa = vnode.targetAnchor && nextSibling(vnode.targetAnchor);\n break;\n }\n }\n targetAnchor = nextSibling(targetAnchor);\n }\n if (!vnode.targetAnchor) {\n prepareAnchor(target, vnode, createText, insert);\n }\n hydrateChildren(\n targetNode && nextSibling(targetNode),\n vnode,\n target,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n }\n }\n updateCssVars(vnode, disabled);\n }\n return vnode.anchor && nextSibling(vnode.anchor);\n}\nconst Teleport = TeleportImpl;\nfunction updateCssVars(vnode, isDisabled) {\n const ctx = vnode.ctx;\n if (ctx && ctx.ut) {\n let node, anchor;\n if (isDisabled) {\n node = vnode.el;\n anchor = vnode.anchor;\n } else {\n node = vnode.targetStart;\n anchor = vnode.targetAnchor;\n }\n while (node && node !== anchor) {\n if (node.nodeType === 1) node.setAttribute(\"data-v-owner\", ctx.uid);\n node = node.nextSibling;\n }\n ctx.ut();\n }\n}\nfunction prepareAnchor(target, vnode, createText, insert) {\n const targetStart = vnode.targetStart = createText(\"\");\n const targetAnchor = vnode.targetAnchor = createText(\"\");\n targetStart[TeleportEndKey] = targetAnchor;\n if (target) {\n insert(targetStart, target);\n insert(targetAnchor, target);\n }\n return targetAnchor;\n}\n\nconst leaveCbKey = Symbol(\"_leaveCb\");\nconst enterCbKey = Symbol(\"_enterCb\");\nfunction useTransitionState() {\n const state = {\n isMounted: false,\n isLeaving: false,\n isUnmounting: false,\n leavingVNodes: /* @__PURE__ */ new Map()\n };\n onMounted(() => {\n state.isMounted = true;\n });\n onBeforeUnmount(() => {\n state.isUnmounting = true;\n });\n return state;\n}\nconst TransitionHookValidator = [Function, Array];\nconst BaseTransitionPropsValidators = {\n mode: String,\n appear: Boolean,\n persisted: Boolean,\n // enter\n onBeforeEnter: TransitionHookValidator,\n onEnter: TransitionHookValidator,\n onAfterEnter: TransitionHookValidator,\n onEnterCancelled: TransitionHookValidator,\n // leave\n onBeforeLeave: TransitionHookValidator,\n onLeave: TransitionHookValidator,\n onAfterLeave: TransitionHookValidator,\n onLeaveCancelled: TransitionHookValidator,\n // appear\n onBeforeAppear: TransitionHookValidator,\n onAppear: TransitionHookValidator,\n onAfterAppear: TransitionHookValidator,\n onAppearCancelled: TransitionHookValidator\n};\nconst recursiveGetSubtree = (instance) => {\n const subTree = instance.subTree;\n return subTree.component ? recursiveGetSubtree(subTree.component) : subTree;\n};\nconst BaseTransitionImpl = {\n name: `BaseTransition`,\n props: BaseTransitionPropsValidators,\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const state = useTransitionState();\n return () => {\n const children = slots.default && getTransitionRawChildren(slots.default(), true);\n if (!children || !children.length) {\n return;\n }\n const child = findNonCommentChild(children);\n const rawProps = toRaw(props);\n const { mode } = rawProps;\n if (!!(process.env.NODE_ENV !== \"production\") && mode && mode !== \"in-out\" && mode !== \"out-in\" && mode !== \"default\") {\n warn$1(`invalid mode: ${mode}`);\n }\n if (state.isLeaving) {\n return emptyPlaceholder(child);\n }\n const innerChild = getInnerChild$1(child);\n if (!innerChild) {\n return emptyPlaceholder(child);\n }\n let enterHooks = resolveTransitionHooks(\n innerChild,\n rawProps,\n state,\n instance,\n // #11061, ensure enterHooks is fresh after clone\n (hooks) => enterHooks = hooks\n );\n if (innerChild.type !== Comment) {\n setTransitionHooks(innerChild, enterHooks);\n }\n const oldChild = instance.subTree;\n const oldInnerChild = oldChild && getInnerChild$1(oldChild);\n if (oldInnerChild && oldInnerChild.type !== Comment && !isSameVNodeType(innerChild, oldInnerChild) && recursiveGetSubtree(instance).type !== Comment) {\n const leavingHooks = resolveTransitionHooks(\n oldInnerChild,\n rawProps,\n state,\n instance\n );\n setTransitionHooks(oldInnerChild, leavingHooks);\n if (mode === \"out-in\" && innerChild.type !== Comment) {\n state.isLeaving = true;\n leavingHooks.afterLeave = () => {\n state.isLeaving = false;\n if (!(instance.job.flags & 8)) {\n instance.update();\n }\n delete leavingHooks.afterLeave;\n };\n return emptyPlaceholder(child);\n } else if (mode === \"in-out\" && innerChild.type !== Comment) {\n leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => {\n const leavingVNodesCache = getLeavingNodesForType(\n state,\n oldInnerChild\n );\n leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild;\n el[leaveCbKey] = () => {\n earlyRemove();\n el[leaveCbKey] = void 0;\n delete enterHooks.delayedLeave;\n };\n enterHooks.delayedLeave = delayedLeave;\n };\n }\n }\n return child;\n };\n }\n};\nfunction findNonCommentChild(children) {\n let child = children[0];\n if (children.length > 1) {\n let hasFound = false;\n for (const c of children) {\n if (c.type !== Comment) {\n if (!!(process.env.NODE_ENV !== \"production\") && hasFound) {\n warn$1(\n \" can only be used on a single element or component. Use for lists.\"\n );\n break;\n }\n child = c;\n hasFound = true;\n if (!!!(process.env.NODE_ENV !== \"production\")) break;\n }\n }\n }\n return child;\n}\nconst BaseTransition = BaseTransitionImpl;\nfunction getLeavingNodesForType(state, vnode) {\n const { leavingVNodes } = state;\n let leavingVNodesCache = leavingVNodes.get(vnode.type);\n if (!leavingVNodesCache) {\n leavingVNodesCache = /* @__PURE__ */ Object.create(null);\n leavingVNodes.set(vnode.type, leavingVNodesCache);\n }\n return leavingVNodesCache;\n}\nfunction resolveTransitionHooks(vnode, props, state, instance, postClone) {\n const {\n appear,\n mode,\n persisted = false,\n onBeforeEnter,\n onEnter,\n onAfterEnter,\n onEnterCancelled,\n onBeforeLeave,\n onLeave,\n onAfterLeave,\n onLeaveCancelled,\n onBeforeAppear,\n onAppear,\n onAfterAppear,\n onAppearCancelled\n } = props;\n const key = String(vnode.key);\n const leavingVNodesCache = getLeavingNodesForType(state, vnode);\n const callHook = (hook, args) => {\n hook && callWithAsyncErrorHandling(\n hook,\n instance,\n 9,\n args\n );\n };\n const callAsyncHook = (hook, args) => {\n const done = args[1];\n callHook(hook, args);\n if (isArray(hook)) {\n if (hook.every((hook2) => hook2.length <= 1)) done();\n } else if (hook.length <= 1) {\n done();\n }\n };\n const hooks = {\n mode,\n persisted,\n beforeEnter(el) {\n let hook = onBeforeEnter;\n if (!state.isMounted) {\n if (appear) {\n hook = onBeforeAppear || onBeforeEnter;\n } else {\n return;\n }\n }\n if (el[leaveCbKey]) {\n el[leaveCbKey](\n true\n /* cancelled */\n );\n }\n const leavingVNode = leavingVNodesCache[key];\n if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el[leaveCbKey]) {\n leavingVNode.el[leaveCbKey]();\n }\n callHook(hook, [el]);\n },\n enter(el) {\n let hook = onEnter;\n let afterHook = onAfterEnter;\n let cancelHook = onEnterCancelled;\n if (!state.isMounted) {\n if (appear) {\n hook = onAppear || onEnter;\n afterHook = onAfterAppear || onAfterEnter;\n cancelHook = onAppearCancelled || onEnterCancelled;\n } else {\n return;\n }\n }\n let called = false;\n const done = el[enterCbKey] = (cancelled) => {\n if (called) return;\n called = true;\n if (cancelled) {\n callHook(cancelHook, [el]);\n } else {\n callHook(afterHook, [el]);\n }\n if (hooks.delayedLeave) {\n hooks.delayedLeave();\n }\n el[enterCbKey] = void 0;\n };\n if (hook) {\n callAsyncHook(hook, [el, done]);\n } else {\n done();\n }\n },\n leave(el, remove) {\n const key2 = String(vnode.key);\n if (el[enterCbKey]) {\n el[enterCbKey](\n true\n /* cancelled */\n );\n }\n if (state.isUnmounting) {\n return remove();\n }\n callHook(onBeforeLeave, [el]);\n let called = false;\n const done = el[leaveCbKey] = (cancelled) => {\n if (called) return;\n called = true;\n remove();\n if (cancelled) {\n callHook(onLeaveCancelled, [el]);\n } else {\n callHook(onAfterLeave, [el]);\n }\n el[leaveCbKey] = void 0;\n if (leavingVNodesCache[key2] === vnode) {\n delete leavingVNodesCache[key2];\n }\n };\n leavingVNodesCache[key2] = vnode;\n if (onLeave) {\n callAsyncHook(onLeave, [el, done]);\n } else {\n done();\n }\n },\n clone(vnode2) {\n const hooks2 = resolveTransitionHooks(\n vnode2,\n props,\n state,\n instance,\n postClone\n );\n if (postClone) postClone(hooks2);\n return hooks2;\n }\n };\n return hooks;\n}\nfunction emptyPlaceholder(vnode) {\n if (isKeepAlive(vnode)) {\n vnode = cloneVNode(vnode);\n vnode.children = null;\n return vnode;\n }\n}\nfunction getInnerChild$1(vnode) {\n if (!isKeepAlive(vnode)) {\n if (isTeleport(vnode.type) && vnode.children) {\n return findNonCommentChild(vnode.children);\n }\n return vnode;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && vnode.component) {\n return vnode.component.subTree;\n }\n const { shapeFlag, children } = vnode;\n if (children) {\n if (shapeFlag & 16) {\n return children[0];\n }\n if (shapeFlag & 32 && isFunction(children.default)) {\n return children.default();\n }\n }\n}\nfunction setTransitionHooks(vnode, hooks) {\n if (vnode.shapeFlag & 6 && vnode.component) {\n vnode.transition = hooks;\n setTransitionHooks(vnode.component.subTree, hooks);\n } else if (vnode.shapeFlag & 128) {\n vnode.ssContent.transition = hooks.clone(vnode.ssContent);\n vnode.ssFallback.transition = hooks.clone(vnode.ssFallback);\n } else {\n vnode.transition = hooks;\n }\n}\nfunction getTransitionRawChildren(children, keepComment = false, parentKey) {\n let ret = [];\n let keyedFragmentCount = 0;\n for (let i = 0; i < children.length; i++) {\n let child = children[i];\n const key = parentKey == null ? child.key : String(parentKey) + String(child.key != null ? child.key : i);\n if (child.type === Fragment) {\n if (child.patchFlag & 128) keyedFragmentCount++;\n ret = ret.concat(\n getTransitionRawChildren(child.children, keepComment, key)\n );\n } else if (keepComment || child.type !== Comment) {\n ret.push(key != null ? cloneVNode(child, { key }) : child);\n }\n }\n if (keyedFragmentCount > 1) {\n for (let i = 0; i < ret.length; i++) {\n ret[i].patchFlag = -2;\n }\n }\n return ret;\n}\n\n/*! #__NO_SIDE_EFFECTS__ */\n// @__NO_SIDE_EFFECTS__\nfunction defineComponent(options, extraOptions) {\n return isFunction(options) ? (\n // #8236: extend call and options.name access are considered side-effects\n // by Rollup, so we have to wrap it in a pure-annotated IIFE.\n /* @__PURE__ */ (() => extend({ name: options.name }, extraOptions, { setup: options }))()\n ) : options;\n}\n\nfunction useId() {\n const i = getCurrentInstance();\n if (i) {\n return (i.appContext.config.idPrefix || \"v\") + \"-\" + i.ids[0] + i.ids[1]++;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `useId() is called when there is no active component instance to be associated with.`\n );\n }\n return \"\";\n}\nfunction markAsyncBoundary(instance) {\n instance.ids = [instance.ids[0] + instance.ids[2]++ + \"-\", 0, 0];\n}\n\nconst knownTemplateRefs = /* @__PURE__ */ new WeakSet();\nfunction useTemplateRef(key) {\n const i = getCurrentInstance();\n const r = shallowRef(null);\n if (i) {\n const refs = i.refs === EMPTY_OBJ ? i.refs = {} : i.refs;\n let desc;\n if (!!(process.env.NODE_ENV !== \"production\") && (desc = Object.getOwnPropertyDescriptor(refs, key)) && !desc.configurable) {\n warn$1(`useTemplateRef('${key}') already exists.`);\n } else {\n Object.defineProperty(refs, key, {\n enumerable: true,\n get: () => r.value,\n set: (val) => r.value = val\n });\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `useTemplateRef() is called when there is no active component instance to be associated with.`\n );\n }\n const ret = !!(process.env.NODE_ENV !== \"production\") ? readonly(r) : r;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n knownTemplateRefs.add(ret);\n }\n return ret;\n}\n\nfunction setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) {\n if (isArray(rawRef)) {\n rawRef.forEach(\n (r, i) => setRef(\n r,\n oldRawRef && (isArray(oldRawRef) ? oldRawRef[i] : oldRawRef),\n parentSuspense,\n vnode,\n isUnmount\n )\n );\n return;\n }\n if (isAsyncWrapper(vnode) && !isUnmount) {\n return;\n }\n const refValue = vnode.shapeFlag & 4 ? getComponentPublicInstance(vnode.component) : vnode.el;\n const value = isUnmount ? null : refValue;\n const { i: owner, r: ref } = rawRef;\n if (!!(process.env.NODE_ENV !== \"production\") && !owner) {\n warn$1(\n `Missing ref owner context. ref cannot be used on hoisted vnodes. A vnode with ref must be created inside the render function.`\n );\n return;\n }\n const oldRef = oldRawRef && oldRawRef.r;\n const refs = owner.refs === EMPTY_OBJ ? owner.refs = {} : owner.refs;\n const setupState = owner.setupState;\n const rawSetupState = toRaw(setupState);\n const canSetSetupRef = setupState === EMPTY_OBJ ? () => false : (key) => {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (hasOwn(rawSetupState, key) && !isRef(rawSetupState[key])) {\n warn$1(\n `Template ref \"${key}\" used on a non-ref value. It will not work in the production build.`\n );\n }\n if (knownTemplateRefs.has(rawSetupState[key])) {\n return false;\n }\n }\n return hasOwn(rawSetupState, key);\n };\n if (oldRef != null && oldRef !== ref) {\n if (isString(oldRef)) {\n refs[oldRef] = null;\n if (canSetSetupRef(oldRef)) {\n setupState[oldRef] = null;\n }\n } else if (isRef(oldRef)) {\n oldRef.value = null;\n }\n }\n if (isFunction(ref)) {\n callWithErrorHandling(ref, owner, 12, [value, refs]);\n } else {\n const _isString = isString(ref);\n const _isRef = isRef(ref);\n if (_isString || _isRef) {\n const doSet = () => {\n if (rawRef.f) {\n const existing = _isString ? canSetSetupRef(ref) ? setupState[ref] : refs[ref] : ref.value;\n if (isUnmount) {\n isArray(existing) && remove(existing, refValue);\n } else {\n if (!isArray(existing)) {\n if (_isString) {\n refs[ref] = [refValue];\n if (canSetSetupRef(ref)) {\n setupState[ref] = refs[ref];\n }\n } else {\n ref.value = [refValue];\n if (rawRef.k) refs[rawRef.k] = ref.value;\n }\n } else if (!existing.includes(refValue)) {\n existing.push(refValue);\n }\n }\n } else if (_isString) {\n refs[ref] = value;\n if (canSetSetupRef(ref)) {\n setupState[ref] = value;\n }\n } else if (_isRef) {\n ref.value = value;\n if (rawRef.k) refs[rawRef.k] = value;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\"Invalid template ref type:\", ref, `(${typeof ref})`);\n }\n };\n if (value) {\n doSet.id = -1;\n queuePostRenderEffect(doSet, parentSuspense);\n } else {\n doSet();\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\"Invalid template ref type:\", ref, `(${typeof ref})`);\n }\n }\n}\n\nlet hasLoggedMismatchError = false;\nconst logMismatchError = () => {\n if (hasLoggedMismatchError) {\n return;\n }\n console.error(\"Hydration completed but contains mismatches.\");\n hasLoggedMismatchError = true;\n};\nconst isSVGContainer = (container) => container.namespaceURI.includes(\"svg\") && container.tagName !== \"foreignObject\";\nconst isMathMLContainer = (container) => container.namespaceURI.includes(\"MathML\");\nconst getContainerType = (container) => {\n if (container.nodeType !== 1) return void 0;\n if (isSVGContainer(container)) return \"svg\";\n if (isMathMLContainer(container)) return \"mathml\";\n return void 0;\n};\nconst isComment = (node) => node.nodeType === 8;\nfunction createHydrationFunctions(rendererInternals) {\n const {\n mt: mountComponent,\n p: patch,\n o: {\n patchProp,\n createText,\n nextSibling,\n parentNode,\n remove,\n insert,\n createComment\n }\n } = rendererInternals;\n const hydrate = (vnode, container) => {\n if (!container.hasChildNodes()) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Attempting to hydrate existing markup but container is empty. Performing full mount instead.`\n );\n patch(null, vnode, container);\n flushPostFlushCbs();\n container._vnode = vnode;\n return;\n }\n hydrateNode(container.firstChild, vnode, null, null, null);\n flushPostFlushCbs();\n container._vnode = vnode;\n };\n const hydrateNode = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized = false) => {\n optimized = optimized || !!vnode.dynamicChildren;\n const isFragmentStart = isComment(node) && node.data === \"[\";\n const onMismatch = () => handleMismatch(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n isFragmentStart\n );\n const { type, ref, shapeFlag, patchFlag } = vnode;\n let domType = node.nodeType;\n vnode.el = node;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n def(node, \"__vnode\", vnode, true);\n def(node, \"__vueParentComponent\", parentComponent, true);\n }\n if (patchFlag === -2) {\n optimized = false;\n vnode.dynamicChildren = null;\n }\n let nextNode = null;\n switch (type) {\n case Text:\n if (domType !== 3) {\n if (vnode.children === \"\") {\n insert(vnode.el = createText(\"\"), parentNode(node), node);\n nextNode = node;\n } else {\n nextNode = onMismatch();\n }\n } else {\n if (node.data !== vnode.children) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Hydration text mismatch in`,\n node.parentNode,\n `\n - rendered on server: ${JSON.stringify(\n node.data\n )}\n - expected on client: ${JSON.stringify(vnode.children)}`\n );\n logMismatchError();\n node.data = vnode.children;\n }\n nextNode = nextSibling(node);\n }\n break;\n case Comment:\n if (isTemplateNode(node)) {\n nextNode = nextSibling(node);\n replaceNode(\n vnode.el = node.content.firstChild,\n node,\n parentComponent\n );\n } else if (domType !== 8 || isFragmentStart) {\n nextNode = onMismatch();\n } else {\n nextNode = nextSibling(node);\n }\n break;\n case Static:\n if (isFragmentStart) {\n node = nextSibling(node);\n domType = node.nodeType;\n }\n if (domType === 1 || domType === 3) {\n nextNode = node;\n const needToAdoptContent = !vnode.children.length;\n for (let i = 0; i < vnode.staticCount; i++) {\n if (needToAdoptContent)\n vnode.children += nextNode.nodeType === 1 ? nextNode.outerHTML : nextNode.data;\n if (i === vnode.staticCount - 1) {\n vnode.anchor = nextNode;\n }\n nextNode = nextSibling(nextNode);\n }\n return isFragmentStart ? nextSibling(nextNode) : nextNode;\n } else {\n onMismatch();\n }\n break;\n case Fragment:\n if (!isFragmentStart) {\n nextNode = onMismatch();\n } else {\n nextNode = hydrateFragment(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n }\n break;\n default:\n if (shapeFlag & 1) {\n if ((domType !== 1 || vnode.type.toLowerCase() !== node.tagName.toLowerCase()) && !isTemplateNode(node)) {\n nextNode = onMismatch();\n } else {\n nextNode = hydrateElement(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n }\n } else if (shapeFlag & 6) {\n vnode.slotScopeIds = slotScopeIds;\n const container = parentNode(node);\n if (isFragmentStart) {\n nextNode = locateClosingAnchor(node);\n } else if (isComment(node) && node.data === \"teleport start\") {\n nextNode = locateClosingAnchor(node, node.data, \"teleport end\");\n } else {\n nextNode = nextSibling(node);\n }\n mountComponent(\n vnode,\n container,\n null,\n parentComponent,\n parentSuspense,\n getContainerType(container),\n optimized\n );\n if (isAsyncWrapper(vnode)) {\n let subTree;\n if (isFragmentStart) {\n subTree = createVNode(Fragment);\n subTree.anchor = nextNode ? nextNode.previousSibling : container.lastChild;\n } else {\n subTree = node.nodeType === 3 ? createTextVNode(\"\") : createVNode(\"div\");\n }\n subTree.el = node;\n vnode.component.subTree = subTree;\n }\n } else if (shapeFlag & 64) {\n if (domType !== 8) {\n nextNode = onMismatch();\n } else {\n nextNode = vnode.type.hydrate(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized,\n rendererInternals,\n hydrateChildren\n );\n }\n } else if (shapeFlag & 128) {\n nextNode = vnode.type.hydrate(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n getContainerType(parentNode(node)),\n slotScopeIds,\n optimized,\n rendererInternals,\n hydrateNode\n );\n } else if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) {\n warn$1(\"Invalid HostVNode type:\", type, `(${typeof type})`);\n }\n }\n if (ref != null) {\n setRef(ref, null, parentSuspense, vnode);\n }\n return nextNode;\n };\n const hydrateElement = (el, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n optimized = optimized || !!vnode.dynamicChildren;\n const { type, props, patchFlag, shapeFlag, dirs, transition } = vnode;\n const forcePatch = type === \"input\" || type === \"option\";\n if (!!(process.env.NODE_ENV !== \"production\") || forcePatch || patchFlag !== -1) {\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"created\");\n }\n let needCallTransitionHooks = false;\n if (isTemplateNode(el)) {\n needCallTransitionHooks = needTransition(\n null,\n // no need check parentSuspense in hydration\n transition\n ) && parentComponent && parentComponent.vnode.props && parentComponent.vnode.props.appear;\n const content = el.content.firstChild;\n if (needCallTransitionHooks) {\n transition.beforeEnter(content);\n }\n replaceNode(content, el, parentComponent);\n vnode.el = el = content;\n }\n if (shapeFlag & 16 && // skip if element has innerHTML / textContent\n !(props && (props.innerHTML || props.textContent))) {\n let next = hydrateChildren(\n el.firstChild,\n vnode,\n el,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n let hasWarned = false;\n while (next) {\n if (!isMismatchAllowed(el, 1 /* CHILDREN */)) {\n if ((!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && !hasWarned) {\n warn$1(\n `Hydration children mismatch on`,\n el,\n `\nServer rendered element contains more child nodes than client vdom.`\n );\n hasWarned = true;\n }\n logMismatchError();\n }\n const cur = next;\n next = next.nextSibling;\n remove(cur);\n }\n } else if (shapeFlag & 8) {\n let clientText = vnode.children;\n if (clientText[0] === \"\\n\" && (el.tagName === \"PRE\" || el.tagName === \"TEXTAREA\")) {\n clientText = clientText.slice(1);\n }\n if (el.textContent !== clientText) {\n if (!isMismatchAllowed(el, 0 /* TEXT */)) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Hydration text content mismatch on`,\n el,\n `\n - rendered on server: ${el.textContent}\n - expected on client: ${vnode.children}`\n );\n logMismatchError();\n }\n el.textContent = vnode.children;\n }\n }\n if (props) {\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__ || forcePatch || !optimized || patchFlag & (16 | 32)) {\n const isCustomElement = el.tagName.includes(\"-\");\n for (const key in props) {\n if ((!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && // #11189 skip if this node has directives that have created hooks\n // as it could have mutated the DOM in any possible way\n !(dirs && dirs.some((d) => d.dir.created)) && propHasMismatch(el, key, props[key], vnode, parentComponent)) {\n logMismatchError();\n }\n if (forcePatch && (key.endsWith(\"value\") || key === \"indeterminate\") || isOn(key) && !isReservedProp(key) || // force hydrate v-bind with .prop modifiers\n key[0] === \".\" || isCustomElement) {\n patchProp(el, key, null, props[key], void 0, parentComponent);\n }\n }\n } else if (props.onClick) {\n patchProp(\n el,\n \"onClick\",\n null,\n props.onClick,\n void 0,\n parentComponent\n );\n } else if (patchFlag & 4 && isReactive(props.style)) {\n for (const key in props.style) props.style[key];\n }\n }\n let vnodeHooks;\n if (vnodeHooks = props && props.onVnodeBeforeMount) {\n invokeVNodeHook(vnodeHooks, parentComponent, vnode);\n }\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"beforeMount\");\n }\n if ((vnodeHooks = props && props.onVnodeMounted) || dirs || needCallTransitionHooks) {\n queueEffectWithSuspense(() => {\n vnodeHooks && invokeVNodeHook(vnodeHooks, parentComponent, vnode);\n needCallTransitionHooks && transition.enter(el);\n dirs && invokeDirectiveHook(vnode, null, parentComponent, \"mounted\");\n }, parentSuspense);\n }\n }\n return el.nextSibling;\n };\n const hydrateChildren = (node, parentVNode, container, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n optimized = optimized || !!parentVNode.dynamicChildren;\n const children = parentVNode.children;\n const l = children.length;\n let hasWarned = false;\n for (let i = 0; i < l; i++) {\n const vnode = optimized ? children[i] : children[i] = normalizeVNode(children[i]);\n const isText = vnode.type === Text;\n if (node) {\n if (isText && !optimized) {\n if (i + 1 < l && normalizeVNode(children[i + 1]).type === Text) {\n insert(\n createText(\n node.data.slice(vnode.children.length)\n ),\n container,\n nextSibling(node)\n );\n node.data = vnode.children;\n }\n }\n node = hydrateNode(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n } else if (isText && !vnode.children) {\n insert(vnode.el = createText(\"\"), container);\n } else {\n if (!isMismatchAllowed(container, 1 /* CHILDREN */)) {\n if ((!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && !hasWarned) {\n warn$1(\n `Hydration children mismatch on`,\n container,\n `\nServer rendered element contains fewer child nodes than client vdom.`\n );\n hasWarned = true;\n }\n logMismatchError();\n }\n patch(\n null,\n vnode,\n container,\n null,\n parentComponent,\n parentSuspense,\n getContainerType(container),\n slotScopeIds\n );\n }\n }\n return node;\n };\n const hydrateFragment = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n const { slotScopeIds: fragmentSlotScopeIds } = vnode;\n if (fragmentSlotScopeIds) {\n slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds;\n }\n const container = parentNode(node);\n const next = hydrateChildren(\n nextSibling(node),\n vnode,\n container,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n if (next && isComment(next) && next.data === \"]\") {\n return nextSibling(vnode.anchor = next);\n } else {\n logMismatchError();\n insert(vnode.anchor = createComment(`]`), container, next);\n return next;\n }\n };\n const handleMismatch = (node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragment) => {\n if (!isMismatchAllowed(node.parentElement, 1 /* CHILDREN */)) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Hydration node mismatch:\n- rendered on server:`,\n node,\n node.nodeType === 3 ? `(text)` : isComment(node) && node.data === \"[\" ? `(start of fragment)` : ``,\n `\n- expected on client:`,\n vnode.type\n );\n logMismatchError();\n }\n vnode.el = null;\n if (isFragment) {\n const end = locateClosingAnchor(node);\n while (true) {\n const next2 = nextSibling(node);\n if (next2 && next2 !== end) {\n remove(next2);\n } else {\n break;\n }\n }\n }\n const next = nextSibling(node);\n const container = parentNode(node);\n remove(node);\n patch(\n null,\n vnode,\n container,\n next,\n parentComponent,\n parentSuspense,\n getContainerType(container),\n slotScopeIds\n );\n return next;\n };\n const locateClosingAnchor = (node, open = \"[\", close = \"]\") => {\n let match = 0;\n while (node) {\n node = nextSibling(node);\n if (node && isComment(node)) {\n if (node.data === open) match++;\n if (node.data === close) {\n if (match === 0) {\n return nextSibling(node);\n } else {\n match--;\n }\n }\n }\n }\n return node;\n };\n const replaceNode = (newNode, oldNode, parentComponent) => {\n const parentNode2 = oldNode.parentNode;\n if (parentNode2) {\n parentNode2.replaceChild(newNode, oldNode);\n }\n let parent = parentComponent;\n while (parent) {\n if (parent.vnode.el === oldNode) {\n parent.vnode.el = parent.subTree.el = newNode;\n }\n parent = parent.parent;\n }\n };\n const isTemplateNode = (node) => {\n return node.nodeType === 1 && node.tagName === \"TEMPLATE\";\n };\n return [hydrate, hydrateNode];\n}\nfunction propHasMismatch(el, key, clientValue, vnode, instance) {\n let mismatchType;\n let mismatchKey;\n let actual;\n let expected;\n if (key === \"class\") {\n actual = el.getAttribute(\"class\");\n expected = normalizeClass(clientValue);\n if (!isSetEqual(toClassSet(actual || \"\"), toClassSet(expected))) {\n mismatchType = 2 /* CLASS */;\n mismatchKey = `class`;\n }\n } else if (key === \"style\") {\n actual = el.getAttribute(\"style\") || \"\";\n expected = isString(clientValue) ? clientValue : stringifyStyle(normalizeStyle(clientValue));\n const actualMap = toStyleMap(actual);\n const expectedMap = toStyleMap(expected);\n if (vnode.dirs) {\n for (const { dir, value } of vnode.dirs) {\n if (dir.name === \"show\" && !value) {\n expectedMap.set(\"display\", \"none\");\n }\n }\n }\n if (instance) {\n resolveCssVars(instance, vnode, expectedMap);\n }\n if (!isMapEqual(actualMap, expectedMap)) {\n mismatchType = 3 /* STYLE */;\n mismatchKey = \"style\";\n }\n } else if (el instanceof SVGElement && isKnownSvgAttr(key) || el instanceof HTMLElement && (isBooleanAttr(key) || isKnownHtmlAttr(key))) {\n if (isBooleanAttr(key)) {\n actual = el.hasAttribute(key);\n expected = includeBooleanAttr(clientValue);\n } else if (clientValue == null) {\n actual = el.hasAttribute(key);\n expected = false;\n } else {\n if (el.hasAttribute(key)) {\n actual = el.getAttribute(key);\n } else if (key === \"value\" && el.tagName === \"TEXTAREA\") {\n actual = el.value;\n } else {\n actual = false;\n }\n expected = isRenderableAttrValue(clientValue) ? String(clientValue) : false;\n }\n if (actual !== expected) {\n mismatchType = 4 /* ATTRIBUTE */;\n mismatchKey = key;\n }\n }\n if (mismatchType != null && !isMismatchAllowed(el, mismatchType)) {\n const format = (v) => v === false ? `(not rendered)` : `${mismatchKey}=\"${v}\"`;\n const preSegment = `Hydration ${MismatchTypeString[mismatchType]} mismatch on`;\n const postSegment = `\n - rendered on server: ${format(actual)}\n - expected on client: ${format(expected)}\n Note: this mismatch is check-only. The DOM will not be rectified in production due to performance overhead.\n You should fix the source of the mismatch.`;\n {\n warn$1(preSegment, el, postSegment);\n }\n return true;\n }\n return false;\n}\nfunction toClassSet(str) {\n return new Set(str.trim().split(/\\s+/));\n}\nfunction isSetEqual(a, b) {\n if (a.size !== b.size) {\n return false;\n }\n for (const s of a) {\n if (!b.has(s)) {\n return false;\n }\n }\n return true;\n}\nfunction toStyleMap(str) {\n const styleMap = /* @__PURE__ */ new Map();\n for (const item of str.split(\";\")) {\n let [key, value] = item.split(\":\");\n key = key.trim();\n value = value && value.trim();\n if (key && value) {\n styleMap.set(key, value);\n }\n }\n return styleMap;\n}\nfunction isMapEqual(a, b) {\n if (a.size !== b.size) {\n return false;\n }\n for (const [key, value] of a) {\n if (value !== b.get(key)) {\n return false;\n }\n }\n return true;\n}\nfunction resolveCssVars(instance, vnode, expectedMap) {\n const root = instance.subTree;\n if (instance.getCssVars && (vnode === root || root && root.type === Fragment && root.children.includes(vnode))) {\n const cssVars = instance.getCssVars();\n for (const key in cssVars) {\n expectedMap.set(\n `--${getEscapedCssVarName(key, false)}`,\n String(cssVars[key])\n );\n }\n }\n if (vnode === root && instance.parent) {\n resolveCssVars(instance.parent, instance.vnode, expectedMap);\n }\n}\nconst allowMismatchAttr = \"data-allow-mismatch\";\nconst MismatchTypeString = {\n [0 /* TEXT */]: \"text\",\n [1 /* CHILDREN */]: \"children\",\n [2 /* CLASS */]: \"class\",\n [3 /* STYLE */]: \"style\",\n [4 /* ATTRIBUTE */]: \"attribute\"\n};\nfunction isMismatchAllowed(el, allowedType) {\n if (allowedType === 0 /* TEXT */ || allowedType === 1 /* CHILDREN */) {\n while (el && !el.hasAttribute(allowMismatchAttr)) {\n el = el.parentElement;\n }\n }\n const allowedAttr = el && el.getAttribute(allowMismatchAttr);\n if (allowedAttr == null) {\n return false;\n } else if (allowedAttr === \"\") {\n return true;\n } else {\n const list = allowedAttr.split(\",\");\n if (allowedType === 0 /* TEXT */ && list.includes(\"children\")) {\n return true;\n }\n return allowedAttr.split(\",\").includes(MismatchTypeString[allowedType]);\n }\n}\n\nconst requestIdleCallback = getGlobalThis().requestIdleCallback || ((cb) => setTimeout(cb, 1));\nconst cancelIdleCallback = getGlobalThis().cancelIdleCallback || ((id) => clearTimeout(id));\nconst hydrateOnIdle = (timeout = 1e4) => (hydrate) => {\n const id = requestIdleCallback(hydrate, { timeout });\n return () => cancelIdleCallback(id);\n};\nfunction elementIsVisibleInViewport(el) {\n const { top, left, bottom, right } = el.getBoundingClientRect();\n const { innerHeight, innerWidth } = window;\n return (top > 0 && top < innerHeight || bottom > 0 && bottom < innerHeight) && (left > 0 && left < innerWidth || right > 0 && right < innerWidth);\n}\nconst hydrateOnVisible = (opts) => (hydrate, forEach) => {\n const ob = new IntersectionObserver((entries) => {\n for (const e of entries) {\n if (!e.isIntersecting) continue;\n ob.disconnect();\n hydrate();\n break;\n }\n }, opts);\n forEach((el) => {\n if (!(el instanceof Element)) return;\n if (elementIsVisibleInViewport(el)) {\n hydrate();\n ob.disconnect();\n return false;\n }\n ob.observe(el);\n });\n return () => ob.disconnect();\n};\nconst hydrateOnMediaQuery = (query) => (hydrate) => {\n if (query) {\n const mql = matchMedia(query);\n if (mql.matches) {\n hydrate();\n } else {\n mql.addEventListener(\"change\", hydrate, { once: true });\n return () => mql.removeEventListener(\"change\", hydrate);\n }\n }\n};\nconst hydrateOnInteraction = (interactions = []) => (hydrate, forEach) => {\n if (isString(interactions)) interactions = [interactions];\n let hasHydrated = false;\n const doHydrate = (e) => {\n if (!hasHydrated) {\n hasHydrated = true;\n teardown();\n hydrate();\n e.target.dispatchEvent(new e.constructor(e.type, e));\n }\n };\n const teardown = () => {\n forEach((el) => {\n for (const i of interactions) {\n el.removeEventListener(i, doHydrate);\n }\n });\n };\n forEach((el) => {\n for (const i of interactions) {\n el.addEventListener(i, doHydrate, { once: true });\n }\n });\n return teardown;\n};\nfunction forEachElement(node, cb) {\n if (isComment(node) && node.data === \"[\") {\n let depth = 1;\n let next = node.nextSibling;\n while (next) {\n if (next.nodeType === 1) {\n const result = cb(next);\n if (result === false) {\n break;\n }\n } else if (isComment(next)) {\n if (next.data === \"]\") {\n if (--depth === 0) break;\n } else if (next.data === \"[\") {\n depth++;\n }\n }\n next = next.nextSibling;\n }\n } else {\n cb(node);\n }\n}\n\nconst isAsyncWrapper = (i) => !!i.type.__asyncLoader;\n/*! #__NO_SIDE_EFFECTS__ */\n// @__NO_SIDE_EFFECTS__\nfunction defineAsyncComponent(source) {\n if (isFunction(source)) {\n source = { loader: source };\n }\n const {\n loader,\n loadingComponent,\n errorComponent,\n delay = 200,\n hydrate: hydrateStrategy,\n timeout,\n // undefined = never times out\n suspensible = true,\n onError: userOnError\n } = source;\n let pendingRequest = null;\n let resolvedComp;\n let retries = 0;\n const retry = () => {\n retries++;\n pendingRequest = null;\n return load();\n };\n const load = () => {\n let thisRequest;\n return pendingRequest || (thisRequest = pendingRequest = loader().catch((err) => {\n err = err instanceof Error ? err : new Error(String(err));\n if (userOnError) {\n return new Promise((resolve, reject) => {\n const userRetry = () => resolve(retry());\n const userFail = () => reject(err);\n userOnError(err, userRetry, userFail, retries + 1);\n });\n } else {\n throw err;\n }\n }).then((comp) => {\n if (thisRequest !== pendingRequest && pendingRequest) {\n return pendingRequest;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && !comp) {\n warn$1(\n `Async component loader resolved to undefined. If you are using retry(), make sure to return its return value.`\n );\n }\n if (comp && (comp.__esModule || comp[Symbol.toStringTag] === \"Module\")) {\n comp = comp.default;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && comp && !isObject(comp) && !isFunction(comp)) {\n throw new Error(`Invalid async component load result: ${comp}`);\n }\n resolvedComp = comp;\n return comp;\n }));\n };\n return defineComponent({\n name: \"AsyncComponentWrapper\",\n __asyncLoader: load,\n __asyncHydrate(el, instance, hydrate) {\n const doHydrate = hydrateStrategy ? () => {\n const teardown = hydrateStrategy(\n hydrate,\n (cb) => forEachElement(el, cb)\n );\n if (teardown) {\n (instance.bum || (instance.bum = [])).push(teardown);\n }\n } : hydrate;\n if (resolvedComp) {\n doHydrate();\n } else {\n load().then(() => !instance.isUnmounted && doHydrate());\n }\n },\n get __asyncResolved() {\n return resolvedComp;\n },\n setup() {\n const instance = currentInstance;\n markAsyncBoundary(instance);\n if (resolvedComp) {\n return () => createInnerComp(resolvedComp, instance);\n }\n const onError = (err) => {\n pendingRequest = null;\n handleError(\n err,\n instance,\n 13,\n !errorComponent\n );\n };\n if (suspensible && instance.suspense || isInSSRComponentSetup) {\n return load().then((comp) => {\n return () => createInnerComp(comp, instance);\n }).catch((err) => {\n onError(err);\n return () => errorComponent ? createVNode(errorComponent, {\n error: err\n }) : null;\n });\n }\n const loaded = ref(false);\n const error = ref();\n const delayed = ref(!!delay);\n if (delay) {\n setTimeout(() => {\n delayed.value = false;\n }, delay);\n }\n if (timeout != null) {\n setTimeout(() => {\n if (!loaded.value && !error.value) {\n const err = new Error(\n `Async component timed out after ${timeout}ms.`\n );\n onError(err);\n error.value = err;\n }\n }, timeout);\n }\n load().then(() => {\n loaded.value = true;\n if (instance.parent && isKeepAlive(instance.parent.vnode)) {\n instance.parent.update();\n }\n }).catch((err) => {\n onError(err);\n error.value = err;\n });\n return () => {\n if (loaded.value && resolvedComp) {\n return createInnerComp(resolvedComp, instance);\n } else if (error.value && errorComponent) {\n return createVNode(errorComponent, {\n error: error.value\n });\n } else if (loadingComponent && !delayed.value) {\n return createVNode(loadingComponent);\n }\n };\n }\n });\n}\nfunction createInnerComp(comp, parent) {\n const { ref: ref2, props, children, ce } = parent.vnode;\n const vnode = createVNode(comp, props, children);\n vnode.ref = ref2;\n vnode.ce = ce;\n delete parent.vnode.ce;\n return vnode;\n}\n\nconst isKeepAlive = (vnode) => vnode.type.__isKeepAlive;\nconst KeepAliveImpl = {\n name: `KeepAlive`,\n // Marker for special handling inside the renderer. We are not using a ===\n // check directly on KeepAlive in the renderer, because importing it directly\n // would prevent it from being tree-shaken.\n __isKeepAlive: true,\n props: {\n include: [String, RegExp, Array],\n exclude: [String, RegExp, Array],\n max: [String, Number]\n },\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const sharedContext = instance.ctx;\n if (!sharedContext.renderer) {\n return () => {\n const children = slots.default && slots.default();\n return children && children.length === 1 ? children[0] : children;\n };\n }\n const cache = /* @__PURE__ */ new Map();\n const keys = /* @__PURE__ */ new Set();\n let current = null;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n instance.__v_cache = cache;\n }\n const parentSuspense = instance.suspense;\n const {\n renderer: {\n p: patch,\n m: move,\n um: _unmount,\n o: { createElement }\n }\n } = sharedContext;\n const storageContainer = createElement(\"div\");\n sharedContext.activate = (vnode, container, anchor, namespace, optimized) => {\n const instance2 = vnode.component;\n move(vnode, container, anchor, 0, parentSuspense);\n patch(\n instance2.vnode,\n vnode,\n container,\n anchor,\n instance2,\n parentSuspense,\n namespace,\n vnode.slotScopeIds,\n optimized\n );\n queuePostRenderEffect(() => {\n instance2.isDeactivated = false;\n if (instance2.a) {\n invokeArrayFns(instance2.a);\n }\n const vnodeHook = vnode.props && vnode.props.onVnodeMounted;\n if (vnodeHook) {\n invokeVNodeHook(vnodeHook, instance2.parent, vnode);\n }\n }, parentSuspense);\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentAdded(instance2);\n }\n };\n sharedContext.deactivate = (vnode) => {\n const instance2 = vnode.component;\n invalidateMount(instance2.m);\n invalidateMount(instance2.a);\n move(vnode, storageContainer, null, 1, parentSuspense);\n queuePostRenderEffect(() => {\n if (instance2.da) {\n invokeArrayFns(instance2.da);\n }\n const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted;\n if (vnodeHook) {\n invokeVNodeHook(vnodeHook, instance2.parent, vnode);\n }\n instance2.isDeactivated = true;\n }, parentSuspense);\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentAdded(instance2);\n }\n };\n function unmount(vnode) {\n resetShapeFlag(vnode);\n _unmount(vnode, instance, parentSuspense, true);\n }\n function pruneCache(filter) {\n cache.forEach((vnode, key) => {\n const name = getComponentName(vnode.type);\n if (name && !filter(name)) {\n pruneCacheEntry(key);\n }\n });\n }\n function pruneCacheEntry(key) {\n const cached = cache.get(key);\n if (cached && (!current || !isSameVNodeType(cached, current))) {\n unmount(cached);\n } else if (current) {\n resetShapeFlag(current);\n }\n cache.delete(key);\n keys.delete(key);\n }\n watch(\n () => [props.include, props.exclude],\n ([include, exclude]) => {\n include && pruneCache((name) => matches(include, name));\n exclude && pruneCache((name) => !matches(exclude, name));\n },\n // prune post-render after `current` has been updated\n { flush: \"post\", deep: true }\n );\n let pendingCacheKey = null;\n const cacheSubtree = () => {\n if (pendingCacheKey != null) {\n if (isSuspense(instance.subTree.type)) {\n queuePostRenderEffect(() => {\n cache.set(pendingCacheKey, getInnerChild(instance.subTree));\n }, instance.subTree.suspense);\n } else {\n cache.set(pendingCacheKey, getInnerChild(instance.subTree));\n }\n }\n };\n onMounted(cacheSubtree);\n onUpdated(cacheSubtree);\n onBeforeUnmount(() => {\n cache.forEach((cached) => {\n const { subTree, suspense } = instance;\n const vnode = getInnerChild(subTree);\n if (cached.type === vnode.type && cached.key === vnode.key) {\n resetShapeFlag(vnode);\n const da = vnode.component.da;\n da && queuePostRenderEffect(da, suspense);\n return;\n }\n unmount(cached);\n });\n });\n return () => {\n pendingCacheKey = null;\n if (!slots.default) {\n return current = null;\n }\n const children = slots.default();\n const rawVNode = children[0];\n if (children.length > 1) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`KeepAlive should contain exactly one component child.`);\n }\n current = null;\n return children;\n } else if (!isVNode(rawVNode) || !(rawVNode.shapeFlag & 4) && !(rawVNode.shapeFlag & 128)) {\n current = null;\n return rawVNode;\n }\n let vnode = getInnerChild(rawVNode);\n if (vnode.type === Comment) {\n current = null;\n return vnode;\n }\n const comp = vnode.type;\n const name = getComponentName(\n isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : comp\n );\n const { include, exclude, max } = props;\n if (include && (!name || !matches(include, name)) || exclude && name && matches(exclude, name)) {\n vnode.shapeFlag &= ~256;\n current = vnode;\n return rawVNode;\n }\n const key = vnode.key == null ? comp : vnode.key;\n const cachedVNode = cache.get(key);\n if (vnode.el) {\n vnode = cloneVNode(vnode);\n if (rawVNode.shapeFlag & 128) {\n rawVNode.ssContent = vnode;\n }\n }\n pendingCacheKey = key;\n if (cachedVNode) {\n vnode.el = cachedVNode.el;\n vnode.component = cachedVNode.component;\n if (vnode.transition) {\n setTransitionHooks(vnode, vnode.transition);\n }\n vnode.shapeFlag |= 512;\n keys.delete(key);\n keys.add(key);\n } else {\n keys.add(key);\n if (max && keys.size > parseInt(max, 10)) {\n pruneCacheEntry(keys.values().next().value);\n }\n }\n vnode.shapeFlag |= 256;\n current = vnode;\n return isSuspense(rawVNode.type) ? rawVNode : vnode;\n };\n }\n};\nconst KeepAlive = KeepAliveImpl;\nfunction matches(pattern, name) {\n if (isArray(pattern)) {\n return pattern.some((p) => matches(p, name));\n } else if (isString(pattern)) {\n return pattern.split(\",\").includes(name);\n } else if (isRegExp(pattern)) {\n pattern.lastIndex = 0;\n return pattern.test(name);\n }\n return false;\n}\nfunction onActivated(hook, target) {\n registerKeepAliveHook(hook, \"a\", target);\n}\nfunction onDeactivated(hook, target) {\n registerKeepAliveHook(hook, \"da\", target);\n}\nfunction registerKeepAliveHook(hook, type, target = currentInstance) {\n const wrappedHook = hook.__wdc || (hook.__wdc = () => {\n let current = target;\n while (current) {\n if (current.isDeactivated) {\n return;\n }\n current = current.parent;\n }\n return hook();\n });\n injectHook(type, wrappedHook, target);\n if (target) {\n let current = target.parent;\n while (current && current.parent) {\n if (isKeepAlive(current.parent.vnode)) {\n injectToKeepAliveRoot(wrappedHook, type, target, current);\n }\n current = current.parent;\n }\n }\n}\nfunction injectToKeepAliveRoot(hook, type, target, keepAliveRoot) {\n const injected = injectHook(\n type,\n hook,\n keepAliveRoot,\n true\n /* prepend */\n );\n onUnmounted(() => {\n remove(keepAliveRoot[type], injected);\n }, target);\n}\nfunction resetShapeFlag(vnode) {\n vnode.shapeFlag &= ~256;\n vnode.shapeFlag &= ~512;\n}\nfunction getInnerChild(vnode) {\n return vnode.shapeFlag & 128 ? vnode.ssContent : vnode;\n}\n\nfunction injectHook(type, hook, target = currentInstance, prepend = false) {\n if (target) {\n const hooks = target[type] || (target[type] = []);\n const wrappedHook = hook.__weh || (hook.__weh = (...args) => {\n pauseTracking();\n const reset = setCurrentInstance(target);\n const res = callWithAsyncErrorHandling(hook, target, type, args);\n reset();\n resetTracking();\n return res;\n });\n if (prepend) {\n hooks.unshift(wrappedHook);\n } else {\n hooks.push(wrappedHook);\n }\n return wrappedHook;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n const apiName = toHandlerKey(ErrorTypeStrings$1[type].replace(/ hook$/, \"\"));\n warn$1(\n `${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup().` + (` If you are using async setup(), make sure to register lifecycle hooks before the first await statement.` )\n );\n }\n}\nconst createHook = (lifecycle) => (hook, target = currentInstance) => {\n if (!isInSSRComponentSetup || lifecycle === \"sp\") {\n injectHook(lifecycle, (...args) => hook(...args), target);\n }\n};\nconst onBeforeMount = createHook(\"bm\");\nconst onMounted = createHook(\"m\");\nconst onBeforeUpdate = createHook(\n \"bu\"\n);\nconst onUpdated = createHook(\"u\");\nconst onBeforeUnmount = createHook(\n \"bum\"\n);\nconst onUnmounted = createHook(\"um\");\nconst onServerPrefetch = createHook(\n \"sp\"\n);\nconst onRenderTriggered = createHook(\"rtg\");\nconst onRenderTracked = createHook(\"rtc\");\nfunction onErrorCaptured(hook, target = currentInstance) {\n injectHook(\"ec\", hook, target);\n}\n\nconst COMPONENTS = \"components\";\nconst DIRECTIVES = \"directives\";\nfunction resolveComponent(name, maybeSelfReference) {\n return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name;\n}\nconst NULL_DYNAMIC_COMPONENT = Symbol.for(\"v-ndc\");\nfunction resolveDynamicComponent(component) {\n if (isString(component)) {\n return resolveAsset(COMPONENTS, component, false) || component;\n } else {\n return component || NULL_DYNAMIC_COMPONENT;\n }\n}\nfunction resolveDirective(name) {\n return resolveAsset(DIRECTIVES, name);\n}\nfunction resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) {\n const instance = currentRenderingInstance || currentInstance;\n if (instance) {\n const Component = instance.type;\n if (type === COMPONENTS) {\n const selfName = getComponentName(\n Component,\n false\n );\n if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) {\n return Component;\n }\n }\n const res = (\n // local registration\n // check instance[type] first which is resolved for options API\n resolve(instance[type] || Component[type], name) || // global registration\n resolve(instance.appContext[type], name)\n );\n if (!res && maybeSelfReference) {\n return Component;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && warnMissing && !res) {\n const extra = type === COMPONENTS ? `\nIf this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``;\n warn$1(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`);\n }\n return res;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `resolve${capitalize(type.slice(0, -1))} can only be used in render() or setup().`\n );\n }\n}\nfunction resolve(registry, name) {\n return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]);\n}\n\nfunction renderList(source, renderItem, cache, index) {\n let ret;\n const cached = cache && cache[index];\n const sourceIsArray = isArray(source);\n if (sourceIsArray || isString(source)) {\n const sourceIsReactiveArray = sourceIsArray && isReactive(source);\n let needsWrap = false;\n if (sourceIsReactiveArray) {\n needsWrap = !isShallow(source);\n source = shallowReadArray(source);\n }\n ret = new Array(source.length);\n for (let i = 0, l = source.length; i < l; i++) {\n ret[i] = renderItem(\n needsWrap ? toReactive(source[i]) : source[i],\n i,\n void 0,\n cached && cached[i]\n );\n }\n } else if (typeof source === \"number\") {\n if (!!(process.env.NODE_ENV !== \"production\") && !Number.isInteger(source)) {\n warn$1(`The v-for range expect an integer value but got ${source}.`);\n }\n ret = new Array(source);\n for (let i = 0; i < source; i++) {\n ret[i] = renderItem(i + 1, i, void 0, cached && cached[i]);\n }\n } else if (isObject(source)) {\n if (source[Symbol.iterator]) {\n ret = Array.from(\n source,\n (item, i) => renderItem(item, i, void 0, cached && cached[i])\n );\n } else {\n const keys = Object.keys(source);\n ret = new Array(keys.length);\n for (let i = 0, l = keys.length; i < l; i++) {\n const key = keys[i];\n ret[i] = renderItem(source[key], key, i, cached && cached[i]);\n }\n }\n } else {\n ret = [];\n }\n if (cache) {\n cache[index] = ret;\n }\n return ret;\n}\n\nfunction createSlots(slots, dynamicSlots) {\n for (let i = 0; i < dynamicSlots.length; i++) {\n const slot = dynamicSlots[i];\n if (isArray(slot)) {\n for (let j = 0; j < slot.length; j++) {\n slots[slot[j].name] = slot[j].fn;\n }\n } else if (slot) {\n slots[slot.name] = slot.key ? (...args) => {\n const res = slot.fn(...args);\n if (res) res.key = slot.key;\n return res;\n } : slot.fn;\n }\n }\n return slots;\n}\n\nfunction renderSlot(slots, name, props = {}, fallback, noSlotted) {\n if (currentRenderingInstance.ce || currentRenderingInstance.parent && isAsyncWrapper(currentRenderingInstance.parent) && currentRenderingInstance.parent.ce) {\n if (name !== \"default\") props.name = name;\n return openBlock(), createBlock(\n Fragment,\n null,\n [createVNode(\"slot\", props, fallback && fallback())],\n 64\n );\n }\n let slot = slots[name];\n if (!!(process.env.NODE_ENV !== \"production\") && slot && slot.length > 1) {\n warn$1(\n `SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template.`\n );\n slot = () => [];\n }\n if (slot && slot._c) {\n slot._d = false;\n }\n openBlock();\n const validSlotContent = slot && ensureValidVNode(slot(props));\n const slotKey = props.key || // slot content array of a dynamic conditional slot may have a branch\n // key attached in the `createSlots` helper, respect that\n validSlotContent && validSlotContent.key;\n const rendered = createBlock(\n Fragment,\n {\n key: (slotKey && !isSymbol(slotKey) ? slotKey : `_${name}`) + // #7256 force differentiate fallback content from actual content\n (!validSlotContent && fallback ? \"_fb\" : \"\")\n },\n validSlotContent || (fallback ? fallback() : []),\n validSlotContent && slots._ === 1 ? 64 : -2\n );\n if (!noSlotted && rendered.scopeId) {\n rendered.slotScopeIds = [rendered.scopeId + \"-s\"];\n }\n if (slot && slot._c) {\n slot._d = true;\n }\n return rendered;\n}\nfunction ensureValidVNode(vnodes) {\n return vnodes.some((child) => {\n if (!isVNode(child)) return true;\n if (child.type === Comment) return false;\n if (child.type === Fragment && !ensureValidVNode(child.children))\n return false;\n return true;\n }) ? vnodes : null;\n}\n\nfunction toHandlers(obj, preserveCaseIfNecessary) {\n const ret = {};\n if (!!(process.env.NODE_ENV !== \"production\") && !isObject(obj)) {\n warn$1(`v-on with no argument expects an object value.`);\n return ret;\n }\n for (const key in obj) {\n ret[preserveCaseIfNecessary && /[A-Z]/.test(key) ? `on:${key}` : toHandlerKey(key)] = obj[key];\n }\n return ret;\n}\n\nconst getPublicInstance = (i) => {\n if (!i) return null;\n if (isStatefulComponent(i)) return getComponentPublicInstance(i);\n return getPublicInstance(i.parent);\n};\nconst publicPropertiesMap = (\n // Move PURE marker to new line to workaround compiler discarding it\n // due to type annotation\n /* @__PURE__ */ extend(/* @__PURE__ */ Object.create(null), {\n $: (i) => i,\n $el: (i) => i.vnode.el,\n $data: (i) => i.data,\n $props: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.props) : i.props,\n $attrs: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.attrs) : i.attrs,\n $slots: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.slots) : i.slots,\n $refs: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.refs) : i.refs,\n $parent: (i) => getPublicInstance(i.parent),\n $root: (i) => getPublicInstance(i.root),\n $host: (i) => i.ce,\n $emit: (i) => i.emit,\n $options: (i) => __VUE_OPTIONS_API__ ? resolveMergedOptions(i) : i.type,\n $forceUpdate: (i) => i.f || (i.f = () => {\n queueJob(i.update);\n }),\n $nextTick: (i) => i.n || (i.n = nextTick.bind(i.proxy)),\n $watch: (i) => __VUE_OPTIONS_API__ ? instanceWatch.bind(i) : NOOP\n })\n);\nconst isReservedPrefix = (key) => key === \"_\" || key === \"$\";\nconst hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key);\nconst PublicInstanceProxyHandlers = {\n get({ _: instance }, key) {\n if (key === \"__v_skip\") {\n return true;\n }\n const { ctx, setupState, data, props, accessCache, type, appContext } = instance;\n if (!!(process.env.NODE_ENV !== \"production\") && key === \"__isVue\") {\n return true;\n }\n let normalizedProps;\n if (key[0] !== \"$\") {\n const n = accessCache[key];\n if (n !== void 0) {\n switch (n) {\n case 1 /* SETUP */:\n return setupState[key];\n case 2 /* DATA */:\n return data[key];\n case 4 /* CONTEXT */:\n return ctx[key];\n case 3 /* PROPS */:\n return props[key];\n }\n } else if (hasSetupBinding(setupState, key)) {\n accessCache[key] = 1 /* SETUP */;\n return setupState[key];\n } else if (data !== EMPTY_OBJ && hasOwn(data, key)) {\n accessCache[key] = 2 /* DATA */;\n return data[key];\n } else if (\n // only cache other properties when instance has declared (thus stable)\n // props\n (normalizedProps = instance.propsOptions[0]) && hasOwn(normalizedProps, key)\n ) {\n accessCache[key] = 3 /* PROPS */;\n return props[key];\n } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n accessCache[key] = 4 /* CONTEXT */;\n return ctx[key];\n } else if (!__VUE_OPTIONS_API__ || shouldCacheAccess) {\n accessCache[key] = 0 /* OTHER */;\n }\n }\n const publicGetter = publicPropertiesMap[key];\n let cssModule, globalProperties;\n if (publicGetter) {\n if (key === \"$attrs\") {\n track(instance.attrs, \"get\", \"\");\n !!(process.env.NODE_ENV !== \"production\") && markAttrsAccessed();\n } else if (!!(process.env.NODE_ENV !== \"production\") && key === \"$slots\") {\n track(instance, \"get\", key);\n }\n return publicGetter(instance);\n } else if (\n // css module (injected by vue-loader)\n (cssModule = type.__cssModules) && (cssModule = cssModule[key])\n ) {\n return cssModule;\n } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n accessCache[key] = 4 /* CONTEXT */;\n return ctx[key];\n } else if (\n // global properties\n globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key)\n ) {\n {\n return globalProperties[key];\n }\n } else if (!!(process.env.NODE_ENV !== \"production\") && currentRenderingInstance && (!isString(key) || // #1091 avoid internal isRef/isVNode checks on component instance leading\n // to infinite warning loop\n key.indexOf(\"__v\") !== 0)) {\n if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) {\n warn$1(\n `Property ${JSON.stringify(\n key\n )} must be accessed via $data because it starts with a reserved character (\"$\" or \"_\") and is not proxied on the render context.`\n );\n } else if (instance === currentRenderingInstance) {\n warn$1(\n `Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.`\n );\n }\n }\n },\n set({ _: instance }, key, value) {\n const { data, setupState, ctx } = instance;\n if (hasSetupBinding(setupState, key)) {\n setupState[key] = value;\n return true;\n } else if (!!(process.env.NODE_ENV !== \"production\") && setupState.__isScriptSetup && hasOwn(setupState, key)) {\n warn$1(`Cannot mutate \n\n\n","export default \"__VITE_ASSET__DE1_ODpk__\"","\n\n\n\n\n","declare global {\n interface Window {\n env: {\n [key: string]: string;\n };\n }\n}\n\nexport const frontendUrl =\n window.env?.VITE_FRONTEND_URL || import.meta.env.VITE_FRONTEND_URL || null;\n/** Using `/api` as the type to simplify reading logic. It might be wrong in DEV, but not in other environments. */\nexport const apiUrl =\n (window.env?.VITE_API_URL as '/api') ||\n (import.meta.env.VITE_API_URL as '/api') ||\n '/api';\nexport const appVersion =\n window.env?.VITE_APP_VERSION || import.meta.env.VITE_APP_VERSION || null;\n\nexport const env_type: 'dev' | 'test' | 'prod' =\n import.meta.env.MODE === 'development' ||\n window.location.hostname.includes('-dev')\n ? 'dev'\n : window.location.hostname.includes('-test')\n ? 'test'\n : 'prod';\n\nconst supported_locales = ['no', 'en'] as const;\nexport const SUPPORTED_LOCALES = supported_locales as Readonly<\n supported_locale[]\n>;\nexport type supported_locale = (typeof supported_locales)[number];\nexport const B2C_LOCALE: { [key in supported_locale]: string } = {\n no: 'nb',\n en: 'en',\n};\nexport const DEFAULT_LOCALE = 'no' satisfies supported_locale;\n\nexport const notFoundRouteName = 'NotFound';\nexport const socialPageRouteId = 'page';\nexport const editBlocksRouteId = 'admin';\nexport const editBlockVersionsRouteId = 'block_versions';\nexport const apimproductsRouteId = 'apimproducts';\nexport const mySubscriptionsRouteId = 'subscriptions';\n\n// Should equal https://tailwindcss.com/docs/customizing-spacing#default-spacing-scale\nexport const twSpacingScale = [\n '0 (0px)',\n 'px (1px)',\n '0.5 (0.125rem)',\n '1 (0.25rem)',\n '1.5 (0.375rem)',\n '2 (0.5rem)',\n '2.5 (0.625rem)',\n '3 (0.75rem)',\n '3.5 (0.875rem)',\n '4 (1rem)',\n '5 (1.25rem)',\n '6 (1.5rem)',\n '7 (1.75rem)',\n '8 (2rem)',\n '9 (2.25rem)',\n '10 (2.5rem)',\n '11 (2.75rem)',\n '12 (3rem)',\n '14 (3.5rem)',\n '16 (4rem)',\n '20 (5rem)',\n '24 (6rem)',\n '28 (7rem)',\n '32 (8rem)',\n '36 (9rem)',\n '40 (10rem)',\n '44 (11rem)',\n '48 (12rem)',\n '52 (13rem)',\n '56 (14rem)',\n '60 (15rem)',\n '64 (16rem)',\n '72 (18rem)',\n '80 (20rem)',\n '96 (24rem)',\n] as const;\nexport const twSpacingNamedScale = [\n 'xs (20rem)',\n 'sm (24rem)',\n 'md (28rem)',\n 'lg (32rem)',\n 'xl (36rem)',\n '2xl (42rem)',\n '3xl (48rem)',\n '4xl (56rem)',\n '5xl (64rem)',\n '6xl (72rem)',\n '7xl (80rem)',\n 'screen-sm (40rem)',\n 'screen-md (48rem)',\n 'screen-lg (64rem)',\n 'screen-xl (80rem)',\n 'screen-2xl (96rem)',\n] as const;\n/** Can only be used for max-width */\nexport const twSpacingMaxWidthOnlyScale = ['prose '] as const;\n","export async function sleep(ms: number): Promise {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport async function sleepUntil(\n predicate: () => boolean,\n ms: number,\n retryCount: number,\n): Promise {\n let count = 0;\n while (!predicate() && count < retryCount) {\n await sleep(ms);\n count++;\n }\n}\n","import { sleep } from '@/utilities/sleep';\nimport {\n computed,\n ref,\n watchEffect,\n type ComputedRef,\n type Ref,\n watch,\n type WatchSource,\n} from 'vue';\n\nexport type ComposableResult = {\n result: Ref;\n error: Ref;\n loaded: Ref;\n};\nexport type ComposableResultWithRefresh = ComposableResult & {\n refresh?: () => Promise;\n};\nexport type LazyComposableResult = ComposableResultWithRefresh & {\n init: () => Promise;\n result: ComputedRef;\n};\ntype AnyComposableResult =\n | ComposableResult\n | ComposableResultWithRefresh;\n\ntype ComposableData =\n TComposable extends AnyComposableResult ? T : never;\n\nexport type ThrowingComposable<\n TComposable extends AnyComposableResult>,\n> = Omit;\n\nexport function compose(\n asyncFunctionResult: Promise | T | null,\n): ComposableResult {\n const composableResult = initComposable();\n loadComposable(asyncFunctionResult, composableResult);\n return composableResult;\n}\n\nexport function composeWithRefresh(\n asyncFunction: (isRefreshing: boolean) => Promise | TResult,\n autoRefreshTrigger?: WatchSource | WatchSource[],\n resetBeforeRefresh = true,\n): ComposableResultWithRefresh {\n return composeWithRefreshInternal(\n asyncFunction,\n autoRefreshTrigger,\n resetBeforeRefresh,\n );\n}\nfunction composeWithRefreshInternal(\n asyncFunction: (isRefreshing: boolean) => Promise | TResult,\n autoRefreshTrigger?: WatchSource | WatchSource[],\n resetBeforeRefresh = true,\n delayLoad = false,\n): ReturnType> {\n const composable = initComposable(\n asyncFunction,\n resetBeforeRefresh,\n delayLoad,\n );\n if (autoRefreshTrigger) {\n watch(autoRefreshTrigger, () => composable.refresh?.());\n }\n return composable;\n}\nexport function composeLazy(\n asyncFunction: (isRefreshing: boolean) => Promise | TResult,\n autoRefreshTrigger?: WatchSource | WatchSource[],\n resetBeforeRefresh = true,\n): LazyComposableResult {\n const composable = composeWithRefreshInternal(\n asyncFunction,\n autoRefreshTrigger,\n resetBeforeRefresh,\n true,\n );\n const loading = ref(false);\n const lazyInit = async () => {\n while (loading.value && !composable.error.value) {\n await sleep(250);\n }\n if (!composable.loaded.value) {\n loading.value = true;\n await composable.init?.();\n loading.value = false;\n }\n };\n return {\n ...composable,\n init: lazyInit,\n result: computed({\n get() {\n lazyInit();\n return composable.result.value;\n },\n set(newValue) {\n composable.result.value = newValue;\n },\n }),\n };\n}\n\nasync function loadComposable(\n asyncFunctionResult: Promise | T | null,\n composableResult: ComposableResult,\n): Promise {\n try {\n composableResult.loaded.value = false;\n const r = await asyncFunctionResult;\n composableResult.result.value = r;\n composableResult.loaded.value = true;\n } catch (e) {\n composableResult.error.value = e as Error;\n }\n}\n\nfunction initComposable(\n refreshFn?: (isRefreshing: boolean) => Promise | T,\n resetBeforeRefresh = true,\n noLoad = false,\n): ComposableResultWithRefresh & { init?: () => Promise } {\n const result = ref(null) as Ref;\n const error = ref(null);\n const loaded = ref(false);\n let refresh: (() => Promise) | undefined;\n let init: (() => Promise) | undefined;\n if (refreshFn) {\n const load = async (isRefreshing: boolean) => {\n if (resetBeforeRefresh) {\n loaded.value = false;\n result.value = null;\n error.value = null;\n }\n try {\n result.value = await refreshFn(isRefreshing);\n loaded.value = true;\n } catch (err) {\n loaded.value = false;\n result.value = null;\n error.value = err as Error;\n }\n };\n if (!noLoad) load(false);\n refresh = async () => load(true);\n init = async () => load(false);\n }\n return {\n result,\n error,\n refresh,\n loaded,\n init,\n };\n}\n\nexport function throwOnError<\n TComposable extends AnyComposableResult>,\n>(composable: TComposable): ThrowingComposable {\n watchEffect(\n () => {\n if (composable.error.value) throw composable.error.value;\n },\n { flush: 'sync' },\n );\n return { ...composable, error: undefined };\n}\n\nexport function defaultComputed(\n composable: Ref,\n defaultValue: T,\n): ComputedRef {\n return computed(() =>\n composable.value === null ? defaultValue : composable.value,\n );\n}\n","import type {\n RouteItemDTO,\n RouteItem,\n RouteItemWithChildren,\n PartialSome,\n} from './types';\nimport { type ComposableResult, composeWithRefresh } from './composable';\nimport { addLocaleData, type LocaleMessageSet } from '@/i18n';\nimport { sleep } from '@/utilities/sleep';\nimport { apiUrl } from '@/config';\nimport { ref } from 'vue';\n\nexport const titleMsgId = 'menuitems.title';\nexport const descMsgId = 'menuitems.description';\nexport const disclaimerMsgId = 'menuitems.disclaimer';\nconst routeItemsUrl = apiUrl + '/RouteItems';\n\nasync function getRouteItemDTOs(): Promise {\n const response = await fetch(routeItemsUrl, {\n method: 'GET',\n });\n if (!response.ok) throw new Error('error.get_menu_failed');\n return response.json();\n}\nlet menuData: RouteItemDTO[] | null | undefined = undefined;\nconst menuItems = ref();\nlet nonMenuItems: RouteItem[];\nexport const menuLocaleData: LocaleMessageSet = {\n no: {},\n en: {},\n};\n/** Reads the menu and loads data into both the `menuData` and `menuItems` fields in this file. \\\n * It will also populate the `menuLocaleData` field through the use of `rawMenuDataToMenuTree`.\n */\nasync function readMenu(wait: boolean, refresh = false): Promise {\n // This ensures that we only read the menu once\n while (menuData === null || (wait && menuData === undefined)) {\n await sleep(250);\n }\n if (menuData === undefined || refresh) {\n menuData = null;\n menuData = (await getRouteItemDTOs()).sort(\n (a, b) => (a.sortOrder ?? 0) - (b.sortOrder ?? 0),\n );\n menuItems.value = buildMenuTree(\n menuData.filter((i) => i.targetMenu == 'main'),\n rawMenuDataToMenuTree,\n );\n nonMenuItems = buildMenuTree(\n menuData.filter((i) => !i.targetMenu),\n rawMenuDataToMenuTree,\n );\n }\n}\ntype withBranches = { items?: T[] };\ntype tree = T & withBranches;\nfunction flat>(items: T[]): T[] {\n const res: T[] = [];\n for (const i of items) {\n res.push(i);\n if (i.items) res.push(...(flat(i.items) as T[]));\n }\n return res;\n}\nexport function useRouteItems() {\n return composeWithRefresh(async (isRefreshing) => {\n await readMenu(true, isRefreshing);\n return flat(\n buildMenuTree>>(\n menuData,\n (i, _, ch) => ({ ...i, items: ch }),\n true,\n ),\n );\n });\n}\nexport async function getMenuItems(): Promise<{\n menuItems: RouteItem[];\n nonMenuItems: RouteItem[];\n}> {\n await readMenu(false);\n return { menuItems: menuItems.value ?? [], nonMenuItems };\n}\n\nexport function useMenu(): ComposableResult {\n return composeWithRefresh(async () => {\n await readMenu(true);\n return menuItems.value ?? [];\n }, menuItems);\n}\nfunction buildMenuTree(\n items: RouteItemDTO[] | null | undefined,\n handler: (item: RouteItemDTO, parentPath: string, children?: T[]) => T,\n withHeaders = false,\n parentPath = '',\n parentRoute?: string | undefined,\n): T[] {\n if (!items) return [];\n let parentRouteName = parentRoute;\n if (!parentRouteName) parentRouteName = parentPath.split('/').splice(-1)[0];\n if (!parentRouteName) parentRouteName = undefined;\n return items\n .filter((item) => item.parent == parentRouteName)\n .map((item): T | T[] => {\n if (!item.routeName) return handler(item, parentPath);\n const children = buildMenuTree(\n items,\n handler,\n withHeaders,\n parentPath +\n (item.headerType == 'menuOnly' ? '' : '/' + item.routeName),\n item.headerType ? item.routeName : undefined,\n );\n if (item.headerType == 'routeOnly' && !withHeaders) return children;\n return handler(item, parentPath, children);\n })\n .flat() as T[];\n}\nfunction rawMenuDataToMenuTree(\n data: RouteItemDTO,\n parentPath: string,\n children: RouteItem[] = [],\n): RouteItem {\n const targetPath =\n data.routeType === 'hardcoded'\n ? parentPath\n : parentPath + '/' + encodeURIComponent(data.routeName);\n addLocaleData(menuLocaleData, data.text, titleMsgId, data.routeName);\n const routeBaseName =\n data.isDocsListRoute || data.routeType == 'hardcoded'\n ? data.routeName\n : data.targetDoc\n ? `page${data.targetDoc}`\n : undefined;\n const item: RouteItem = {\n ...data,\n text:\n typeof data.text === 'object'\n ? `${titleMsgId}.${data.routeName}`\n : data.text,\n targetPath,\n meta: {\n targetDoc: data.targetDoc,\n translationid: data.routeName,\n customOptions: data.customOptions,\n fullScreen: data.customOptions?.fullscreen,\n },\n routeBaseName,\n };\n const actualAliases = data.aliases?.filter((i) => i != '') ?? [];\n if (actualAliases.length > 0) {\n item.aliases = actualAliases.slice(1);\n if (data.routeType !== 'hardcoded') item.aliases.push(item.targetPath);\n item.targetPath = actualAliases[0].startsWith('/')\n ? actualAliases[0]\n : '/' + actualAliases[0];\n if (item.aliases.length == 0) delete item.aliases;\n } else item.aliases = undefined;\n if (children.length > 0) {\n (item as RouteItemWithChildren).items = children;\n }\n return item;\n}\nexport async function updateRouteItem(\n item: PartialSome,\n): Promise {\n if (!item?.id) throw 'Missing primary key';\n const resp = await fetch(`${routeItemsUrl}/${encodeURIComponent(item.id)}`, {\n method: 'PUT',\n credentials: 'include',\n body: JSON.stringify(item),\n headers: { 'Content-Type': 'application/json' },\n });\n if (!resp.ok) throw new Error('error.update_menu_failed');\n return await resp.json();\n}\nexport async function createRouteItem(\n item: Omit,\n): Promise {\n const resp = await fetch(`${routeItemsUrl}`, {\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify(item),\n headers: { 'Content-Type': 'application/json' },\n });\n if (!resp.ok) throw new Error('error.create_menu_failed');\n return await resp.json();\n}\nexport async function deleteRouteItem(id: number) {\n fetch(`${routeItemsUrl}/${id}`, {\n method: 'DELETE',\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n });\n}\n","import { getMenuItems } from '@/api/menu';\nimport type {\n Guid,\n RouteItem,\n RouteItemDTO,\n RouteItemWithChildren,\n headerType,\n} from '@/api/types';\nimport { DEFAULT_LOCALE } from '@/config';\nimport type { ComposerTranslation } from 'vue-i18n';\nimport type {\n LocationQueryRaw,\n RouteComponent,\n RouteLocationRaw,\n RouteMeta,\n RouteRecordName,\n RouteRecordRaw,\n} from 'vue-router';\n\nconst docsRouteIdentifier = 'DocumentRoute';\nconst docsListRouteIdentifier = 'DocumentListRoute';\n\nexport const defaultBlocksRouteName = 'blocks';\nconst defaultBlocksSearchPageId = '00000000-0000-0000-0000-111111111111';\nconst blocksRouteData = {\n routeType: 'page',\n targetPath: '/blocks',\n routeBaseName: defaultBlocksRouteName,\n text: 'header.items.catalog',\n meta: { targetDoc: defaultBlocksSearchPageId },\n isDocsListRoute: true,\n} as const satisfies routeData & { routeBaseName: string };\nexport function getEmptyDocRoute(\n t: ComposerTranslation,\n): Omit & Pick {\n return {\n ...blocksRouteData,\n text: { [DEFAULT_LOCALE]: t(blocksRouteData.text) },\n routeName: defaultBlocksRouteName,\n };\n}\nexport function getBlocksRouteLink(\n blockId: Guid | undefined,\n query?: LocationQueryRaw,\n hash?: string,\n): RouteLocationRaw {\n return blockId\n ? {\n name: getDocumentRouteFromListRoute(blocksRouteData.routeBaseName),\n params: { blockId },\n query,\n hash,\n }\n : {\n name: getDocumentRouteName(blocksRouteData.routeBaseName, true),\n query,\n hash,\n };\n}\n\ntype routeData = Pick<\n RouteItem,\n | 'routeType'\n | 'aliases'\n | 'targetPath'\n | 'meta'\n | 'text'\n | 'routeBaseName'\n | 'isDocsListRoute'\n>;\n\nexport async function getRouteItems(): Promise {\n const { menuItems, nonMenuItems } = await getMenuItems();\n return [\n ...flattenMenu(menuItems),\n blocksRouteData,\n ...flattenMenu(nonMenuItems),\n ];\n}\nfunction flattenMenu(items: RouteItem[]): routeData[] {\n const menuHeaderTypes: (headerType | undefined)[] = ['menu', 'menuOnly'];\n const result: routeData[] = items.filter(\n (i) => !menuHeaderTypes.includes(i.headerType),\n );\n for (const item of items) {\n if (isRouteItemWithChildren(item)) result.push(...flattenMenu(item.items));\n }\n return result;\n}\n\nexport const isRouteItemWithChildren = (\n item: RouteItem,\n): item is RouteItemWithChildren => {\n return 'items' in item && (item as RouteItemWithChildren).items !== undefined;\n};\nexport function isBlockDocumentRoute(\n routeName: string | RouteRecordName | null | undefined,\n): boolean {\n const rn = routeName?.toString() ?? '';\n return (\n rn.endsWith(docsRouteIdentifier) || rn.endsWith(docsListRouteIdentifier)\n );\n}\nexport function getDocumentRouteFromListRoute(listRouteName?: string): string {\n if (!listRouteName) {\n listRouteName = blocksRouteData.routeBaseName + docsListRouteIdentifier;\n }\n return getDocumentRouteName(listRouteName, false);\n}\n\nexport function removeRouteIdentifier(routeName: string) {\n return routeName\n .replace(docsListRouteIdentifier, '')\n .replace(docsRouteIdentifier, '');\n}\nexport function getDocumentRouteName(\n baseRouteName: string | undefined,\n isListRoute: boolean,\n): string {\n if (!baseRouteName) {\n throw new Error('baseRouteName should not be undefined');\n }\n return (\n removeRouteIdentifier(baseRouteName) +\n (isListRoute ? docsListRouteIdentifier : docsRouteIdentifier)\n );\n}\nexport function getRouteTitle(menuText: string | string[]): string {\n if (Array.isArray(menuText)) menuText = menuText.join(' | ');\n return `${menuText} | Gnist`;\n}\nexport function getRoute(\n s: routeData,\n component: RouteComponent,\n options: {\n addAliases?: boolean;\n isListRoute?: boolean;\n pathSuffix?: string;\n meta?: Partial;\n },\n): RouteRecordRaw {\n const route: RouteRecordRaw = {\n path: `${s.targetPath}${options.pathSuffix ?? ''}`,\n meta: { ...s.meta, ...options.meta, title: `${s.text}` },\n name: getDocumentRouteName(s.routeBaseName, !!options.isListRoute),\n component,\n };\n if (options.addAliases && s.aliases) {\n route.alias = s.aliases?.map((i) => (i.startsWith('/') ? i : '/' + i));\n }\n return route;\n}\n","import type {\n InteractiveImage,\n BlockImage,\n Translated,\n InteractiveImageItem,\n} from '@/api/types';\nimport type { supported_locale } from '@/config';\nimport {\n translateBlockValue,\n type TranslatedWithSource,\n attachSource,\n setBlockLocaleValueInObject,\n setBlockLocaleValue,\n} from '@/i18n';\nimport type { FieldInfo } from '@/views/BlockContentEditorView.vue';\n\nexport function translateInteractiveImage(\n blockValue: InteractiveImage,\n locale: supported_locale,\n addFallbackInfo = false,\n): Translated {\n return {\n initialText: translateBlockValue(\n blockValue.initialText ?? '',\n locale,\n 'markdown',\n addFallbackInfo,\n ),\n background: translateBlockValue(\n blockValue.background,\n locale,\n 'image',\n addFallbackInfo,\n ) as TranslatedWithSource,\n items: blockValue.items.map((item): Translated => {\n const translatedItem: Translated = {\n ...item,\n label: translateBlockValue(\n item.label,\n locale,\n 'singleline',\n addFallbackInfo,\n ),\n extendedText: translateBlockValue(\n item.extendedText ?? '',\n locale,\n 'markdown',\n addFallbackInfo,\n ).trim(),\n image: translateBlockValue(\n item.image,\n locale,\n 'image',\n addFallbackInfo,\n ) as Translated,\n };\n return attachSource(translatedItem, item);\n }),\n };\n}\nexport function setInteractiveImageBlockLocaleValues(\n newValue: Translated,\n source: InteractiveImage | undefined,\n locale: supported_locale,\n): InteractiveImage {\n return {\n initialText: setBlockLocaleValue(\n newValue.initialText,\n source?.initialText,\n locale,\n 'markdown',\n ),\n background: setBlockLocaleValueInObject(\n newValue.background as TranslatedWithSource,\n 'image',\n locale,\n ),\n items: newValue.items.map((item) => {\n const newItem = { ...item };\n delete (newItem as { _source?: unknown })['_source'];\n return {\n ...newItem,\n label: setBlockLocaleValue(\n item.label,\n (item as unknown as TranslatedWithSource)\n ._source?.label,\n locale,\n 'singleline',\n ),\n extendedText: setBlockLocaleValue(\n item.extendedText,\n (item as unknown as TranslatedWithSource)\n ._source?.extendedText,\n locale,\n 'markdown',\n ),\n image: setBlockLocaleValueInObject(\n item.image as TranslatedWithSource,\n 'image',\n locale,\n ),\n };\n }),\n } as InteractiveImage;\n}\n\nexport function getInteractiveImageLocaleUpdates(\n field: InteractiveImage,\n): FieldInfo[] {\n return field.items\n .map((i): FieldInfo[] => [\n { field: i.extendedText, schemaType: 'markdown' },\n { field: i.image, schemaType: 'image' },\n { field: i.label, schemaType: 'singleline' },\n ])\n .flat()\n .concat([\n { field: field.background, schemaType: 'image' },\n { field: field.initialText, schemaType: 'markdown' },\n ]);\n}\n","import type { BlockImage, LayoutItem, Translated } from '@/api/types';\nimport type { supported_locale } from '@/config';\nimport {\n attachSource,\n setBlockLocaleValue,\n setBlockLocaleValueInObject,\n translateBlockValue,\n type TranslatedWithSource,\n} from '@/i18n';\nimport type { FieldInfo } from '@/views/BlockContentEditorView.vue';\n\nexport function translateLayoutItem(\n blockValue: LayoutItem,\n locale: supported_locale,\n addFallbackInfo = false,\n): TranslatedWithSource {\n const translatedItem: Translated = {\n ...blockValue,\n markdown:\n blockValue.markdown !== undefined\n ? translateBlockValue(\n blockValue.markdown,\n locale,\n 'markdown',\n addFallbackInfo,\n )\n : undefined,\n image:\n blockValue.image !== undefined\n ? translateBlockValue(\n blockValue.image,\n locale,\n 'image',\n addFallbackInfo,\n )\n : undefined,\n children: blockValue.children?.map(\n (child): Translated =>\n translateLayoutItem(child, locale, addFallbackInfo),\n ),\n };\n return attachSource(translatedItem, blockValue);\n}\nexport function setLayoutItemBlockLocaleValues(\n newValue: Translated,\n source: LayoutItem | undefined,\n locale: supported_locale,\n): LayoutItem {\n return {\n ...newValue,\n markdown:\n newValue.markdown !== undefined\n ? setBlockLocaleValue(\n newValue.markdown,\n source?.markdown,\n locale,\n 'markdown',\n )\n : undefined,\n image:\n newValue.image !== undefined\n ? setBlockLocaleValueInObject(\n newValue.image as TranslatedWithSource,\n 'image',\n locale,\n )\n : undefined,\n children: newValue.children?.map((child) => {\n const source = (child as TranslatedWithSource)['_source'];\n delete (child as { _source?: unknown })['_source'];\n return setLayoutItemBlockLocaleValues(child, source, locale);\n }),\n } as LayoutItem;\n}\nexport function getLayoutItemLocaleUpdates(field: LayoutItem): FieldInfo[] {\n if (field.children) {\n return field.children.map((c) => getLayoutItemLocaleUpdates(c)).flat();\n } else if (field.markdown) {\n return [{ field: field.markdown, schemaType: 'markdown' }];\n } else {\n return [];\n }\n}\n","import {\n computed,\n isRef,\n nextTick,\n type ComputedRef,\n type Ref,\n type ComputedGetter,\n} from 'vue';\nimport {\n createI18n,\n type Composer,\n type I18nOptions,\n type I18n,\n type LocaleMessageDictionary,\n} from 'vue-i18n';\nimport type { Router, RouteLocationNormalized } from 'vue-router';\nimport {\n type Translated,\n type localeValue,\n type BlockValueLegacyAndArrayItem,\n type BlockValueWithLocaleDate,\n type ObjectBlockValue,\n type BlockLocaleValue,\n type ObjectSchemaType,\n emptyBlockValues,\n type BlockValueItemOnly,\n type SchemaType,\n type InteractiveImage,\n type ComplexBlockValueTypes,\n stringSchemaTypeValues,\n type StringSchemaType,\n complexSchemaTypeValues,\n type ComplexSchemaType,\n type LayoutItem,\n type BlockValueAndArrayItem,\n type BlockValueExceptLegacy,\n type ArrayItem,\n type BlockValue,\n type OnlyArray,\n} from '@/api/types';\nimport { getRouteTitle } from '@/utilities/routeUtils';\nimport {\n DEFAULT_LOCALE,\n SUPPORTED_LOCALES,\n type supported_locale,\n} from '@/config';\nimport {\n setInteractiveImageBlockLocaleValues,\n translateInteractiveImage,\n} from '@/utilities/translateInteractiveImage';\nimport {\n setLayoutItemBlockLocaleValues,\n translateLayoutItem,\n} from '@/utilities/translateLayoutItem';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype CustomI18n = I18n;\nlet i18nInstance: CustomI18n;\nexport function getComposer(): Composer {\n return i18nInstance.global;\n}\nconst locale_storage_key = 'gnist_locale';\nexport function set_locale(\n locale: supported_locale,\n route: RouteLocationNormalized,\n) {\n localStorage.setItem(locale_storage_key, locale);\n setI18nLanguage(i18nInstance, locale);\n if (route.meta?.title) {\n document.title = getRouteTitle(getComposer().t(route.meta.title));\n }\n}\nexport function set_locale_from_query(route: RouteLocationNormalized) {\n const locale = route.query?.['locale'] as supported_locale;\n if (!SUPPORTED_LOCALES.includes(locale)) return;\n set_locale(locale, route);\n}\nexport function setupI18n() {\n let selected_locale = localStorage.getItem(locale_storage_key) ?? '';\n if (!SUPPORTED_LOCALES.includes(selected_locale as supported_locale)) {\n selected_locale = DEFAULT_LOCALE;\n }\n const options = {\n legacy: false,\n locale: selected_locale, // default locale for the user\n\n // if a key is missing from the users's current locale, first try to\n // find it in the default locale\n fallbackLocale: [DEFAULT_LOCALE],\n missingWarn: false,\n } satisfies I18nOptions;\n i18nInstance = createI18n(options);\n\n setI18nLanguage(i18nInstance, options.locale);\n return i18nInstance;\n}\n\nfunction setI18nLanguage(i18n: CustomI18n, locale: string) {\n if (isRef(i18n.global.locale)) {\n i18n.global.locale.value = locale;\n }\n /**\n * NOTE:\n * If you need to specify the language setting for headers, such as the `fetch` API, set it here.\n * The following is an example for axios.\n *\n * axios.defaults.headers.common['Accept-Language'] = locale\n */\n document.querySelector('html')?.setAttribute('lang', locale);\n}\n\nexport async function loadLocaleMessages(i18n: CustomI18n, locale: string) {\n // load locale messages with dynamic import\n const messages = await import(\n /* webpackChunkName: \"locale-[request]\" */ `./locales/${locale}.json`\n );\n\n // set locale and locale message\n i18n.global.setLocaleMessage(locale, messages.default);\n\n return nextTick();\n}\nexport type LocaleMessageSet = {\n [locale in supported_locale]: LocaleMessageDictionary<\n Record\n >;\n};\nexport function addLocaleData(\n localeData: LocaleMessageSet,\n data: string | localeValue | undefined,\n typeId: string,\n itemId: string,\n) {\n if (data !== null && typeof data === 'object') {\n for (const [locale, message] of Object.entries(data)) {\n if (message) {\n let currentLevel = localeData[locale as supported_locale];\n let lastLevel = currentLevel;\n let lastKey = '';\n for (const level of `${typeId}.${itemId}`.split('.')) {\n if (!currentLevel[level]) {\n currentLevel[level] = {};\n }\n lastLevel = currentLevel;\n lastKey = level;\n currentLevel = currentLevel[level] as typeof currentLevel;\n }\n lastLevel[lastKey] = message;\n }\n }\n } else if (typeof data === 'string') {\n addLocaleData(localeData, { no: data }, typeId, itemId);\n }\n}\nexport async function loadDynamicLocaleMessages(\n localeData: LocaleMessageSet,\n router?: Router,\n) {\n for (const [locale, messages] of Object.entries(localeData)) {\n i18nInstance.global.mergeLocaleMessage(locale, messages);\n }\n if (router?.currentRoute.value.meta?.title) {\n document.title = getRouteTitle(\n getComposer().t(router.currentRoute.value.meta.title),\n );\n }\n}\nexport async function addRouterTitleTranslation(router: Router) {\n // This allows for i18n keys to be added as titles in the router\n const composer = getComposer();\n router.afterEach((to) => {\n nextTick(() => {\n if (to.meta.title) {\n document.title = getRouteTitle(composer.t(to.meta.title));\n }\n });\n });\n}\n\nexport type TranslatedWithSource =\n T extends BlockLocaleValue\n ? Translated\n : T extends Array\n ? TranslatedWithSource[]\n : Translated & { _source: T };\nexport function attachSource<\n T extends ObjectBlockValue | ComplexBlockValueTypes,\n TReturn = TranslatedWithSource,\n>(val: Translated, _source: T): TReturn {\n return { ...val, _source } as TReturn;\n}\n\n/** returns a string for localeValue and legacy pure strings, for objects and arrays of objects each item will have the original source attached */\nexport function translateBlockValue<\n TValue extends BlockValueLegacyAndArrayItem,\n>(\n blockValue: TValue,\n locale: supported_locale,\n schemaType: SchemaType,\n addFallbackInfo = false,\n): TranslatedWithSource> {\n type RetType = TranslatedWithSource>;\n // Will only be hit if data is in legacy format\n if (typeof blockValue === 'string') {\n return getTranslatedValueWithFallback(\n { [DEFAULT_LOCALE]: blockValue },\n locale,\n addFallbackInfo,\n ) as Translated & RetType;\n }\n // Standard string values (saved as localeValue)\n if (isLocaleValue(blockValue)) {\n return getTranslatedValueWithFallback(\n blockValue,\n locale,\n addFallbackInfo,\n ) as RetType;\n }\n // Array values (for now \"Step\"), not sure if this will work with a string array (inlcuding an array of localeValue), if that is needed we might need something smarter\n if (Array.isArray(blockValue)) {\n return blockValue.map((i) =>\n translateBlockValue(i, locale, schemaType, addFallbackInfo),\n ) as RetType;\n }\n // Below here, the data object is guaranteed to be an object (and not an array)\n const objBlockValue = blockValue as ObjectBlockValue;\n if (schemaType === 'interactive_image') {\n const translatedValue = translateInteractiveImage(\n blockValue as InteractiveImage,\n locale,\n addFallbackInfo,\n );\n return attachSource(translatedValue, blockValue as InteractiveImage);\n } else if (schemaType === 'layout') {\n return translateLayoutItem(\n blockValue as LayoutItem,\n locale,\n addFallbackInfo,\n ) as RetType;\n }\n if (complexSchemaTypeValues.includes(schemaType as ComplexSchemaType)) {\n throw new Error('Unhandled complex block value type');\n }\n const translatedValue = Object.fromEntries(\n Object.entries(objBlockValue).map(([key, value]) => {\n if (typeof value === 'string') {\n const shouldBeTranslated = isLocaleValue(\n emptyBlockValues[schemaType as ObjectSchemaType]?.[\n key as keyof ObjectBlockValue\n ],\n );\n if (shouldBeTranslated) value = { [DEFAULT_LOCALE]: value };\n }\n return [\n key,\n isLocaleValue(value)\n ? getTranslatedValueWithFallback(value, locale, addFallbackInfo)\n : value,\n ];\n }),\n ) as Translated>; // ComplexBlockValueTypes, array, localeValue and string is handled above\n return attachSource(translatedValue, objBlockValue);\n}\n\nfunction getTranslatedValueWithFallback(\n blockValue: localeValue,\n locale: supported_locale,\n addFallbackInfo: boolean,\n): string | number | Date {\n const savedLocaleToUse: supported_locale =\n locale in blockValue\n ? locale\n : DEFAULT_LOCALE in blockValue\n ? DEFAULT_LOCALE\n : SUPPORTED_LOCALES.find((loc) => loc in blockValue) ?? DEFAULT_LOCALE;\n const value = blockValue[savedLocaleToUse] ?? '';\n if (isNumberOrDate(value)) return value;\n if (savedLocaleToUse !== locale) {\n console.debug(\n `No saved data for \"${locale}\", fallback to saved data in locale \"${savedLocaleToUse}\"`,\n );\n return value === '' || !addFallbackInfo\n ? value\n : getFallbackInfoText(locale, savedLocaleToUse) + value;\n }\n return value;\n}\n\nfunction isNumberOrDate(value: unknown): value is number | Date {\n return (\n typeof value === 'number' ||\n value instanceof Date ||\n !isNaN(parseInt(value?.toString() ?? '')) ||\n !isNaN(Date.parse(value?.toString() ?? ''))\n );\n}\n\nfunction getFallbackInfoText(\n locale: supported_locale,\n savedLocaleToUse: supported_locale,\n excludeLanguage = false,\n) {\n const composer = getComposer();\n const language = composer.t(\n `language.values.${savedLocaleToUse}`,\n {},\n { locale },\n );\n const text = composer.t(\n 'admin.blockProduction.translate.fallbackUsed',\n { language },\n { locale },\n );\n if (excludeLanguage) {\n return text.substring(0, text.indexOf(language));\n }\n return text + '\\n\\n';\n}\n\nfunction startsWithFallbackInfoText(\n locale: supported_locale,\n text: string | undefined,\n) {\n if (typeof text !== 'string') return false;\n const introText = getFallbackInfoText(locale, 'no', true);\n return text?.startsWith(introText) ?? false;\n}\n\nfunction isNewlyAddedFallback(\n locale: supported_locale,\n currentValue: string | undefined,\n newValue: string | undefined,\n) {\n const currentIsFallback = startsWithFallbackInfoText(locale, currentValue);\n const newIsFallback = startsWithFallbackInfoText(locale, newValue);\n return !currentIsFallback && newIsFallback;\n}\n\nfunction ensurePropertyIsLocaleValue(\n sourceObject: T,\n key: keyof T,\n schemaType: ObjectSchemaType,\n) {\n const sourceValue = sourceObject[key];\n // If the old value in the source object is an object, it is either already a localeValue, or it is not something we should translate directly\n if (typeof sourceValue === 'object') return;\n const shouldBeTranslated = isLocaleValue(\n (emptyBlockValues[schemaType] as T)[key],\n );\n if (shouldBeTranslated) {\n // Set property as localeValue if it should be (and is not)\n (sourceObject[key] as localeValue) = {\n [DEFAULT_LOCALE]: sourceValue as string,\n };\n }\n}\nfunction setPossiblyTranslatableProperty(\n newValue: TranslatedWithSource,\n sourceObject: T,\n key: keyof T,\n locale: supported_locale,\n schemaType: ObjectSchemaType,\n): { newValue: string; currentValue: string | undefined } | null {\n ensurePropertyIsLocaleValue(sourceObject, key, schemaType);\n const newProperty = newValue[key as unknown as keyof TranslatedWithSource];\n if (isLocaleValue(sourceObject[key])) {\n const currentValue = (sourceObject[key] as localeValue)[locale];\n (sourceObject[key] as localeValue)[locale] = newProperty as string; // Update value for current locale\n return { newValue: newProperty as string, currentValue };\n } else {\n (sourceObject[key] as unknown) = newProperty; // Typing breaks down here, but it should be okay.\n return null;\n }\n}\nfunction hasArrayItems(\n val: TranslatedWithSource>,\n): val is OnlyArray<\n TranslatedWithSource>\n> {\n return Array.isArray(val);\n}\nexport function setBlockLocaleValueInObject<\n T extends Exclude,\n>(\n newValue: TranslatedWithSource,\n schemaType: ObjectSchemaType,\n locale: supported_locale,\n): T extends BlockValueItemOnly ? BlockValueWithLocaleDate : T {\n type RetType = T extends BlockValueItemOnly ? BlockValueWithLocaleDate : T;\n if (hasArrayItems(newValue)) {\n return newValue.map((arrVal) =>\n setBlockLocaleValueInObject>(\n arrVal,\n schemaType,\n locale,\n ),\n ) as unknown as RetType; // This typing is too much for typescript to handle - but it works out in the end!\n }\n if (complexSchemaTypeValues.includes(schemaType as ComplexSchemaType)) {\n const retVal: ComplexBlockValueTypes | undefined = undefined;\n const hasNewlyAddedFallback = false; // TODO: handle this bit (if needed)\n const source = (\n newValue as { _source: ComplexBlockValueTypes & BlockValueItemOnly }\n )['_source'];\n delete (newValue as { _source?: unknown })['_source'];\n if (schemaType === 'interactive_image') {\n return setInteractiveImageBlockLocaleValues(\n newValue as Translated,\n source as InteractiveImage,\n locale,\n ) as RetType;\n } else if (schemaType === 'layout') {\n return setLayoutItemBlockLocaleValues(\n newValue as Translated,\n source as LayoutItem,\n locale,\n ) as RetType;\n }\n if (retVal === undefined) {\n throw new Error(\n `Missing implementation to handle setting of complex block value type: ${schemaType}`,\n );\n }\n return addLocaleUpdates(retVal, source, locale, hasNewlyAddedFallback);\n }\n type RemainingBlockValueTypes = Exclude<\n typeof newValue._source,\n ComplexBlockValueTypes\n >;\n const source = {\n ...(newValue._source ?? newValue),\n } as RemainingBlockValueTypes;\n let hasNewlyAddedFallback = false;\n for (const key of Object.keys(newValue)) {\n const result = setPossiblyTranslatableProperty(\n newValue as TranslatedWithSource,\n source,\n key as keyof typeof newValue._source,\n locale,\n schemaType,\n );\n if (isNewlyAddedFallback(locale, result?.currentValue, result?.newValue)) {\n hasNewlyAddedFallback = true;\n }\n }\n delete (source as { _source?: unknown })['_source'];\n return addLocaleUpdates(\n source,\n newValue._source as RemainingBlockValueTypes,\n locale,\n hasNewlyAddedFallback,\n ) as RetType;\n}\nexport function setBlockLocaleValue(\n newValue: string,\n oldValue: BlockLocaleValue | null | undefined,\n locale: supported_locale,\n schemaType: SchemaType,\n): localeValue {\n // A little assertion to make sure we didn't do this totally wrong\n if (!stringSchemaTypeValues.includes(schemaType as StringSchemaType)) {\n throw 'Got string value for non-string schema type, this should not happen!';\n }\n const baseModelValue =\n typeof oldValue === 'string' || !oldValue\n ? { [DEFAULT_LOCALE]: oldValue ?? '' }\n : (oldValue as localeValue);\n const hasNewlyAddedFallback = isNewlyAddedFallback(\n locale,\n baseModelValue[locale],\n newValue,\n );\n return addLocaleUpdates(\n { ...baseModelValue, [locale]: newValue },\n baseModelValue,\n locale,\n hasNewlyAddedFallback,\n );\n}\nexport function addLocaleUpdates(\n source: T,\n updatesSource: BlockValueItemOnly,\n locale: supported_locale,\n hasNewlyAddedFallback: boolean,\n): BlockValueWithLocaleDate {\n if (hasNewlyAddedFallback) {\n // If adding a new language, we should mark all existing languages as updated to avoid them being listed as outdated\n const updatedTime = new Date();\n const retval = {\n ...source,\n localeUpdates: { [DEFAULT_LOCALE]: updatedTime, [locale]: updatedTime },\n } satisfies BlockValueWithLocaleDate;\n const existingUpdates = (updatesSource as BlockValueWithLocaleDate)\n ?.localeUpdates;\n for (const loc in existingUpdates) {\n retval.localeUpdates[loc as supported_locale] = updatedTime;\n }\n return retval;\n }\n return {\n ...source,\n localeUpdates: {\n ...(updatesSource as BlockValueWithLocaleDate)?.localeUpdates,\n [locale]: new Date(),\n },\n };\n}\n\nexport function translateStringOrLocaleWithDefault(\n value:\n | string\n | localeValue\n | undefined\n | Ref\n | ComputedRef\n | ComputedGetter,\n defaultValue: string,\n): ComputedRef {\n return computed(\n () => translateStringOrLocale(value).value ?? getComposer().t(defaultValue),\n );\n}\nexport function translateStringOrLocale<\n T extends\n | string\n | localeValue\n | undefined\n | Ref\n | ComputedRef\n | ComputedGetter,\n>(\n value:\n | T\n | (\n | string\n | localeValue\n | undefined\n | Ref\n | ComputedRef\n | ComputedGetter\n ),\n): ComputedRef {\n if (typeof value === 'function') {\n value = computed(value);\n }\n return computed(() =>\n isRef(value)\n ? translateStringOrLocale(value.value).value\n : value === undefined\n ? undefined\n : typeof value === 'string'\n ? value\n : (value as localeValue)[\n i18nInstance.global.locale.value as supported_locale\n ] ?? (value as localeValue)[DEFAULT_LOCALE],\n ) as ComputedRef;\n}\n\nfunction isLocaleValue(value: unknown): value is localeValue {\n return (\n !!value &&\n typeof value === 'object' &&\n (DEFAULT_LOCALE in value || !!SUPPORTED_LOCALES.find((loc) => loc in value))\n );\n}\n","import type { Action, Subject } from '@/abilities';\nimport type { cardTemplateIds, pageTemplateIds } from '@/renderTemplates';\nimport type { Component } from 'vue';\nimport type { LocationQuery, RouteMeta } from 'vue-router';\nimport type { RoleName, RoleType } from './auth';\nimport { DEFAULT_LOCALE, type supported_locale } from '@/config';\nimport { translateStringOrLocaleWithDefault } from '@/i18n';\nimport type { VoteDirection } from '@/enums/VoteDirection';\nimport type {\n SuggestionInternalStatus,\n VssStatus,\n} from '@/utilities/getSuggestionStatus';\nimport type { TranslatedBlock } from './blocks';\nimport type {\n DoclistVueAttributes,\n SearchbarVueAttributes,\n} from '@/utilities/markdown/GnistMarkdownExtension';\nimport type { getBlobUrl } from './blob';\nimport type { FieldSetKey, TextSetKey } from './field_labels';\n\nexport type KeysOfUnion = T extends T ? keyof T : never; // Source: https://stackoverflow.com/a/49402091\n\n/** Source: https://stackoverflow.com/a/71353081\n * This is a tail-recursive template literal type which uses a type parameter A to accumulate the result.\n * If T is of the form L+S+R for some (possibly empty) \"left part\" L and some (possibly empty) \"right part\" R,\n * then you want to use L as-is, replace S with D, and then continue doing Replacements on R.\n * Otherwise, T doesn't contain S and you just want to use T as-is. */\nexport type Replace<\n T extends string,\n S extends string,\n D extends string,\n A extends string = '',\n> = T extends `${infer L}${S}${infer R}`\n ? Replace\n : `${A}${T}`;\n\n/** Returns the type of TInObject without any properties of type TKeyType */\nexport type ExcludeKeysWithValsOfType = {\n [TKey in keyof TInObject as NonNullable extends TKeyType\n ? never\n : TKey]: TInObject[TKey];\n};\n/** Returns the type of TInObject, but limitied to properties of type TKeyType */\nexport type OnlyKeysWithValsOfType = {\n [TKey in keyof TInObject as NonNullable extends TKeyType\n ? TKey\n : never]: TInObject[TKey];\n};\n/** Returns the type of TInObject, but limited to properties that extends the type TKeyType, but does not extend TNotKeyType.\n * Example: if you have a property that is either type X or string (), KeysWithValsOfType will also return pure string properties. Using this, you can exclude those properties that are only strings (because does not extend string).\n */\nexport type OnlyKeysWithValsOfTypeButNotType =\n {\n [TKey in keyof TInObject as NonNullable extends TNotKeyType\n ? never\n : NonNullable extends TKeyType\n ? TKey\n : never]: TInObject[TKey];\n };\n/** The opposite of OnlyKeysWithValsOfTypeButNotType */\nexport type ExcludeKeysWithValsOfTypeButNotType<\n TInObject,\n TKeyType,\n TNotKeyType,\n> = {\n [TKey in keyof TInObject as NonNullable extends TNotKeyType\n ? TKey\n : TInObject[TKey] extends TKeyType\n ? never\n : TKey]: TInObject[TKey];\n};\n/** Returns the type of TInObject, but limited to properties that are arrays of type TKeyType */\nexport type OnlyArrayKeysWithItemsOfType = {\n [TKey in keyof TInObject as NonNullable extends unknown[]\n ? NonNullable[number] extends TKeyType\n ? TKey\n : never\n : never]: TInObject[TKey];\n};\nexport type ArrayKeysExceptWithItemsOfType = {\n [TKey in keyof TInObject as NonNullable extends unknown[]\n ? NonNullable[number] extends TKeyType\n ? never\n : TKey\n : never]: TInObject[TKey];\n};\n/** Returns the type of TInObject, but limitied to properties that are either of type TKeyType or arrays of type TKeyType */\nexport type OnlyKeysOfTypeOrArrayOfType =\n OnlyKeysWithValsOfTypeButNotType &\n OnlyArrayKeysWithItemsOfType;\n\nexport type ExcludeKeysOfTypeOrArrayOfType =\n ExcludeKeysWithValsOfType &\n ArrayKeysExceptWithItemsOfType;\n\nexport type OnlyKeysOfTypeOrArrayOfTypeButNotType<\n TInObject,\n TKeyType,\n TNotKeyType,\n> = OnlyKeysWithValsOfTypeButNotType<\n TInObject,\n TKeyType,\n unknown[] | TNotKeyType\n> &\n ExcludeKeysWithValsOfType<\n OnlyArrayKeysWithItemsOfType,\n TNotKeyType[]\n >;\n/** **Example:** If the generics are ``:\n\n * When we talk about matching properties below, it means properties that are objects or array of objects, but not `BlockValue|TailwindSplitOption` (or arrays of those).\n\n * Pick all properties in `LayoutItem` that matches => should as of writing pick: `searchbar, taglist, doclist`\n\n * Chage all properties in those subproperties that are matches to `unknown`\n => e.g., in doclist the property `tags:Tag[]` is changed to `tags:unknown[]`\n*/\nexport type SelectPropsOfTypeAndChangeSubPropsOfTypeButNotTypeIntoUnknown<\n TInObject,\n TKeyType,\n TNotKeyType,\n> = {\n [TKey in keyof OnlyKeysOfTypeOrArrayOfTypeButNotType<\n TInObject,\n TKeyType,\n TNotKeyType\n >]: ExcludeKeysOfTypeOrArrayOfType & {\n [TSubKey in keyof OnlyKeysOfTypeOrArrayOfType<\n NonNullable,\n TKeyType\n >]: NonNullable[TSubKey]> extends unknown[]\n ? unknown[]\n : unknown;\n };\n};\n\n/** Get keys of T that are not symbols */\ntype NoSymbolKey = keyof T extends string | number ? keyof T : never;\n/** Matches record and can infer the list of keys, but does not match strings (Record matches strings). Also handles optional keys and nullable types so we always get the keys. */\ntype HasKeys = NoSymbolKey> =\n Required> extends object & Record ? T : never;\n/** Returns all keys and subkeys recursively, with a dot between */\nexport type KeyOfRecursive<\n T,\n IncludeParentKeys extends boolean = false,\n> = string &\n (T extends Array\n ? never\n : T extends HasKeys\n ?\n | (IncludeParentKeys extends true ? keyof T : never)\n | keyof {\n [key in K as Required[key] extends Array\n ? key\n : T[key] extends HasKeys\n ? `${key}.${KeyOfRecursive}`\n : key]: unknown;\n }\n : never);\n/** Can be used to get the type of a property matching KeyOfRecursive */\nexport type RecurChildType<\n T,\n K extends KeyOfRecursive,\n> = K extends keyof T\n ? T[K]\n : K extends `${infer P extends keyof T & string}.${infer C}`\n ? C extends KeyOfRecursive\n ? RecurChildType\n : never\n : never;\n/** Get only matches from KeyOfRecursive that has child keys. */\ntype KeysWithChildren =\n T extends HasKeys\n ? KParent extends KeyOfRecursive\n ? CB extends ''\n ? never\n : CB\n : T[KParent] extends HasKeys\n ? `${CB extends '' ? '' : `${CB}.`}${KeysWithChildren & string}`\n : never\n : never;\n/** Gets all values from KeyOfRecursive that starts with the given prefix (i.e. keys below a given parent). The given prefix must be a key that has sub keys. */\nexport type KeyOfRecursiveBelow> = Extract<\n KeyOfRecursive,\n `${K}${string}`\n>;\n/** Helper to read properties passed as KeyOfRecursive */\nexport function getPropertyRecursive>(\n obj: T,\n property: K,\n): RecurChildType {\n if (obj === null || obj === undefined) return obj as RecurChildType;\n const parts = property.split('.');\n const firstKey = parts.splice(0, 1)[0] as keyof T;\n if (!firstKey) {\n throw new Error('Illegal property');\n }\n if (parts.length === 0) {\n return obj[firstKey] as RecurChildType;\n }\n return getPropertyRecursive(\n obj[firstKey] as T[keyof T],\n parts.join('.') as KeyOfRecursive,\n ) as RecurChildType;\n}\nexport function removeParentKey(\n property: KeyOfRecursive,\n parentProperty: KeysWithChildren,\n) {\n return property.replace(`${parentProperty}.`, '') as Replace<\n Extract,\n `${typeof parentProperty}.`,\n ''\n >;\n}\n\n/** Returns the item type for an Array type (and never if the type is not an array) */\nexport type ArrayItem = T extends Array ? U : never;\n\n/** Returns the item type for an Array type, and the same type if not an array type */\nexport type SingleItem = T extends Array ? U : T;\n\n/** Only those types of a composite type that are NOT arrays */\nexport type NotArray = T extends Array ? never : T;\n\nexport type OnlyArray = T extends Array ? T : never;\n\n/** Changes keys K to optional */\nexport type PartialSome = Omit &\n Partial>;\n/** Changes keys K to required */\nexport type RequiredSome = Omit &\n Required>;\n/** Changes all properties in T given by K to P */\nexport type ChangeProps = Omit & {\n [property in K]: P;\n};\n\n/** Same as Required, except that any props that are non-optional, but might be null/undefined, are also required to have a value */\nexport type RequireValue = {\n [key in keyof Required]: NonNullable;\n};\n/** Can be used to force any properties in `T` that is not in `TKeep` to be undefined.\\\n * This is useful if you want to use `v-bind` to send a subset of props to a child component, and gives you \"type safety\" to ensure this is updated if new props are added to the parent. */\nexport function WithUndefined, TKeep>(\n obj: T & Partial,\n setsUndefined: {\n [key in keyof Omit, keyof TKeep>]: undefined;\n },\n extraProps?: object,\n): Partial & typeof extraProps {\n return { ...obj, ...setsUndefined, ...extraProps };\n}\n\nexport type VueClass =\n | string\n | Record\n | (string | undefined | Record)[];\n\ntype CustomSchemaData = {\n schema: Schema[];\n template: pageTemplateIds;\n};\n\nexport type BlockCreateDTO = {\n name: localeValue;\n categoryId: number;\n customSchema?: CustomSchemaData;\n audiences?: RoleName[];\n description: localeValue;\n tags: number[];\n ownerOrganizationId?: Guid;\n documentOwnerIds?: string[];\n content?: BlockData;\n sitemapLocationId?: number;\n};\n\nexport type Guid = `${string}-${string}-${string}-${string}-${string}`;\nexport const EMPTY_GUID = '00000000-0000-0000-0000-000000000000' as Guid;\n\nexport type Block = {\n name: localeValue;\n category?: Category;\n customSchema?: CustomSchemaData;\n audiences?: RoleName[];\n sitemapLocationId?: number;\n description: localeValue;\n blockId: Guid;\n tags: Tag[];\n /** This points to the currently _selected_ versionnumber, might not be the current version from the database. */\n currentVersionNumber?: string;\n currentVersionId: number;\n suggestion?: Pick<\n Suggestion,\n 'id' | 'title' | 'status' | 'type' | 'workItem'\n >;\n content: BlockData;\n /** Aggregated status for the block, based on logic defined in the backend */\n status: Status;\n hasBacklog: boolean;\n isBacklog: boolean;\n ownerOrg?: OrganizationInfo;\n documentOwners?: OrganizationUser[];\n versions?: Pick<\n Version,\n 'versionNumber' | 'status' | 'draftStatus' | 'isBacklog'\n >[];\n lastChanged?: Date;\n lastChangedBy?: OrganizationUser;\n};\n\nexport enum Status {\n Draft = 'Draft',\n Published = 'Published',\n Archived = 'Archived',\n AwaitingApproval = 'AwaitingApproval',\n}\n\nexport type UpdateBlock = {\n blockId: Guid;\n name: localeValue;\n categoryId: number;\n customSchema?: CustomSchemaData;\n audiences?: RoleName[];\n description: localeValue;\n tags?: number[];\n OwnerOrganizationId?: Guid;\n documentOwnerIds?: string[];\n content?: BlockData;\n sitemapLocationId?: number;\n};\n\nexport type Step = {\n order: number;\n title: BlockLocaleValue;\n description: BlockLocaleValue;\n showApimOrderButton: boolean;\n};\n\nexport type Favorite = {\n favoriteId: number;\n userId: number;\n blockId: Guid;\n blockName?: localeValue;\n notes?: string;\n};\n\nexport function translateCategory(\n category: MinimalCategory,\n): TranslatedCategory {\n return {\n ...category,\n name: translateStringOrLocaleWithDefault(\n category.name,\n 'language.unknownValue',\n ).value,\n };\n}\nexport type MinimalCategory = Pick<\n Category,\n 'categoryId' | 'name' | 'color' | 'cardTemplateId' | 'createRoles'\n>;\nexport type TranslatedCategory = Omit & {\n name: string;\n};\nexport type Category = {\n categoryId: number;\n name: localeValue;\n description?: string | null;\n color?: Colors;\n sortOrder?: number;\n schema?: Schema[];\n cardTemplateId?: cardTemplateIds;\n pageTemplateId?: pageTemplateIds;\n tagGroups?: string[];\n createRoles?: RoleName[];\n publishRoles?: RoleName[];\n editors?: string[];\n homePageId?: Guid;\n};\n\nexport const colorList = [\n 'yellow',\n 'green',\n 'orange',\n 'purple',\n 'gray',\n 'gray-light-light',\n 'sp-blue-light',\n 'blue-light-light',\n 'white',\n 'green-cyan',\n] as const;\nexport type Colors = (typeof colorList)[number];\nexport type borderColors = `border-gnist-${Colors}`;\nexport type decorationColors = `decoration-gnist-${Colors}`;\nexport const fgColorList = ['black', 'sp-blue-dark'] as const;\nexport type FgColors = (typeof fgColorList)[number];\n\nexport type Tag = {\n id: number;\n text: localeValue;\n color?: Colors;\n primaryTagGroupId?: number;\n tagGroups?: TagGroup[];\n homePageId?: Guid;\n};\nexport type TagGroup = {\n id: number;\n label: localeValue;\n homePageId?: Guid;\n color?: Colors;\n tags?: number[];\n categories?: number[];\n};\n\nexport type SuggestionUserConnection = {\n userVote?: VoteDirection;\n subscribeForNotifications: boolean;\n};\nexport type Suggestion = {\n id?: number;\n tempId?: Guid;\n title: localeValue;\n description: localeValue;\n type: 'Suggestion';\n suggestedBy?: OrganizationUser;\n votes?: number;\n last_vote?: string | Date;\n modified?: string | Date;\n commentCount?: number;\n status?: SuggestionInternalStatus;\n tags?: Tag[];\n blockVersion?: {\n id: number;\n blockId?: Guid;\n blockName?: localeValue;\n versionNumber?: string;\n };\n workItem?: Partial>;\n userConnection?: SuggestionUserConnection;\n};\ntype VssWorkItemType = 'User Story';\nexport type WorkItem = {\n id?: number;\n title?: string;\n description?: string;\n status?: VssStatus;\n type?: VssWorkItemType;\n modified?: Date | string;\n stateModified?: Date | string;\n url?: string;\n};\nexport type SuggestionPage = {\n name: localeValue;\n suggestionId: number;\n};\n\nexport interface RenderTemplateDefinition {\n id: string;\n type: 'card' | 'page';\n requiredFields: (Pick & {\n defaultTitle?: string;\n })[];\n component: Component;\n}\n\nexport type CardTemplateProps = {\n block: TranslatedBlock;\n routeName?: string;\n};\n\nexport interface CardTemplateDefinition extends RenderTemplateDefinition {\n type: 'card';\n isLink: boolean;\n component: Component;\n}\n\nexport type PageTemplateProps = {\n block: Block;\n bgColor: Colors;\n fgColor?: FgColors;\n isPreview?: boolean;\n showDiscussion?: boolean;\n};\n\nexport interface PageTemplateDefinition extends RenderTemplateDefinition {\n type: 'page';\n bgColor: Colors;\n fgColor?: FgColors;\n hasVersionSelector: boolean;\n component: Component;\n showDiscussion?: boolean;\n}\n\nexport type Version = {\n versionId: number;\n blockId: Guid;\n versionNumber: string;\n content?: BlockData;\n status: Status;\n draftStatus: Status;\n publishedDate: string;\n lastChanged: string;\n isBacklog: boolean;\n};\n\nexport type VersionUpdate = {\n versionNumber?: string;\n content?: BlockData;\n status?: Status;\n};\n\nexport type User = {\n id: string;\n issuerUserId: string;\n firstName: string;\n lastName: string;\n fullName?: string;\n email: string;\n roles?: RoleName[];\n lastLogin?: Date;\n};\nexport type UserNotificationSettings = {\n sendCommentReplyNotification: boolean;\n sendNewsNotification: boolean;\n sendSuggestionCommentNotification: boolean;\n sendSuggestionChangedNotification: boolean;\n emailLocale?: supported_locale;\n};\nexport type CurrentUser = User & {\n hideNotificationPrompt: boolean;\n memberOrgs?: Guid[];\n requestedOrgs?: Guid[];\n} & UserNotificationSettings;\n\nexport type Role = {\n name: RoleName;\n id: number;\n types: RoleType[];\n};\n\nexport type News = {\n newsArticleId?: string;\n title: localeValue;\n content: localeValue;\n imageSource?: string;\n datePublished?: string;\n published?: boolean;\n url?: string;\n urlText?: string;\n};\n\nexport type Blob = {\n fullPath: string;\n name: string;\n fileName: string;\n contentType: string;\n contentDisposition: string;\n};\n\nexport type ErrorMessage = {\n message: string;\n autoClose: boolean;\n closeable: boolean;\n};\n\nexport type ApiMetaData = {\n name: string;\n displayName?: string;\n description: string;\n apiVersion?: string;\n};\n\nexport type ApiPickerDTO = {\n name: string;\n displayName?: string;\n versions: ApiMetaData[];\n};\n\nexport type ApiOperation = {\n name: string;\n apiName: string;\n method: string;\n description: string;\n templateUrl: string;\n /** Calculated in Gnist backend. Points to the TypeName of the first representation of the Api \"Request\" property (which is present if the operation has a request body). */\n schemaOperation: string | null;\n /** Parameters sent as part of the path */\n templateParameters?: PathParameter[];\n responses: ResponseContract[];\n request: RequestContract | null;\n};\n\nexport type ApiDTO = {\n displayName: string;\n operations: ApiOperation[];\n gatewayUrl: string;\n apiPathUrl: string;\n schema: string | null;\n subscriptionKeyHeader: string;\n};\n\nexport type BlockPage = {\n name: localeValue;\n blockId: Guid;\n};\n\ntype SubscriptionState =\n | 'Suspended'\n | 'Active'\n | 'Expired'\n | 'Submitted'\n | 'Rejected'\n | 'Cancelled';\n\nexport type ApiMSubscriptionDTO = {\n id: string;\n displayName: string;\n scope?: string;\n state: SubscriptionState;\n primaryKey: string;\n secondaryKey: string;\n};\nexport type ApimProduct = {\n id: string;\n productName: string;\n description: string;\n terms: string;\n apis: ApiMetaData[];\n};\n\nexport type ApiSchema = {\n required: string[];\n type: string;\n properties: [];\n example: [];\n xApimInline: boolean;\n};\n\ntype ParameterContractType =\n | 'integer'\n | 'string'\n | (string & NonNullable);\n\nexport type RequestHeader = {\n name: string;\n parameterContractType: ParameterContractType;\n};\n\nexport type RequestContract = {\n description: string;\n queryParameters: QueryParameter[];\n representations: RepresentationContract[];\n headers: RequestHeader[];\n};\n\nexport type ResponseContract = {\n statusCode: number;\n description: string;\n representations: RepresentationContract[];\n headers: {\n name: string;\n }[];\n};\n\nexport type RepresentationContract = {\n typeName: string;\n contentType: string;\n schemaId: string;\n sample: string | null;\n examples: {\n default: {\n value: string;\n };\n };\n};\n\nexport type PathParameter = {\n name: string;\n description: string;\n parameterContractType: ParameterContractType;\n isRequired: boolean;\n values?: string[];\n};\nexport type QueryParameter = Omit & {\n values: unknown[];\n schemaId: string;\n typeName: string;\n examples: unknown;\n};\nexport type ConsoleOperation = {\n operationName: string;\n name: string;\n method: string;\n requestUrl: string;\n request: ConsoleRequest;\n urlTemplate: string;\n canHaveBody: boolean;\n};\n\nexport type ConsoleRequest = {\n headers: ConsoleHeader[];\n meaningfulHeaders: ConsoleHeader[];\n body: string;\n bodyFormat: RequestBodyType;\n};\n\nexport type ConsoleHeader = {\n name: string;\n value: string;\n secret: boolean;\n hiddenValue: string;\n};\n\nexport enum RequestBodyType {\n raw = 'raw',\n string = 'string',\n binary = 'binary',\n form = 'form',\n}\n\nexport type UserStatus = {\n isAuthenticated: boolean;\n tryRelogin: boolean;\n appVersion: string;\n notificationCount: number;\n};\n\ntype NotificationType =\n | 'CommentReply'\n | 'CommentModeration'\n | 'CommentDocumentOwnerRequest'\n | 'News'\n | 'PublishRequest'\n | 'SuggestionComment'\n | 'SuggestionStatusChanged'\n | 'SuggestionEdited'\n | 'AddedToOrg'\n | 'RemovedFromOrg'\n | 'ApprovedToOrg'\n | 'DeniedFromOrg';\nexport type Notification = {\n id: number;\n type: NotificationType;\n pointer: string;\n title?: localeValue;\n time: Date | string;\n read: boolean;\n};\n\nexport type SubscriptionCount = {\n apiId: string;\n count: number;\n};\n\nexport type ApiMAnalyticsDTO = {\n subscriptionCounts: SubscriptionCount[];\n apiMReportByOperation: ApiMReportDTO[];\n apiMReportByTimestamp: ApiMReportDTO[];\n};\n\nexport type ApiMReportDTO = {\n apiId: string;\n apiOperation: string;\n callCountSuccess: number;\n callCountTotal: number;\n timestamp: Date;\n};\n\nexport type ApplicationInsightsCount = {\n timestamp: string;\n count: number;\n};\n\nexport type ApplicationInsightsDTO = {\n maxUserCount: ApplicationInsightsCount[];\n pageViewCount: ApplicationInsightsCount[];\n loginCount: ApplicationInsightsCount[];\n newsViewCount: ApplicationInsightsCount[];\n commentViewCount: ApplicationInsightsCount[];\n blockViewCount: {\n blockId: number;\n blockName: localeValue;\n count7d: number;\n count30d: number;\n }[];\n};\n\nexport type ContentAnalyticsDTO = {\n commentsAnalytics: CommentsAnalytics;\n userAnalytics: UserAnalytics;\n blockAnalytics: BlockAnalytics;\n};\n\nexport type CommentsAnalytics = {\n commentsCounts: {\n [key: string]: number;\n };\n};\n\nexport type UserAnalytics = {\n userCount: number;\n roleCounts: {\n [key: string]: number;\n };\n newsNotificationCount: number;\n commentsNotificationCount: number;\n};\n\nexport type BlockAnalytics = {\n favoriteCounts: {\n [key: string]: number;\n };\n categoryCounts: {\n [key: string]: number;\n };\n publishedBlocksCount: number;\n};\n\nexport type OrganizationUser = {\n userId: string;\n name: string;\n email: string;\n};\n\nexport type OrganizationInfo = {\n organizationId: Guid;\n name: string;\n webpage: string;\n logo: ReturnType;\n country: string;\n numberOfEmployees: string;\n};\n\nexport type OrganizationBlock = {\n blockId: Guid;\n name: localeValue;\n description: localeValue;\n category: Category;\n currentVersionId: number;\n};\n\nexport type OrganizationData = OrganizationInfo & {\n isInternal: boolean;\n users: OrganizationUser[];\n requestedUsers: OrganizationUser[];\n blocks: OrganizationBlock[];\n frontendData?: string;\n};\n\nexport const schemaTypeValues = [\n 'singleline',\n 'multiline',\n 'markdown',\n 'link',\n 'image',\n // 'taggroup',\n 'steps',\n 'apim',\n 'interactive_image',\n 'layout',\n] as const;\nexport type SchemaType = (typeof schemaTypeValues)[number];\nexport const stringSchemaTypeValues = [\n 'singleline',\n 'multiline',\n 'markdown',\n] satisfies Readonly;\nexport const complexSchemaTypeValues = [\n 'interactive_image',\n 'layout',\n] satisfies Readonly;\nexport type StringSchemaType = (typeof stringSchemaTypeValues)[number];\nexport type ComplexSchemaType = (typeof complexSchemaTypeValues)[number];\nexport type ObjectSchemaType = Exclude;\n\nexport type Schema = {\n type: SchemaType;\n name: string;\n title: string;\n showTitle: boolean;\n placeholder?: string;\n defaultValue?: string;\n required?: boolean;\n minlength?: number;\n maxlength?: number;\n /** Only used in CategoryEditor, not actually persisted to DB */\n requiredByTemplate?: boolean;\n canUnsetRequired?: boolean;\n};\n\ntype validationMessages = 'required' | 'minLength' | 'maxLength';\nexport type validationInfo = {\n key: validationMessages;\n args: { [key: string]: string | number };\n};\n\nexport type Link = {\n url: string;\n text: BlockLocaleValue;\n alt: BlockLocaleValue;\n};\n\nexport type BlockImage = {\n /** Internal name used for storing the file in blobstorage */\n name: string;\n /** Text displayed to the user */\n alt: BlockLocaleValue;\n};\n\nexport type BlockApimDetails = {\n apimId: string | undefined;\n useAuthentication?: boolean;\n};\nexport function getApimDetails(data?: BlockData): BlockApimDetails | undefined {\n return getApimDetailsWithKey(data)?.value;\n}\nexport function getApimDetailsWithKey(data?: BlockData):\n | {\n key: string;\n value: BlockApimDetails;\n }\n | undefined {\n const match = Object.entries(data ?? {}).find(\n ([, i]) => typeof i === 'object' && (i as BlockApimDetails).apimId,\n );\n return match\n ? { key: match[0], value: match[1] as BlockApimDetails }\n : undefined;\n}\n\nexport function isBlockImage(value: BlockValue): value is BlockImage {\n return typeof value === 'object' && 'name' in value && 'alt' in value;\n}\n\nexport type Point = { x: number; y: number };\nexport type Dimensions = { height: number; width: number };\nexport type InteractiveImageItem = {\n label: localeValue;\n extendedText: localeValue;\n image: BlockImage;\n size: Dimensions;\n position: Point;\n textOnly?: boolean;\n showLabelInVisual?: boolean;\n hideImageInVisual?: boolean;\n imageMaxWidthInText?: number;\n level: number;\n};\nexport type InteractiveImage = BlockValueWithChildren & {\n background: BlockImage;\n initialText: localeValue;\n};\n\nexport type TagListVueAttributes = {\n list: TagGroup['id'] | 'categories';\n maxItems?: number;\n showAllTags?: boolean;\n showGroupLabel?: boolean;\n};\n\nexport type LayoutItem = {\n id: Guid;\n markdown?: localeValue;\n doclist?: DoclistVueAttributes;\n searchbar?: SearchbarVueAttributes;\n image?: BlockImage;\n taglist?: TagListVueAttributes;\n children?: LayoutItem[];\n doclistFilterFor?: Guid;\n doclistSearchFor?: Guid;\n} & LayoutItemOptions;\nexport type LayoutContentProperties = (typeof layoutContentProperties)[number] &\n keyof LayoutItem;\nexport const layoutContentProperties = [\n 'markdown',\n 'image',\n 'doclist',\n 'searchbar',\n 'taglist',\n 'children',\n] as const satisfies (keyof LayoutItem)[];\nexport type TailwindSplitOptionPrefixes =\n | 'gap'\n | 'gap-x'\n | 'gap-y'\n | 'p'\n | 'px'\n | 'py'\n | 'w'\n | 'max-w'\n | 'min-w'\n | 'h'\n | 'min-h'\n | 'max-h'\n | 'top'\n | 'left';\nexport type TailwindSplitOption = {\n [key in TailwindSplitOptionPrefixes]?: string;\n};\nexport type LayoutItemOptions = LayoutItemLayoutOptions & {\n contentType: LayoutContentProperties;\n bgColor?: Colors;\n url?: string;\n gap?: TailwindSplitOption;\n padding?: TailwindSplitOption;\n width?: TailwindSplitOption;\n height?: TailwindSplitOption;\n position?: TailwindSplitOption;\n};\nexport const boxStyles = ['gnistLink', 'daisyUIwarning'] as const; // Each style must be manually added to getLinkLevelClasses()\ntype BoxStyle = (typeof boxStyles)[number];\nexport type LayoutItemLayoutOptions = {\n mode: 'block' | 'flex' | 'grid';\n cols?: number;\n colSpan?: number;\n mdCols?: number;\n boxStyle?: BoxStyle;\n vAlign?: 'items-start' | 'items-center' | 'items-end';\n hAlign?:\n | 'justify-items-start text-left'\n | 'justify-items-center text-center'\n | 'justify-items-end text-right';\n direction?: 'flex-row' | 'flex-row-reverse' | 'flex-col' | 'flex-col-reverse';\n wrap?: 'flex-wrap' | 'flex-nowrap';\n alignContent?:\n | 'content-normal'\n | 'content-center'\n | 'content-start'\n | 'content-end'\n | 'content-between'\n | 'content-around'\n | 'content-evenly'\n | 'content-stretch';\n justifyContent?:\n | 'justify-normal'\n | 'justify-start'\n | 'justify-end'\n | 'justify-center'\n | 'justify-between'\n | 'justify-around'\n | 'justify-evenly'\n | 'justify-stretch';\n alignItems?:\n | 'items-start'\n | 'items-end'\n | 'items-center'\n | 'items-baseline'\n | 'items-stretch';\n justifyItems?:\n | 'justify-items-start'\n | 'justify-items-end'\n | 'justify-items-center'\n | 'justify-items-stretch';\n};\n\n// Add other types as they are created\nexport type ComplexBlockValueTypes =\n | InteractiveImage\n | InteractiveImageItem\n | LayoutItem;\n\n/** Allows for legacy values with no locale value */\nexport type BlockLocaleValue = localeValue | string;\nexport type BlockValue =\n | localeValue\n | Link\n | BlockImage\n | Step[]\n | BlockApimDetails\n | InteractiveImage\n | LayoutItem;\nexport type BlockValueLegacy = BlockLocaleValue | BlockValue;\n\nexport type BlockData = {\n [key: string]: BlockValue;\n};\n\ntype BlockValueWithChildren = { items: T[] };\ntype BlockValueChildItem = Extract<\n BlockValue,\n { items: unknown }\n>['items'][number];\ntype NoItems = T extends Extract ? never : T;\n\n/** Types of BlockValues that are NOT arrays AND the item type of BlockValues that are arrays (the type itself has no array types) */\nexport type BlockValueItemOnly =\n | NoItems>\n | ArrayItem\n | BlockValueChildItem;\n/** Only types of BlockValues that are objects (if they are arrays, this includes the item type, but not the array type) */\nexport type ObjectBlockValue = Exclude;\n/** Blockvalues PLUS the single (item) type of those blockvalues that are arrays */\nexport type BlockValueAndArrayItem = BlockValue | BlockValueItemOnly;\nexport type BlockValueLegacyAndArrayItem =\n | BlockValueLegacy\n | BlockValueAndArrayItem;\nexport type BlockValueExceptLegacy =\n T extends string ? localeValue : T;\n// Returns a type based on a BlockValue with all localeValues changed to strings\ntype TranslatedBase = T extends string\n ? string\n : T extends localeValue\n ? string\n : {\n [key in keyof OnlyKeysWithValsOfTypeButNotType<\n T,\n BlockLocaleValue,\n string\n >]: string;\n } & ExcludeKeysWithValsOfTypeButNotType;\n/** Translated version of a BlockValues. Note that this always returns a single item, so Translated will return Translated. */\nexport type Translated =\n T extends Array\n ? Translated\n : T extends ComplexBlockValueTypes\n ? TranslatedComplexBlockValue\n : TranslatedBase;\nexport type TranslatedComplexBlockValue<\n TInObject extends ComplexBlockValueTypes,\n> = {\n [TKey in keyof TInObject]: TInObject[TKey] extends\n | ObjectBlockValue\n | undefined\n ? Translated\n : NonNullable extends ComplexBlockValueTypes[]\n ? TranslatedComplexBlockValue>>[]\n : TInObject[TKey] extends BlockValue | undefined\n ? Translated\n : TInObject[TKey];\n};\n\nexport const getEmptyLocaleValue = (): localeValue => {\n return { [DEFAULT_LOCALE]: '' };\n};\n/** Used to check if property X in a BlockValue should be a localeValue */\nexport const emptyBlockValues = {\n image: {\n name: '',\n alt: getEmptyLocaleValue(),\n } as BlockImage,\n link: {\n url: '',\n text: getEmptyLocaleValue(),\n alt: getEmptyLocaleValue(),\n } as Link,\n // steps: [],\n // TODO: Taggroup default value\n steps: {\n order: 0,\n title: getEmptyLocaleValue(),\n description: getEmptyLocaleValue(),\n showApimOrderButton: false,\n } as Step,\n apim: {\n apimId: undefined,\n },\n interactive_image: {\n image: { name: '', alt: getEmptyLocaleValue() },\n label: getEmptyLocaleValue(),\n extendedText: getEmptyLocaleValue(),\n size: { height: 100, width: 250 },\n position: { x: 0, y: 0 },\n level: 1,\n } as InteractiveImageItem,\n layout: {\n markdown: getEmptyLocaleValue(),\n mode: 'block',\n } as LayoutItem,\n} satisfies {\n [key in ObjectSchemaType]: BlockValueItemOnly & object;\n};\n\nexport type BlockValueWithLocaleDate = T & {\n localeUpdates: genericLocaleValue;\n};\nexport function isBlockValueWithLocaleDate(\n value: unknown,\n): value is BlockValueWithLocaleDate {\n return (\n !!value &&\n typeof value === 'object' &&\n (value as BlockValueWithLocaleDate).localeUpdates !== undefined\n );\n}\n\nexport type ExposeOnSave = {\n /** Will be called after an item is saved to the database. */\n onSaved?(): void;\n /** Gives the exposer an option to:\n * 1. manipulate the original object, and\n * 2. return a copy of the original object that should be submitted to the database.\\\n * _Return undefined if you want to save the existing data object to the database._ */\n onBeforeSave?(data: BlockData, name: string): T | undefined;\n};\n\nexport const routeTypes = ['page', 'hardcoded', 'header'] as const;\nexport type routeType = (typeof routeTypes)[number];\nexport type headerType = 'menu' | 'menuOnly' | 'routeOnly';\nexport type RouteCustomOptions = {\n fullscreen?: boolean;\n hideShimmer?: boolean;\n fgColor?: FgColors;\n};\ntype RouteItemBase = {\n text: string;\n /** Used if pointing to something not controlled by vue router */\n href?: string;\n onClick?: () => void;\n targetPath: string;\n meta?: Pick<\n RouteMeta,\n 'translationid' | 'targetDoc' | 'fullScreen' | 'customOptions'\n >;\n /** Used by blocks to define the routename for the listing route, and by 'hardcoded' to define the matcher to match on the hardcoded route */\n routeBaseName?: string;\n mobileOnly?: boolean;\n customOptions?: RouteCustomOptions;\n action?: Action;\n subject?: Subject;\n query?: LocationQuery;\n headerType?: headerType;\n targetMenu?: 'main'; // Current use: if item should not be in menu, possible future use: if we add different menus in differnt places\n routeType: routeType;\n aliases?: string[];\n isSelected?: boolean;\n isDocsListRoute?: boolean;\n};\nexport type RouteItemWithChildren = Omit & {\n items: RouteItem[];\n};\nexport type RouteItem = RouteItemBase | RouteItemWithChildren;\n\nexport type genericLocaleValue = { [DEFAULT_LOCALE]: T } & {\n [key in supported_locale]?: T;\n};\nexport type localeValue = genericLocaleValue;\nexport type RouteItemDTO = Pick<\n RouteItem,\n 'mobileOnly' | 'headerType' | 'targetMenu' | 'routeType' | 'isDocsListRoute'\n> &\n Pick & {\n id: number;\n parent?: string;\n routeName: string;\n aliases?: string[];\n text: localeValue;\n sortOrder?: number;\n };\n\nexport const error_pages = {\n 401: 'error_401',\n 403: 'error_403',\n 404: 'error_404',\n} as const;\n\nexport type AlzFormTopic = {\n key: string;\n label: localeValue;\n recipient: string;\n};\nexport type AlzFormData = {\n topic: AlzFormTopic;\n senderEmail: string;\n senderName?: string;\n subject: string;\n request: string;\n};\ntype EmailRecipient = { name?: string; email: string };\nexport type ContactFormDTO = {\n recipients: EmailRecipient[];\n subject: string;\n sender: EmailRecipient;\n mainBody: string;\n};\n\nexport type ApplicationService = {\n name?: string;\n applicationUUID: string;\n};\nexport type AgreementReference = {\n agreementNumber: string;\n forUserId?: string;\n forUserFullname?: string;\n costCenter?: string;\n label?: string;\n /** Used to differentiate from data coming when reading lz details, which only has the actual agreementNumber and not the rest of the columns from DB */\n readFromDb?: boolean;\n};\nexport type Company = {\n name?: string;\n shortName: string;\n};\nexport type ArchType = SimpleLookupValue & {\n roles?: [];\n targetRepo?: string;\n};\nexport type InformationClass = SimpleLookupValue & {\n /** If not true, this information class may not be used by sandboxes */\n sandbox?: boolean;\n};\nexport type SimpleLookupValue = {\n key: T;\n text: localeValue;\n extendedDescription: localeValue;\n};\nexport type FieldLabel = {\n group: FieldSetKey;\n field: string;\n label: localeValue;\n tooltip?: localeValue;\n placeholder?: localeValue;\n description?: localeValue;\n link?: string;\n richTextDescription?: boolean;\n};\nexport type CustomText = {\n group: TextSetKey;\n identifier: string;\n text: localeValue;\n};\nexport const formConfigOwners = ['AzureLandingZones'] as const;\nexport type FormConfigOwner = (typeof formConfigOwners)[number];\nexport type FormConfigDTO = { owner: ''; jsonValue: string };\nexport type FormConfig = (FormConfigDTO & { config: unknown }) | AlzFormConfig; // Add other classes as needed\nexport type AlzFormConfig = {\n owner: 'AzureLandingZones';\n config: AlzStaticConfig;\n};\nexport type AlzStaticConfig = {\n location: string;\n workload: string;\n sandboxApplicationUUID: string;\n pr_template: string;\n};\n\nexport const alzOperationTypes = [\n 'team_ops',\n 'cpo_ops',\n 'delegated_ops',\n] as const;\nexport type AlzOperationType = (typeof alzOperationTypes)[number];\nexport const alzEnvironmentTypes = [\n 'Prod',\n 'PreProd',\n 'Test',\n 'Development',\n 'Troubleshooting',\n] as const;\nexport const alzSandboxEnvironmentTypes = ['Trial', 'Course'] as const;\nexport type AlzEnvironmentType =\n | (typeof alzEnvironmentTypes)[number]\n | (typeof alzSandboxEnvironmentTypes)[number];\nexport const testDataTypes = [\n 'synthetic',\n 'anonymized',\n 'indirect_identifiable',\n 'person_sensitive',\n] as const;\nexport type TestDataType = (typeof testDataTypes)[number];\n\nexport type AlzEnvironment = {\n alias?: string;\n fileIdentifier: string;\n existingFileIdentifier?: string;\n name: string;\n type?: AlzEnvironmentType;\n test_data?: TestDataType;\n sandbox?: boolean;\n ipam_network_cidrs?: (string | null)[];\n default_subnet_range?: string;\n sub_CI_UUID?: string;\n orderRoles?: string[];\n sandbox_repo_name?: string;\n};\nexport type Repo = {\n name: string;\n landing_zones: string[];\n existing?: boolean;\n};\nexport type AlzSystem = Pick<\n ExtendedAlzSystemDefinitionDTO,\n | 'pullRequestId'\n | 'pullRequestUrl'\n | 'systemFileUrl'\n | 'endDate'\n | 'ownerTag'\n | 'environments'\n> & {\n name: string;\n systemId?: string;\n owner?: { objectId: string; displayName: string };\n workloadName: string;\n service?: ApplicationService;\n company?: Company;\n agreementNumber?: AgreementReference;\n crit?: SimpleLookupValue;\n infoClass?: SimpleLookupValue;\n archType?: ArchType;\n ops?: AlzOperationType;\n opsCi?: string;\n repos: Repo[];\n isSandboxSystem: boolean;\n customProducts: CustomProduct[];\n};\nexport const batRoleTypes = ['lz_role', 'gh_role'];\ntype BatRoleType = (typeof batRoleTypes)[number];\nexport type CustomProduct = {\n title: string;\n roles: { type: BatRoleType; roleId: string; objectId: string }[];\n};\n\nexport type ExtendedAlzSystemDefinitionDTO = AlzSystemDefinitionDTO & {\n pullRequestId?: number;\n pullRequestUrl?: string;\n systemFileUrl?: string;\n};\n\nexport type AlzSystemDefinitionDTO = {\n ownerObjectId?: string;\n agreementNumber?: string;\n costCenter?: string;\n crit?: number;\n infoClass?: string;\n archType?: string;\n vendingRepo?: string;\n ownerTag?: string;\n workloadName: string;\n environments: AlzEnvironment[];\n endDate?: Date;\n systemFileData: AlzSystemDefinitionJsonFile;\n productsData: {\n customProducts: CustomProduct[];\n orderRoles?: { [environment: string]: string[] };\n };\n};\ntype AlzSystemDefinitionJsonFile = {\n id?: string;\n name: string;\n application_uuid?: string;\n hf?: string;\n operations_model?: AlzOperationType;\n operations_ci_uuid?: string;\n sandbox: boolean;\n repositories?: Repo[];\n};\nexport type AlzSystemDefinitionItem = {\n pullRequestId?: number;\n source?: 'MainBranch' | 'PullRequest';\n data: AlzSystemDefinitionJsonFile;\n};\n","import { error_pages } from '@/api/types';\n\n/** Throws an error that will trigger showing an error page if response status is 401, 403 or 404 */\nexport function throwErrorPageTrigger(response: Response) {\n if (response.status === 401) throwUnauthorized();\n else if (response.status === 403) throwForbidden();\n else if (response.status === 404) throw new Error(error_pages[404]);\n}\nexport function throwUnauthorized() {\n throw new Error(error_pages[401]);\n}\nexport function throwForbidden() {\n throw new Error(error_pages[403]);\n}\n","import {\n frontendUrl,\n apiUrl,\n type supported_locale,\n B2C_LOCALE,\n} from '@/config';\nimport { ref, type Ref } from 'vue';\nimport { type CurrentUser } from '@/api/types';\nimport { throwUnauthorized } from '@/utilities/throwErrorPageTrigger';\n\nexport const roleNames = [\n 'anonymous',\n 'administrator',\n 'moderator',\n 'editor',\n 'category_editor',\n 'api_editor',\n 'internal',\n 'external',\n 'orgmember',\n 'docowner',\n 'cpo_admin',\n 'alz_order_form_tester',\n 'masterdata_admin',\n 'agreement_reference_admin',\n] as const;\nconst roleTypes = [\n 'Computed',\n 'AudienceTargeting',\n 'AccessControl',\n 'DocumentAdmin',\n] as const;\nexport type RoleType = (typeof roleTypes)[number];\nexport type RoleName = (typeof roleNames)[number];\n\nconst userInfo = ref(null);\n\nexport function useCurrentUser(): Ref {\n return userInfo;\n}\nexport function useCurrentUserThrowIfNotLoggedOn(): Ref {\n if (!userInfo.value) throwUnauthorized();\n return userInfo as Ref;\n}\n\nexport async function refreshCurrentUser(): Promise> {\n try {\n const response = await fetch(`${apiUrl}/users/current`, {\n credentials: 'include',\n });\n\n if (response.ok && response.status === 200) {\n userInfo.value = await response.json();\n }\n } catch (e) {\n console.warn(`Error fetching login status: ${e}`);\n userInfo.value = null;\n }\n return userInfo;\n}\n\nexport function signIn(locale: supported_locale) {\n let signInUrl = `${apiUrl}/auth/login`;\n let rd = '';\n if (!frontendUrl) {\n rd = window.location.href.replace(`${window.location.origin}`, '');\n } else {\n // Used in DEV if redirect should not point to same origin\n rd = window.location.href.replace(\n `${window.location.origin}/`,\n frontendUrl,\n );\n }\n signInUrl += `?rd=${encodeURIComponent(rd)}&locale=${B2C_LOCALE[locale]}`;\n window.location.assign(signInUrl);\n}\n\nexport function editProfile() {\n window.location.assign(\n `${apiUrl}/auth/edit_profile?rd=${encodeURIComponent(\n window.location.href.replace(window.location.origin, ''),\n )}`,\n );\n}\n\nexport function getSignoutUrl(): string {\n let signOutUrl = `${apiUrl}/auth/logout`;\n\n if (frontendUrl) {\n signOutUrl += `?rd=${encodeURIComponent(frontendUrl)}`;\n }\n return signOutUrl;\n}\n","\n\n","import type {\n Block,\n Guid,\n OrganizationUser,\n Suggestion,\n localeValue,\n} from './types';\nimport type { SocialPageType } from '@/enums/SocialPageType';\nimport type { defaultBlocksRouteName } from '@/utilities/routeUtils';\n\nexport interface Commenter {\n userId: string;\n name: string;\n}\n\nexport interface Comment {\n commentHex: string;\n markdown: string;\n html: string;\n parentHex: string;\n score: number;\n state: 'approved' | 'unapproved' | 'flagged';\n creationDate: string;\n direction: -1 | 0 | 1;\n deleted: boolean;\n userId: string;\n commenterUserRoles?: string[];\n commenterOwnsPageBlock?: boolean;\n}\nexport interface CommentAssessment {\n commentHex: string;\n html: string;\n date: string | Date;\n user: OrganizationUser;\n block?: Block;\n suggestion?: Suggestion;\n pagePath?: string;\n}\n\nexport interface ThreadComment extends Comment {\n commenter?: Commenter;\n parent?: ThreadComment;\n children: ThreadComment[];\n}\n\nexport type MyThreadsComment = {\n commentId: string;\n created: string;\n discussionId: commentPageId;\n discussionType: SocialPageType;\n pageDescription?: localeValue;\n content: string;\n userId: string;\n firstName: string;\n lastName: string;\n};\n\nexport type ChatPage = {\n id: chatPageParam;\n chatPageName: string;\n chatPageDescription: string;\n};\n\nexport interface Discussion {\n commenterMap: Map;\n commentMap: Map;\n stickiedComment?: ThreadComment;\n threads: ThreadComment[];\n attributes: DiscussionAttributes;\n defaultSortPolicy: SortStrategy;\n}\n\nexport interface DiscussionAttributes {\n id: commentPageId;\n isLocked: boolean;\n commentCount: number;\n stickyCommentHex: string; // can be 'none'\n pageType: SocialPageType;\n}\n\n// Most upvotes first, Newest First, Oldest first\nexport type SortStrategy =\n | 'score-desc'\n | 'creationdate-desc'\n | 'creationdate-asc';\n\nexport type SortFunction = (a: ThreadComment, b: ThreadComment) => number;\n\nexport type AssessmentType = 'Moderator' | 'DocumentOwner';\n\nconst chatPageIds = ['general', 'suggestions', 'technicalhelp'] as const;\nexport type chatPageId = `/${(typeof chatPageIds)[number]}`;\nexport const suggestionPageParam = 'backlog';\ntype SuggestionPageParam = typeof suggestionPageParam;\nexport const suggestionPageIdPrefix = 'suggestion';\nexport type suggestionPageId = `${typeof suggestionPageIdPrefix}${string}`;\nexport type chatPageParam = chatPageId extends `/${infer pageParam}`\n ? pageParam\n : never;\nexport type commentPageParam =\n | chatPageParam\n | typeof defaultBlocksRouteName\n | SuggestionPageParam;\nexport type commentPageId = chatPageId | Guid | suggestionPageId;\nexport function isChatPage(id: chatPageId | unknown): id is chatPageId {\n return chatPageIds.includes(getChatPageParamFromId(id as chatPageId));\n}\nexport function getChatPageParamFromId(id: chatPageId): chatPageParam {\n return id.split('/').slice(-1)[0] as chatPageParam;\n}\nexport const getChatPages = (): ChatPage[] => {\n return chatPageIds.map((i) => getChatPage(i) as ChatPage);\n};\n\nexport const getChatPage = (id: chatPageParam): ChatPage => {\n return {\n id: id,\n chatPageName: `social.pages.${id}.name`,\n chatPageDescription: `social.pages.${id}.description`,\n };\n};\n","import {\n getChatPageParamFromId,\n type commentPageId,\n type commentPageParam,\n type chatPageId,\n suggestionPageParam,\n} from '@/api/commentoTypes';\nimport { defaultBlocksRouteName } from '@/utilities/routeUtils';\n\nexport enum SocialPageType {\n ChatPage = 0,\n BlockPage = 1,\n SuggestionPage = 2,\n}\n\nlet socialPageBasePath = '';\nexport function setSocialPageBasePath(path: string) {\n socialPageBasePath = path;\n}\n\nexport function getCommentPagePath(\n discussionId: commentPageId,\n discussionType: SocialPageType,\n) {\n return (\n socialPageBasePath +\n (discussionType === SocialPageType.ChatPage\n ? discussionId\n : discussionType === SocialPageType.SuggestionPage\n ? `/${suggestionPageParam}/${discussionId}`\n : `/${defaultBlocksRouteName}/${discussionId}`)\n );\n}\n\nexport function getCommentPageIdParam(\n discussionId: commentPageId,\n discussionType: SocialPageType,\n): commentPageParam {\n return discussionType === SocialPageType.ChatPage\n ? getChatPageParamFromId(discussionId as chatPageId)\n : discussionType === SocialPageType.SuggestionPage\n ? suggestionPageParam\n : defaultBlocksRouteName;\n}\n","import {\n appVersion,\n apiUrl,\n notFoundRouteName,\n socialPageRouteId,\n} from '@/config';\nimport { computed, ref, watch, type Ref, isRef } from 'vue';\nimport type { UserStatus, Notification, localeValue } from './types';\nimport { useCurrentUser } from './auth';\nimport { composeWithRefresh } from './composable';\nimport type { RouteLocationRaw } from 'vue-router';\nimport {\n getChatPage,\n type commentPageId,\n type chatPageParam,\n isChatPage,\n suggestionPageIdPrefix,\n} from './commentoTypes';\nimport { SocialPageType, getCommentPageIdParam } from '@/enums/SocialPageType';\n\nconst statusUrl = apiUrl + '/status';\n\nconst userInfo = useCurrentUser();\nconst userStatus = ref({\n isAuthenticated: false,\n tryRelogin: false,\n appVersion: '',\n notificationCount: 0,\n});\n\nasync function fetchStatus() {\n try {\n const response = await fetch(statusUrl, {\n credentials: 'include',\n });\n\n if (response.ok && response.status === 200) {\n userStatus.value = await response.json();\n }\n } catch (e) {\n console.warn(`Error fetching status: ${e}`);\n }\n}\n\n// Fetch status when application loads and try to relogin if user didn't log out\n(async () => {\n await fetchStatus();\n if (!userStatus.value.isAuthenticated && userStatus.value.tryRelogin) {\n window.location.assign(\n `${apiUrl}/auth/login?rd=${encodeURIComponent(\n window.location.href.replace(window.location.origin, ''),\n )}&silent=true`,\n );\n }\n})();\n\nconsole.info('App version:', appVersion);\n\n// Start polling for user status\nsetInterval(async function () {\n await fetchStatus();\n}, 1000 * 30); // 30 seconds\n\n// Run callback when version mismatch detected between frontend and backend\nexport const useNewAppVersion = (callback: () => void) => {\n watch(userStatus, (status) => {\n if (status.appVersion && appVersion && status.appVersion !== appVersion) {\n callback();\n }\n });\n};\n\n// Run callback when user's session times out\nexport const useUserSessionTimeout = (callback: () => void) => {\n watch(userStatus, () => {\n if (userInfo.value && !userStatus.value.isAuthenticated) {\n userInfo.value = null;\n callback();\n }\n });\n};\n\nexport const useNotificationCount = () =>\n computed(() => userStatus.value.notificationCount);\nexport const updateNotificationCount = () => fetchStatus();\n\nexport const useNotifications = (params?: Ref) => {\n return composeWithRefresh(\n async () => getNotifications(params),\n () => [\n params?.value.includeRead,\n params?.value.pageSize,\n params?.value.page,\n ],\n false,\n );\n};\n\ntype WithLink = {\n link: RouteLocationRaw;\n title: localeValue | string;\n};\ntype NotificationWithLink = Omit & WithLink;\nexport type NotificationQueryParams = {\n includeRead?: boolean;\n pageSize?: number;\n page?: number;\n};\nexport const getNotifications = async (\n params?: NotificationQueryParams | Ref,\n): Promise => {\n if (isRef(params)) params = params.value;\n let query = new URLSearchParams(params as Record).toString(); // Typescript doesn't allow non-string values in URLSearchParams, but it works fine due to javascript type coercion\n if (query) query = `?${query}`;\n const response = await fetch(`${statusUrl}/notifications${query}`, {\n method: 'GET',\n credentials: 'include',\n });\n if (!response.ok) throw new Error('error.get_notifications_failed');\n const notifications: (Omit & Partial)[] =\n await response.json();\n notifications.map((n) => {\n if (\n n.type === 'CommentReply' ||\n n.type === 'CommentModeration' ||\n n.type === 'CommentDocumentOwnerRequest' ||\n n.type === 'SuggestionComment'\n ) {\n const [blockId, commentId] = n.pointer.split('#');\n const pageType = blockId.startsWith(suggestionPageIdPrefix)\n ? SocialPageType.SuggestionPage\n : isChatPage(blockId)\n ? SocialPageType.ChatPage\n : SocialPageType.BlockPage;\n if (pageType === SocialPageType.ChatPage) {\n n.title = getChatPage(\n getCommentPageIdParam(\n blockId as commentPageId,\n pageType,\n ) as chatPageParam,\n ).chatPageName;\n }\n n.link = {\n name: socialPageRouteId,\n params: {\n pageId: getCommentPageIdParam(blockId as commentPageId, pageType),\n blockId: pageType === SocialPageType.ChatPage ? 'comment' : blockId,\n commentId,\n },\n };\n } else if (n.type === 'News') {\n n.link = {\n name: 'news',\n params: { articleId: n.pointer },\n };\n } else if (n.type === 'PublishRequest') {\n n.link = { name: 'editor_management' };\n } else if (\n n.type === 'SuggestionStatusChanged' ||\n n.type === 'SuggestionEdited'\n ) {\n n.link = {\n name: 'suggestion_details',\n params: {\n suggestionId: n.pointer,\n },\n };\n } else if (n.type === 'DeniedFromOrg' || n.type === 'RemovedFromOrg') {\n n.link = { path: '/about_orgs' };\n } else if (n.type === 'AddedToOrg' || n.type === 'ApprovedToOrg') {\n n.link = { name: 'organization', params: { organizationId: n.pointer } };\n } else {\n console.error(`Missing link definition for ${n.type}`);\n n.link = { name: notFoundRouteName };\n }\n });\n return notifications as Required[];\n};\n\nexport const updateNotification = async (\n notificationId: number | undefined,\n read: boolean,\n) => {\n const response = await fetch(\n `${statusUrl}/notifications/${notificationId ?? 'markall'}?read=${read}`,\n {\n method: 'PUT',\n credentials: 'include',\n },\n );\n if (!response.ok) throw new Error('error.update_notification_failed');\n};\n\nexport const deleteNotification = async (notificationId: number) => {\n const response = await fetch(`${statusUrl}/notifications/${notificationId}`, {\n method: 'DELETE',\n credentials: 'include',\n });\n if (!response.ok) throw new Error('error.delete_notification_failed');\n};\n","\n\n","import { AbilityBuilder, createMongoAbility, subject } from '@casl/ability';\nimport { useAbility } from '@casl/vue';\nimport type {\n ForcedSubject,\n MongoQueryOperators,\n PureAbility,\n} from '@casl/ability';\nimport type { Block, Category, CurrentUser, KeyOfRecursive } from '@/api/types';\n\nexport type Action =\n | 'create'\n | 'read'\n | 'update'\n | 'delete'\n | 'publish'\n | 'manage'\n | 'own'\n | 'use'\n | 'import_export';\nexport type Subject =\n | 'Block'\n | 'CustomBlock'\n | 'BlockFromRoute'\n | 'News'\n | 'Comment'\n | 'Discussion'\n | 'User'\n | 'Analytics'\n | 'Organization'\n | 'Route'\n | 'Category'\n | 'Suggestion'\n | 'MyDocumentsToPublish'\n | 'ProducerTools'\n | 'AdminTools'\n | 'ApiConnection'\n | 'Tags'\n | 'AlzOrders'\n | 'AlzArchetype'\n | 'AgreementReference'\n | 'MasterData';\n\ntype StoreAbility = PureAbility<[Action, Subject | ForcedSubject]>;\n\n/** See https://casl.js.org/v6/en/guide/conditions-in-depth#supported-operators for an explanation of what the operators does\n * @template TSubjectInstance The type of the instance the condition will be evaluated against\n * @template TValueProperty The property of `TSubjectInstance` that will be matched against the condition\n * @template MongoQueryOperators The operator and value that defines the condition to match\n */\ntype CanCondition<\n TSubjectInstance,\n TValueProperty extends KeyOfRecursive,\n> = {\n [valueSelector in TValueProperty]: MongoQueryOperators;\n};\n\nexport function defineAbilities(\n user: Pick | null,\n): StoreAbility {\n const { can, build } = new AbilityBuilder(createMongoAbility);\n\n if (user?.roles?.includes('administrator')) {\n can('read', 'AdminTools');\n can('create', 'News');\n can('update', 'Discussion');\n can('delete', 'Comment');\n can('read', 'Analytics');\n can('create', 'Block');\n can('create', 'CustomBlock');\n can('update', 'Block');\n can('delete', 'Block');\n can('import_export', 'Block');\n // This should follow rules in DocumentPublishRightsRequirement.cs\n can('publish', 'Block');\n can('read', 'Organization');\n can('update', 'User');\n can('update', 'Organization');\n can('update', 'Route');\n can('update', 'Category');\n can('update', 'Suggestion');\n can('delete', 'Suggestion');\n can('update', 'Tags');\n can('use', 'AlzOrders');\n }\n if (user?.roles?.includes('moderator')) {\n can('read', 'ProducerTools');\n can('create', 'News');\n can('update', 'Discussion');\n can('delete', 'Comment');\n can('read', 'Analytics');\n }\n if (user?.roles?.includes('editor')) {\n can('read', 'ProducerTools');\n can('create', 'Block');\n can('update', 'Block');\n // This should follow rules in DocumentPublishRightsRequirement.cs\n can('publish', 'Block');\n can('read', 'Organization');\n can('manage', 'Block');\n can('update', 'Tags');\n }\n if (user?.roles?.includes('orgmember')) {\n can('read', 'ProducerTools');\n can('create', 'Block');\n can('create', 'BlockFromRoute', {\n createRoles: { $in: user.roles },\n } satisfies CanCondition, 'createRoles'>);\n can('update', 'Block', {\n 'ownerOrg.organizationId': { $in: user.memberOrgs },\n } satisfies CanCondition);\n }\n if (user?.roles?.includes('docowner')) {\n can('read', 'ProducerTools');\n can('own', 'Block');\n }\n if (user?.roles?.includes('category_editor')) {\n can('read', 'ProducerTools');\n can('own', 'Block');\n can('read', 'MyDocumentsToPublish');\n can('publish', 'Block', {\n 'category.editors': { $eq: user.id },\n } satisfies CanCondition);\n }\n if (user?.roles?.includes('api_editor')) {\n can('update', 'ApiConnection');\n }\n if (user?.roles?.includes('alz_order_form_tester')) {\n can('use', 'AlzOrders');\n }\n if (user?.roles?.includes('cpo_admin')) {\n can('use', 'AlzOrders');\n can('manage', 'AlzOrders');\n }\n if (user?.roles?.includes('agreement_reference_admin')) {\n can('manage', 'AgreementReference');\n }\n if (user?.roles?.includes('masterdata_admin')) {\n can('manage', 'MasterData');\n }\n // Abilities that should be added regardless of the users roles\n if (user?.roles) {\n can('use', 'AlzArchetype', {\n roles: { $in: user.roles },\n });\n }\n return build();\n}\n\nexport const useStoreAbility = () => useAbility();\nexport const useSubject = >(\n subjectType: Subject,\n subjectInstance: T,\n): ForcedSubject => {\n return subject(subjectType, subjectInstance);\n};\n","function memo(getDeps, fn, opts) {\n let deps = opts.initialDeps ?? [];\n let result;\n return () => {\n var _a, _b, _c, _d;\n let depTime;\n if (opts.key && ((_a = opts.debug) == null ? void 0 : _a.call(opts))) depTime = Date.now();\n const newDeps = getDeps();\n const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);\n if (!depsChanged) {\n return result;\n }\n deps = newDeps;\n let resultTime;\n if (opts.key && ((_b = opts.debug) == null ? void 0 : _b.call(opts))) resultTime = Date.now();\n result = fn(...newDeps);\n if (opts.key && ((_c = opts.debug) == null ? void 0 : _c.call(opts))) {\n const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;\n const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;\n const resultFpsPercentage = resultEndTime / 16;\n const pad = (str, num) => {\n str = String(str);\n while (str.length < num) {\n str = \" \" + str;\n }\n return str;\n };\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120)\n )}deg 100% 31%);`,\n opts == null ? void 0 : opts.key\n );\n }\n (_d = opts == null ? void 0 : opts.onChange) == null ? void 0 : _d.call(opts, result);\n return result;\n };\n}\nfunction notUndefined(value, msg) {\n if (value === void 0) {\n throw new Error(`Unexpected undefined${msg ? `: ${msg}` : \"\"}`);\n } else {\n return value;\n }\n}\nconst approxEqual = (a, b) => Math.abs(a - b) < 1;\nconst debounce = (targetWindow, fn, ms) => {\n let timeoutId;\n return function(...args) {\n targetWindow.clearTimeout(timeoutId);\n timeoutId = targetWindow.setTimeout(() => fn.apply(this, args), ms);\n };\n};\nexport {\n approxEqual,\n debounce,\n memo,\n notUndefined\n};\n//# sourceMappingURL=utils.js.map\n","import { debounce, memo, notUndefined, approxEqual } from \"./utils.js\";\nconst defaultKeyExtractor = (index) => index;\nconst defaultRangeExtractor = (range) => {\n const start = Math.max(range.startIndex - range.overscan, 0);\n const end = Math.min(range.endIndex + range.overscan, range.count - 1);\n const arr = [];\n for (let i = start; i <= end; i++) {\n arr.push(i);\n }\n return arr;\n};\nconst observeElementRect = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n const handler = (rect) => {\n const { width, height } = rect;\n cb({ width: Math.round(width), height: Math.round(height) });\n };\n handler(element.getBoundingClientRect());\n if (!targetWindow.ResizeObserver) {\n return () => {\n };\n }\n const observer = new targetWindow.ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry == null ? void 0 : entry.borderBoxSize) {\n const box = entry.borderBoxSize[0];\n if (box) {\n handler({ width: box.inlineSize, height: box.blockSize });\n return;\n }\n }\n handler(element.getBoundingClientRect());\n });\n observer.observe(element, { box: \"border-box\" });\n return () => {\n observer.unobserve(element);\n };\n};\nconst addEventListenerOptions = {\n passive: true\n};\nconst observeWindowRect = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const handler = () => {\n cb({ width: element.innerWidth, height: element.innerHeight });\n };\n handler();\n element.addEventListener(\"resize\", handler, addEventListenerOptions);\n return () => {\n element.removeEventListener(\"resize\", handler);\n };\n};\nconst supportsScrollend = typeof window == \"undefined\" ? true : \"onscrollend\" in window;\nconst observeElementOffset = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n let offset = 0;\n const fallback = supportsScrollend ? () => void 0 : debounce(\n targetWindow,\n () => {\n cb(offset, false);\n },\n instance.options.isScrollingResetDelay\n );\n const createHandler = (isScrolling) => () => {\n const { horizontal, isRtl } = instance.options;\n offset = horizontal ? element[\"scrollLeft\"] * (isRtl && -1 || 1) : element[\"scrollTop\"];\n fallback();\n cb(offset, isScrolling);\n };\n const handler = createHandler(true);\n const endHandler = createHandler(false);\n endHandler();\n element.addEventListener(\"scroll\", handler, addEventListenerOptions);\n element.addEventListener(\"scrollend\", endHandler, addEventListenerOptions);\n return () => {\n element.removeEventListener(\"scroll\", handler);\n element.removeEventListener(\"scrollend\", endHandler);\n };\n};\nconst observeWindowOffset = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n let offset = 0;\n const fallback = supportsScrollend ? () => void 0 : debounce(\n targetWindow,\n () => {\n cb(offset, false);\n },\n instance.options.isScrollingResetDelay\n );\n const createHandler = (isScrolling) => () => {\n offset = element[instance.options.horizontal ? \"scrollX\" : \"scrollY\"];\n fallback();\n cb(offset, isScrolling);\n };\n const handler = createHandler(true);\n const endHandler = createHandler(false);\n endHandler();\n element.addEventListener(\"scroll\", handler, addEventListenerOptions);\n element.addEventListener(\"scrollend\", endHandler, addEventListenerOptions);\n return () => {\n element.removeEventListener(\"scroll\", handler);\n element.removeEventListener(\"scrollend\", endHandler);\n };\n};\nconst measureElement = (element, entry, instance) => {\n if (entry == null ? void 0 : entry.borderBoxSize) {\n const box = entry.borderBoxSize[0];\n if (box) {\n const size = Math.round(\n box[instance.options.horizontal ? \"inlineSize\" : \"blockSize\"]\n );\n return size;\n }\n }\n return Math.round(\n element.getBoundingClientRect()[instance.options.horizontal ? \"width\" : \"height\"]\n );\n};\nconst windowScroll = (offset, {\n adjustments = 0,\n behavior\n}, instance) => {\n var _a, _b;\n const toOffset = offset + adjustments;\n (_b = (_a = instance.scrollElement) == null ? void 0 : _a.scrollTo) == null ? void 0 : _b.call(_a, {\n [instance.options.horizontal ? \"left\" : \"top\"]: toOffset,\n behavior\n });\n};\nconst elementScroll = (offset, {\n adjustments = 0,\n behavior\n}, instance) => {\n var _a, _b;\n const toOffset = offset + adjustments;\n (_b = (_a = instance.scrollElement) == null ? void 0 : _a.scrollTo) == null ? void 0 : _b.call(_a, {\n [instance.options.horizontal ? \"left\" : \"top\"]: toOffset,\n behavior\n });\n};\nclass Virtualizer {\n constructor(opts) {\n this.unsubs = [];\n this.scrollElement = null;\n this.targetWindow = null;\n this.isScrolling = false;\n this.scrollToIndexTimeoutId = null;\n this.measurementsCache = [];\n this.itemSizeCache = /* @__PURE__ */ new Map();\n this.pendingMeasuredCacheIndexes = [];\n this.scrollRect = null;\n this.scrollOffset = null;\n this.scrollDirection = null;\n this.scrollAdjustments = 0;\n this.elementsCache = /* @__PURE__ */ new Map();\n this.observer = /* @__PURE__ */ (() => {\n let _ro = null;\n const get = () => {\n if (_ro) {\n return _ro;\n }\n if (!this.targetWindow || !this.targetWindow.ResizeObserver) {\n return null;\n }\n return _ro = new this.targetWindow.ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target, entry);\n });\n });\n };\n return {\n disconnect: () => {\n var _a;\n (_a = get()) == null ? void 0 : _a.disconnect();\n _ro = null;\n },\n observe: (target) => {\n var _a;\n return (_a = get()) == null ? void 0 : _a.observe(target, { box: \"border-box\" });\n },\n unobserve: (target) => {\n var _a;\n return (_a = get()) == null ? void 0 : _a.unobserve(target);\n }\n };\n })();\n this.range = null;\n this.setOptions = (opts2) => {\n Object.entries(opts2).forEach(([key, value]) => {\n if (typeof value === \"undefined\") delete opts2[key];\n });\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {\n },\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n gap: 0,\n indexAttribute: \"data-index\",\n initialMeasurementsCache: [],\n lanes: 1,\n isScrollingResetDelay: 150,\n enabled: true,\n isRtl: false,\n ...opts2\n };\n };\n this.notify = (sync) => {\n var _a, _b;\n (_b = (_a = this.options).onChange) == null ? void 0 : _b.call(_a, this, sync);\n };\n this.maybeNotify = memo(\n () => {\n this.calculateRange();\n return [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null\n ];\n },\n (isScrolling) => {\n this.notify(isScrolling);\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"maybeNotify\",\n debug: () => this.options.debug,\n initialDeps: [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null\n ]\n }\n );\n this.cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d());\n this.unsubs = [];\n this.observer.disconnect();\n this.scrollElement = null;\n this.targetWindow = null;\n };\n this._didMount = () => {\n return () => {\n this.cleanup();\n };\n };\n this._willUpdate = () => {\n var _a;\n const scrollElement = this.options.enabled ? this.options.getScrollElement() : null;\n if (this.scrollElement !== scrollElement) {\n this.cleanup();\n if (!scrollElement) {\n this.maybeNotify();\n return;\n }\n this.scrollElement = scrollElement;\n if (this.scrollElement && \"ownerDocument\" in this.scrollElement) {\n this.targetWindow = this.scrollElement.ownerDocument.defaultView;\n } else {\n this.targetWindow = ((_a = this.scrollElement) == null ? void 0 : _a.window) ?? null;\n }\n this.elementsCache.forEach((cached) => {\n this.observer.observe(cached);\n });\n this._scrollToOffset(this.getScrollOffset(), {\n adjustments: void 0,\n behavior: void 0\n });\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect;\n this.maybeNotify();\n })\n );\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset, isScrolling) => {\n this.scrollAdjustments = 0;\n this.scrollDirection = isScrolling ? this.getScrollOffset() < offset ? \"forward\" : \"backward\" : null;\n this.scrollOffset = offset;\n this.isScrolling = isScrolling;\n this.maybeNotify();\n })\n );\n }\n };\n this.getSize = () => {\n if (!this.options.enabled) {\n this.scrollRect = null;\n return 0;\n }\n this.scrollRect = this.scrollRect ?? this.options.initialRect;\n return this.scrollRect[this.options.horizontal ? \"width\" : \"height\"];\n };\n this.getScrollOffset = () => {\n if (!this.options.enabled) {\n this.scrollOffset = null;\n return 0;\n }\n this.scrollOffset = this.scrollOffset ?? (typeof this.options.initialOffset === \"function\" ? this.options.initialOffset() : this.options.initialOffset);\n return this.scrollOffset;\n };\n this.getFurthestMeasurement = (measurements, index) => {\n const furthestMeasurementsFound = /* @__PURE__ */ new Map();\n const furthestMeasurements = /* @__PURE__ */ new Map();\n for (let m = index - 1; m >= 0; m--) {\n const measurement = measurements[m];\n if (furthestMeasurementsFound.has(measurement.lane)) {\n continue;\n }\n const previousFurthestMeasurement = furthestMeasurements.get(\n measurement.lane\n );\n if (previousFurthestMeasurement == null || measurement.end > previousFurthestMeasurement.end) {\n furthestMeasurements.set(measurement.lane, measurement);\n } else if (measurement.end < previousFurthestMeasurement.end) {\n furthestMeasurementsFound.set(measurement.lane, true);\n }\n if (furthestMeasurementsFound.size === this.options.lanes) {\n break;\n }\n }\n return furthestMeasurements.size === this.options.lanes ? Array.from(furthestMeasurements.values()).sort((a, b) => {\n if (a.end === b.end) {\n return a.index - b.index;\n }\n return a.end - b.end;\n })[0] : void 0;\n };\n this.getMeasurementOptions = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.options.enabled\n ],\n (count, paddingStart, scrollMargin, getItemKey, enabled) => {\n this.pendingMeasuredCacheIndexes = [];\n return {\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n enabled\n };\n },\n {\n key: false\n }\n );\n this.getMeasurements = memo(\n () => [this.getMeasurementOptions(), this.itemSizeCache],\n ({ count, paddingStart, scrollMargin, getItemKey, enabled }, itemSizeCache) => {\n if (!enabled) {\n this.measurementsCache = [];\n this.itemSizeCache.clear();\n return [];\n }\n if (this.measurementsCache.length === 0) {\n this.measurementsCache = this.options.initialMeasurementsCache;\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache.set(item.key, item.size);\n });\n }\n const min = this.pendingMeasuredCacheIndexes.length > 0 ? Math.min(...this.pendingMeasuredCacheIndexes) : 0;\n this.pendingMeasuredCacheIndexes = [];\n const measurements = this.measurementsCache.slice(0, min);\n for (let i = min; i < count; i++) {\n const key = getItemKey(i);\n const furthestMeasurement = this.options.lanes === 1 ? measurements[i - 1] : this.getFurthestMeasurement(measurements, i);\n const start = furthestMeasurement ? furthestMeasurement.end + this.options.gap : paddingStart + scrollMargin;\n const measuredSize = itemSizeCache.get(key);\n const size = typeof measuredSize === \"number\" ? measuredSize : this.options.estimateSize(i);\n const end = start + size;\n const lane = furthestMeasurement ? furthestMeasurement.lane : i % this.options.lanes;\n measurements[i] = {\n index: i,\n start,\n size,\n end,\n key,\n lane\n };\n }\n this.measurementsCache = measurements;\n return measurements;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getMeasurements\",\n debug: () => this.options.debug\n }\n );\n this.calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.getScrollOffset()],\n (measurements, outerSize, scrollOffset) => {\n return this.range = measurements.length > 0 && outerSize > 0 ? calculateRange({\n measurements,\n outerSize,\n scrollOffset\n }) : null;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"calculateRange\",\n debug: () => this.options.debug\n }\n );\n this.getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.calculateRange(),\n this.options.overscan,\n this.options.count\n ],\n (rangeExtractor, range, overscan, count) => {\n return range === null ? [] : rangeExtractor({\n startIndex: range.startIndex,\n endIndex: range.endIndex,\n overscan,\n count\n });\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getIndexes\",\n debug: () => this.options.debug\n }\n );\n this.indexFromElement = (node) => {\n const attributeName = this.options.indexAttribute;\n const indexStr = node.getAttribute(attributeName);\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`\n );\n return -1;\n }\n return parseInt(indexStr, 10);\n };\n this._measureElement = (node, entry) => {\n const index = this.indexFromElement(node);\n const item = this.measurementsCache[index];\n if (!item) {\n return;\n }\n const key = item.key;\n const prevNode = this.elementsCache.get(key);\n if (prevNode !== node) {\n if (prevNode) {\n this.observer.unobserve(prevNode);\n }\n this.observer.observe(node);\n this.elementsCache.set(key, node);\n }\n if (node.isConnected) {\n this.resizeItem(index, this.options.measureElement(node, entry, this));\n }\n };\n this.resizeItem = (index, size) => {\n const item = this.measurementsCache[index];\n if (!item) {\n return;\n }\n const itemSize = this.itemSizeCache.get(item.key) ?? item.size;\n const delta = size - itemSize;\n if (delta !== 0) {\n if (this.shouldAdjustScrollPositionOnItemSizeChange !== void 0 ? this.shouldAdjustScrollPositionOnItemSizeChange(item, delta, this) : item.start < this.getScrollOffset() + this.scrollAdjustments) {\n if (process.env.NODE_ENV !== \"production\" && this.options.debug) {\n console.info(\"correction\", delta);\n }\n this._scrollToOffset(this.getScrollOffset(), {\n adjustments: this.scrollAdjustments += delta,\n behavior: void 0\n });\n }\n this.pendingMeasuredCacheIndexes.push(item.index);\n this.itemSizeCache = new Map(this.itemSizeCache.set(item.key, size));\n this.notify(false);\n }\n };\n this.measureElement = (node) => {\n if (!node) {\n this.elementsCache.forEach((cached, key) => {\n if (!cached.isConnected) {\n this.observer.unobserve(cached);\n this.elementsCache.delete(key);\n }\n });\n return;\n }\n this._measureElement(node, void 0);\n };\n this.getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems = [];\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k];\n const measurement = measurements[i];\n virtualItems.push(measurement);\n }\n return virtualItems;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getVirtualItems\",\n debug: () => this.options.debug\n }\n );\n this.getVirtualItemForOffset = (offset) => {\n const measurements = this.getMeasurements();\n if (measurements.length === 0) {\n return void 0;\n }\n return notUndefined(\n measurements[findNearestBinarySearch(\n 0,\n measurements.length - 1,\n (index) => notUndefined(measurements[index]).start,\n offset\n )]\n );\n };\n this.getOffsetForAlignment = (toOffset, align) => {\n const size = this.getSize();\n const scrollOffset = this.getScrollOffset();\n if (align === \"auto\") {\n if (toOffset <= scrollOffset) {\n align = \"start\";\n } else if (toOffset >= scrollOffset + size) {\n align = \"end\";\n } else {\n align = \"start\";\n }\n }\n if (align === \"start\") {\n toOffset = toOffset;\n } else if (align === \"end\") {\n toOffset = toOffset - size;\n } else if (align === \"center\") {\n toOffset = toOffset - size / 2;\n }\n const scrollSizeProp = this.options.horizontal ? \"scrollWidth\" : \"scrollHeight\";\n const scrollSize = this.scrollElement ? \"document\" in this.scrollElement ? this.scrollElement.document.documentElement[scrollSizeProp] : this.scrollElement[scrollSizeProp] : 0;\n const maxOffset = scrollSize - size;\n return Math.max(Math.min(maxOffset, toOffset), 0);\n };\n this.getOffsetForIndex = (index, align = \"auto\") => {\n index = Math.max(0, Math.min(index, this.options.count - 1));\n const item = this.measurementsCache[index];\n if (!item) {\n return void 0;\n }\n const size = this.getSize();\n const scrollOffset = this.getScrollOffset();\n if (align === \"auto\") {\n if (item.end >= scrollOffset + size - this.options.scrollPaddingEnd) {\n align = \"end\";\n } else if (item.start <= scrollOffset + this.options.scrollPaddingStart) {\n align = \"start\";\n } else {\n return [scrollOffset, align];\n }\n }\n const toOffset = align === \"end\" ? item.end + this.options.scrollPaddingEnd : item.start - this.options.scrollPaddingStart;\n return [this.getOffsetForAlignment(toOffset, align), align];\n };\n this.isDynamicMode = () => this.elementsCache.size > 0;\n this.cancelScrollToIndex = () => {\n if (this.scrollToIndexTimeoutId !== null && this.targetWindow) {\n this.targetWindow.clearTimeout(this.scrollToIndexTimeoutId);\n this.scrollToIndexTimeoutId = null;\n }\n };\n this.scrollToOffset = (toOffset, { align = \"start\", behavior } = {}) => {\n this.cancelScrollToIndex();\n if (behavior === \"smooth\" && this.isDynamicMode()) {\n console.warn(\n \"The `smooth` scroll behavior is not fully supported with dynamic size.\"\n );\n }\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), {\n adjustments: void 0,\n behavior\n });\n };\n this.scrollToIndex = (index, { align: initialAlign = \"auto\", behavior } = {}) => {\n index = Math.max(0, Math.min(index, this.options.count - 1));\n this.cancelScrollToIndex();\n if (behavior === \"smooth\" && this.isDynamicMode()) {\n console.warn(\n \"The `smooth` scroll behavior is not fully supported with dynamic size.\"\n );\n }\n const offsetAndAlign = this.getOffsetForIndex(index, initialAlign);\n if (!offsetAndAlign) return;\n const [offset, align] = offsetAndAlign;\n this._scrollToOffset(offset, { adjustments: void 0, behavior });\n if (behavior !== \"smooth\" && this.isDynamicMode() && this.targetWindow) {\n this.scrollToIndexTimeoutId = this.targetWindow.setTimeout(() => {\n this.scrollToIndexTimeoutId = null;\n const elementInDOM = this.elementsCache.has(\n this.options.getItemKey(index)\n );\n if (elementInDOM) {\n const [latestOffset] = notUndefined(\n this.getOffsetForIndex(index, align)\n );\n if (!approxEqual(latestOffset, this.getScrollOffset())) {\n this.scrollToIndex(index, { align, behavior });\n }\n } else {\n this.scrollToIndex(index, { align, behavior });\n }\n });\n }\n };\n this.scrollBy = (delta, { behavior } = {}) => {\n this.cancelScrollToIndex();\n if (behavior === \"smooth\" && this.isDynamicMode()) {\n console.warn(\n \"The `smooth` scroll behavior is not fully supported with dynamic size.\"\n );\n }\n this._scrollToOffset(this.getScrollOffset() + delta, {\n adjustments: void 0,\n behavior\n });\n };\n this.getTotalSize = () => {\n var _a;\n const measurements = this.getMeasurements();\n let end;\n if (measurements.length === 0) {\n end = this.options.paddingStart;\n } else {\n end = this.options.lanes === 1 ? ((_a = measurements[measurements.length - 1]) == null ? void 0 : _a.end) ?? 0 : Math.max(\n ...measurements.slice(-this.options.lanes).map((m) => m.end)\n );\n }\n return Math.max(\n end - this.options.scrollMargin + this.options.paddingEnd,\n 0\n );\n };\n this._scrollToOffset = (offset, {\n adjustments,\n behavior\n }) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this);\n };\n this.measure = () => {\n this.itemSizeCache = /* @__PURE__ */ new Map();\n this.notify(false);\n };\n this.setOptions(opts);\n }\n}\nconst findNearestBinarySearch = (low, high, getCurrentValue, value) => {\n while (low <= high) {\n const middle = (low + high) / 2 | 0;\n const currentValue = getCurrentValue(middle);\n if (currentValue < value) {\n low = middle + 1;\n } else if (currentValue > value) {\n high = middle - 1;\n } else {\n return middle;\n }\n }\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset\n}) {\n const count = measurements.length - 1;\n const getOffset = (index) => measurements[index].start;\n const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset);\n let endIndex = startIndex;\n while (endIndex < count && measurements[endIndex].end < scrollOffset + outerSize) {\n endIndex++;\n }\n return { startIndex, endIndex };\n}\nexport {\n Virtualizer,\n approxEqual,\n debounce,\n defaultKeyExtractor,\n defaultRangeExtractor,\n elementScroll,\n measureElement,\n memo,\n notUndefined,\n observeElementOffset,\n observeElementRect,\n observeWindowOffset,\n observeWindowRect,\n windowScroll\n};\n//# sourceMappingURL=index.js.map\n","import { observeElementRect, observeElementOffset, elementScroll, observeWindowRect, observeWindowOffset, windowScroll, Virtualizer } from \"@tanstack/virtual-core\";\nexport * from \"@tanstack/virtual-core\";\nimport { computed, unref, shallowRef, watch, triggerRef, onScopeDispose } from \"vue\";\nfunction useVirtualizerBase(options) {\n const virtualizer = new Virtualizer(unref(options));\n const state = shallowRef(virtualizer);\n const cleanup = virtualizer._didMount();\n watch(\n () => unref(options).getScrollElement(),\n (el) => {\n if (el) {\n virtualizer._willUpdate();\n }\n },\n {\n immediate: true\n }\n );\n watch(\n () => unref(options),\n (options2) => {\n virtualizer.setOptions({\n ...options2,\n onChange: (instance, sync) => {\n var _a;\n triggerRef(state);\n (_a = options2.onChange) == null ? void 0 : _a.call(options2, instance, sync);\n }\n });\n virtualizer._willUpdate();\n triggerRef(state);\n },\n {\n immediate: true\n }\n );\n onScopeDispose(cleanup);\n return state;\n}\nfunction useVirtualizer(options) {\n return useVirtualizerBase(\n computed(() => ({\n observeElementRect,\n observeElementOffset,\n scrollToFn: elementScroll,\n ...unref(options)\n }))\n );\n}\nfunction useWindowVirtualizer(options) {\n return useVirtualizerBase(\n computed(() => ({\n getScrollElement: () => typeof document !== \"undefined\" ? window : null,\n observeElementRect: observeWindowRect,\n observeElementOffset: observeWindowOffset,\n scrollToFn: windowScroll,\n initialOffset: () => typeof document !== \"undefined\" ? window.scrollY : 0,\n ...unref(options)\n }))\n );\n}\nexport {\n useVirtualizer,\n useWindowVirtualizer\n};\n//# sourceMappingURL=index.js.map\n","import{computed as p,ref as s}from\"vue\";function d(u,e,r){let i=s(r==null?void 0:r.value),f=p(()=>u.value!==void 0);return[p(()=>f.value?u.value:i.value),function(t){return f.value||(i.value=t),e==null?void 0:e(t)}]}export{d as useControllable};\n","function t(e){typeof queueMicrotask==\"function\"?queueMicrotask(e):Promise.resolve().then(e).catch(o=>setTimeout(()=>{throw o}))}export{t as microTask};\n","import{microTask as n}from'./micro-task.js';function o(){let a=[],s={addEventListener(e,t,r,i){return e.addEventListener(t,r,i),s.add(()=>e.removeEventListener(t,r,i))},requestAnimationFrame(...e){let t=requestAnimationFrame(...e);s.add(()=>cancelAnimationFrame(t))},nextFrame(...e){s.requestAnimationFrame(()=>{s.requestAnimationFrame(...e)})},setTimeout(...e){let t=setTimeout(...e);s.add(()=>clearTimeout(t))},microTask(...e){let t={current:!0};return n(()=>{t.current&&e[0]()}),s.add(()=>{t.current=!1})},style(e,t,r){let i=e.style.getPropertyValue(t);return Object.assign(e.style,{[t]:r}),this.add(()=>{Object.assign(e.style,{[t]:i})})},group(e){let t=o();return e(t),this.add(()=>t.dispose())},add(e){return a.push(e),()=>{let t=a.indexOf(e);if(t>=0)for(let r of a.splice(t,1))r()}},dispose(){for(let e of a.splice(0))e()}};return s}export{o as disposables};\n","import{onUnmounted as s}from\"vue\";import{disposables as e}from'../utils/disposables.js';function i(){let o=e();return s(()=>o.dispose()),o}export{i as useDisposables};\n","import{useDisposables as r}from'./use-disposables.js';function t(){let e=r();return o=>{e.dispose(),e.nextFrame(o)}}export{t as useFrameDebounce};\n","var r;import*as e from\"vue\";let n=Symbol(\"headlessui.useid\"),o=0;const i=(r=e.useId)!=null?r:function(){return e.inject(n,()=>`${++o}`)()};function s(t){e.provide(n,t)}export{s as provideUseId,i as useId};\n","function o(e){var l;if(e==null||e.value==null)return null;let n=(l=e.value.$el)!=null?l:e.value;return n instanceof Node?n:null}export{o as dom};\n","function u(r,n,...a){if(r in n){let e=n[r];return typeof e==\"function\"?e(...a):e}let t=new Error(`Tried to handle \"${r}\" but there is no handler defined. Only defined handlers are: ${Object.keys(n).map(e=>`\"${e}\"`).join(\", \")}.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,u),t}export{u as match};\n","var i=Object.defineProperty;var d=(t,e,r)=>e in t?i(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var n=(t,e,r)=>(d(t,typeof e!=\"symbol\"?e+\"\":e,r),r);class s{constructor(){n(this,\"current\",this.detect());n(this,\"currentId\",0)}set(e){this.current!==e&&(this.currentId=0,this.current=e)}reset(){this.set(this.detect())}nextId(){return++this.currentId}get isServer(){return this.current===\"server\"}get isClient(){return this.current===\"client\"}detect(){return typeof window==\"undefined\"||typeof document==\"undefined\"?\"server\":\"client\"}}let c=new s;export{c as env};\n","import{dom as o}from'./dom.js';import{env as t}from'./env.js';function i(r){if(t.isServer)return null;if(r instanceof Node)return r.ownerDocument;if(r!=null&&r.hasOwnProperty(\"value\")){let n=o(r);if(n)return n.ownerDocument}return document}export{i as getOwnerDocument};\n","import{nextTick as b}from\"vue\";import{match as M}from'./match.js';import{getOwnerDocument as f}from'./owner.js';let c=[\"[contentEditable=true]\",\"[tabindex]\",\"a[href]\",\"area[href]\",\"button:not([disabled])\",\"iframe\",\"input:not([disabled])\",\"select:not([disabled])\",\"textarea:not([disabled])\"].map(e=>`${e}:not([tabindex='-1'])`).join(\",\");var N=(n=>(n[n.First=1]=\"First\",n[n.Previous=2]=\"Previous\",n[n.Next=4]=\"Next\",n[n.Last=8]=\"Last\",n[n.WrapAround=16]=\"WrapAround\",n[n.NoScroll=32]=\"NoScroll\",n))(N||{}),T=(o=>(o[o.Error=0]=\"Error\",o[o.Overflow=1]=\"Overflow\",o[o.Success=2]=\"Success\",o[o.Underflow=3]=\"Underflow\",o))(T||{}),F=(t=>(t[t.Previous=-1]=\"Previous\",t[t.Next=1]=\"Next\",t))(F||{});function E(e=document.body){return e==null?[]:Array.from(e.querySelectorAll(c)).sort((r,t)=>Math.sign((r.tabIndex||Number.MAX_SAFE_INTEGER)-(t.tabIndex||Number.MAX_SAFE_INTEGER)))}var h=(t=>(t[t.Strict=0]=\"Strict\",t[t.Loose=1]=\"Loose\",t))(h||{});function w(e,r=0){var t;return e===((t=f(e))==null?void 0:t.body)?!1:M(r,{[0](){return e.matches(c)},[1](){let l=e;for(;l!==null;){if(l.matches(c))return!0;l=l.parentElement}return!1}})}function _(e){let r=f(e);b(()=>{r&&!w(r.activeElement,0)&&S(e)})}var y=(t=>(t[t.Keyboard=0]=\"Keyboard\",t[t.Mouse=1]=\"Mouse\",t))(y||{});typeof window!=\"undefined\"&&typeof document!=\"undefined\"&&(document.addEventListener(\"keydown\",e=>{e.metaKey||e.altKey||e.ctrlKey||(document.documentElement.dataset.headlessuiFocusVisible=\"\")},!0),document.addEventListener(\"click\",e=>{e.detail===1?delete document.documentElement.dataset.headlessuiFocusVisible:e.detail===0&&(document.documentElement.dataset.headlessuiFocusVisible=\"\")},!0));function S(e){e==null||e.focus({preventScroll:!0})}let H=[\"textarea\",\"input\"].join(\",\");function I(e){var r,t;return(t=(r=e==null?void 0:e.matches)==null?void 0:r.call(e,H))!=null?t:!1}function O(e,r=t=>t){return e.slice().sort((t,l)=>{let o=r(t),i=r(l);if(o===null||i===null)return 0;let n=o.compareDocumentPosition(i);return n&Node.DOCUMENT_POSITION_FOLLOWING?-1:n&Node.DOCUMENT_POSITION_PRECEDING?1:0})}function v(e,r){return P(E(),r,{relativeTo:e})}function P(e,r,{sorted:t=!0,relativeTo:l=null,skipElements:o=[]}={}){var m;let i=(m=Array.isArray(e)?e.length>0?e[0].ownerDocument:document:e==null?void 0:e.ownerDocument)!=null?m:document,n=Array.isArray(e)?t?O(e):e:E(e);o.length>0&&n.length>1&&(n=n.filter(s=>!o.includes(s))),l=l!=null?l:i.activeElement;let x=(()=>{if(r&5)return 1;if(r&10)return-1;throw new Error(\"Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last\")})(),p=(()=>{if(r&1)return 0;if(r&2)return Math.max(0,n.indexOf(l))-1;if(r&4)return Math.max(0,n.indexOf(l))+1;if(r&8)return n.length-1;throw new Error(\"Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last\")})(),L=r&32?{preventScroll:!0}:{},a=0,d=n.length,u;do{if(a>=d||a+d<=0)return 0;let s=p+a;if(r&16)s=(s+d)%d;else{if(s<0)return 3;if(s>=d)return 1}u=n[s],u==null||u.focus(L),a+=x}while(u!==i.activeElement);return r&6&&I(u)&&u.select(),2}export{N as Focus,T as FocusResult,h as FocusableMode,S as focusElement,v as focusFrom,P as focusIn,E as getFocusableElements,w as isFocusableElement,_ as restoreFocusIfNecessary,O as sortByDomNode};\n","function t(){return/iPhone/gi.test(window.navigator.platform)||/Mac/gi.test(window.navigator.platform)&&window.navigator.maxTouchPoints>0}function i(){return/Android/gi.test(window.navigator.userAgent)}function n(){return t()||i()}export{i as isAndroid,t as isIOS,n as isMobile};\n","import{watchEffect as r}from\"vue\";import{env as m}from'../utils/env.js';function u(e,t,n){m.isServer||r(o=>{document.addEventListener(e,t,n),o(()=>document.removeEventListener(e,t,n))})}export{u as useDocumentEvent};\n","import{watchEffect as i}from\"vue\";import{env as r}from'../utils/env.js';function w(e,n,t){r.isServer||i(o=>{window.addEventListener(e,n,t),o(()=>window.removeEventListener(e,n,t))})}export{w as useWindowEvent};\n","import{computed as s,ref as E}from\"vue\";import{dom as p}from'../utils/dom.js';import{FocusableMode as d,isFocusableElement as C}from'../utils/focus-management.js';import{isMobile as T}from'../utils/platform.js';import{useDocumentEvent as i}from'./use-document-event.js';import{useWindowEvent as M}from'./use-window-event.js';function w(f,m,l=s(()=>!0)){function a(e,r){if(!l.value||e.defaultPrevented)return;let t=r(e);if(t===null||!t.getRootNode().contains(t))return;let c=function o(n){return typeof n==\"function\"?o(n()):Array.isArray(n)||n instanceof Set?n:[n]}(f);for(let o of c){if(o===null)continue;let n=o instanceof HTMLElement?o:p(o);if(n!=null&&n.contains(t)||e.composed&&e.composedPath().includes(n))return}return!C(t,d.Loose)&&t.tabIndex!==-1&&e.preventDefault(),m(e,t)}let u=E(null);i(\"pointerdown\",e=>{var r,t;l.value&&(u.value=((t=(r=e.composedPath)==null?void 0:r.call(e))==null?void 0:t[0])||e.target)},!0),i(\"mousedown\",e=>{var r,t;l.value&&(u.value=((t=(r=e.composedPath)==null?void 0:r.call(e))==null?void 0:t[0])||e.target)},!0),i(\"click\",e=>{T()||u.value&&(a(e,()=>u.value),u.value=null)},!0),i(\"touchend\",e=>a(e,()=>e.target instanceof HTMLElement?e.target:null),!0),M(\"blur\",e=>a(e,()=>window.document.activeElement instanceof HTMLIFrameElement?window.document.activeElement:null),!0)}export{w as useOutsideClick};\n","import{onMounted as i,ref as f,watchEffect as l}from\"vue\";import{dom as o}from'../utils/dom.js';function r(t,e){if(t)return t;let n=e!=null?e:\"button\";if(typeof n==\"string\"&&n.toLowerCase()===\"button\")return\"button\"}function s(t,e){let n=f(r(t.value.type,t.value.as));return i(()=>{n.value=r(t.value.type,t.value.as)}),l(()=>{var u;n.value||o(e)&&o(e)instanceof HTMLButtonElement&&!((u=o(e))!=null&&u.hasAttribute(\"type\"))&&(n.value=\"button\")}),n}export{s as useResolveButtonType};\n","import{ref as o}from\"vue\";function r(e){return[e.screenX,e.screenY]}function u(){let e=o([-1,-1]);return{wasMoved(n){let t=r(n);return e.value[0]===t[0]&&e.value[1]===t[1]?!1:(e.value=t,!0)},update(n){e.value=r(n)}}}export{u as useTrackedPointer};\n","import{watchEffect as p}from\"vue\";import{getOwnerDocument as u}from'../utils/owner.js';function i({container:e,accept:t,walk:d,enabled:o}){p(()=>{let r=e.value;if(!r||o!==void 0&&!o.value)return;let l=u(e);if(!l)return;let c=Object.assign(f=>t(f),{acceptNode:t}),n=l.createTreeWalker(r,NodeFilter.SHOW_ELEMENT,c,!1);for(;n.nextNode();)d(n.currentNode)})}export{i as useTreeWalker};\n","import{cloneVNode as O,Fragment as x,h as k}from\"vue\";import{match as w}from'./match.js';var N=(o=>(o[o.None=0]=\"None\",o[o.RenderStrategy=1]=\"RenderStrategy\",o[o.Static=2]=\"Static\",o))(N||{}),S=(e=>(e[e.Unmount=0]=\"Unmount\",e[e.Hidden=1]=\"Hidden\",e))(S||{});function A({visible:r=!0,features:t=0,ourProps:e,theirProps:o,...i}){var a;let n=j(o,e),l=Object.assign(i,{props:n});if(r||t&2&&n.static)return y(l);if(t&1){let d=(a=n.unmount)==null||a?0:1;return w(d,{[0](){return null},[1](){return y({...i,props:{...n,hidden:!0,style:{display:\"none\"}}})}})}return y(l)}function y({props:r,attrs:t,slots:e,slot:o,name:i}){var m,h;let{as:n,...l}=T(r,[\"unmount\",\"static\"]),a=(m=e.default)==null?void 0:m.call(e,o),d={};if(o){let u=!1,c=[];for(let[p,f]of Object.entries(o))typeof f==\"boolean\"&&(u=!0),f===!0&&c.push(p);u&&(d[\"data-headlessui-state\"]=c.join(\" \"))}if(n===\"template\"){if(a=b(a!=null?a:[]),Object.keys(l).length>0||Object.keys(t).length>0){let[u,...c]=a!=null?a:[];if(!v(u)||c.length>0)throw new Error(['Passing props on \"template\"!',\"\",`The current component <${i} /> is rendering a \"template\".`,\"However we need to passthrough the following props:\",Object.keys(l).concat(Object.keys(t)).map(s=>s.trim()).filter((s,g,R)=>R.indexOf(s)===g).sort((s,g)=>s.localeCompare(g)).map(s=>` - ${s}`).join(`\n`),\"\",\"You can apply a few solutions:\",['Add an `as=\"...\"` prop, to ensure that we render an actual element instead of a \"template\".',\"Render a single element as the child so that we can forward the props onto that element.\"].map(s=>` - ${s}`).join(`\n`)].join(`\n`));let p=j((h=u.props)!=null?h:{},l,d),f=O(u,p,!0);for(let s in p)s.startsWith(\"on\")&&(f.props||(f.props={}),f.props[s]=p[s]);return f}return Array.isArray(a)&&a.length===1?a[0]:a}return k(n,Object.assign({},l,d),{default:()=>a})}function b(r){return r.flatMap(t=>t.type===x?b(t.children):[t])}function j(...r){var o;if(r.length===0)return{};if(r.length===1)return r[0];let t={},e={};for(let i of r)for(let n in i)n.startsWith(\"on\")&&typeof i[n]==\"function\"?((o=e[n])!=null||(e[n]=[]),e[n].push(i[n])):t[n]=i[n];if(t.disabled||t[\"aria-disabled\"])return Object.assign(t,Object.fromEntries(Object.keys(e).map(i=>[i,void 0])));for(let i in e)Object.assign(t,{[i](n,...l){let a=e[i];for(let d of a){if(n instanceof Event&&n.defaultPrevented)return;d(n,...l)}}});return t}function E(r){let t=Object.assign({},r);for(let e in t)t[e]===void 0&&delete t[e];return t}function T(r,t=[]){let e=Object.assign({},r);for(let o of t)o in e&&delete e[o];return e}function v(r){return r==null?!1:typeof r.type==\"string\"||typeof r.type==\"object\"||typeof r.type==\"function\"}export{N as Features,S as RenderStrategy,E as compact,T as omit,A as render};\n","import{defineComponent as a}from\"vue\";import{render as p}from'../utils/render.js';var u=(e=>(e[e.None=1]=\"None\",e[e.Focusable=2]=\"Focusable\",e[e.Hidden=4]=\"Hidden\",e))(u||{});let f=a({name:\"Hidden\",props:{as:{type:[Object,String],default:\"div\"},features:{type:Number,default:1}},setup(t,{slots:n,attrs:i}){return()=>{var r;let{features:e,...d}=t,o={\"aria-hidden\":(e&2)===2?!0:(r=d[\"aria-hidden\"])!=null?r:void 0,hidden:(e&4)===4?!0:void 0,style:{position:\"fixed\",top:1,left:1,width:1,height:0,padding:0,margin:-1,overflow:\"hidden\",clip:\"rect(0, 0, 0, 0)\",whiteSpace:\"nowrap\",borderWidth:\"0\",...(e&4)===4&&(e&2)!==2&&{display:\"none\"}}};return p({ourProps:o,theirProps:d,slot:{},attrs:i,slots:n,name:\"Hidden\"})}}});export{u as Features,f as Hidden};\n","import{inject as p,provide as r}from\"vue\";let n=Symbol(\"Context\");var i=(e=>(e[e.Open=1]=\"Open\",e[e.Closed=2]=\"Closed\",e[e.Closing=4]=\"Closing\",e[e.Opening=8]=\"Opening\",e))(i||{});function s(){return l()!==null}function l(){return p(n,null)}function t(o){r(n,o)}export{i as State,s as hasOpenClosed,l as useOpenClosed,t as useOpenClosedProvider};\n","var o=(r=>(r.Space=\" \",r.Enter=\"Enter\",r.Escape=\"Escape\",r.Backspace=\"Backspace\",r.Delete=\"Delete\",r.ArrowLeft=\"ArrowLeft\",r.ArrowUp=\"ArrowUp\",r.ArrowRight=\"ArrowRight\",r.ArrowDown=\"ArrowDown\",r.Home=\"Home\",r.End=\"End\",r.PageUp=\"PageUp\",r.PageDown=\"PageDown\",r.Tab=\"Tab\",r))(o||{});export{o as Keys};\n","var g=(f=>(f[f.Left=0]=\"Left\",f[f.Right=2]=\"Right\",f))(g||{});export{g as MouseButton};\n","function t(n){function e(){document.readyState!==\"loading\"&&(n(),document.removeEventListener(\"DOMContentLoaded\",e))}typeof window!=\"undefined\"&&typeof document!=\"undefined\"&&(document.addEventListener(\"DOMContentLoaded\",e),e())}export{t as onDocumentReady};\n","import{onDocumentReady as d}from'./document-ready.js';let t=[];d(()=>{function e(n){n.target instanceof HTMLElement&&n.target!==document.body&&t[0]!==n.target&&(t.unshift(n.target),t=t.filter(r=>r!=null&&r.isConnected),t.splice(10))}window.addEventListener(\"click\",e,{capture:!0}),window.addEventListener(\"mousedown\",e,{capture:!0}),window.addEventListener(\"focus\",e,{capture:!0}),document.body.addEventListener(\"click\",e,{capture:!0}),document.body.addEventListener(\"mousedown\",e,{capture:!0}),document.body.addEventListener(\"focus\",e,{capture:!0})});export{t as history};\n","function u(l){throw new Error(\"Unexpected object: \"+l)}var c=(i=>(i[i.First=0]=\"First\",i[i.Previous=1]=\"Previous\",i[i.Next=2]=\"Next\",i[i.Last=3]=\"Last\",i[i.Specific=4]=\"Specific\",i[i.Nothing=5]=\"Nothing\",i))(c||{});function f(l,n){let t=n.resolveItems();if(t.length<=0)return null;let r=n.resolveActiveIndex(),s=r!=null?r:-1;switch(l.focus){case 0:{for(let e=0;e=0;--e)if(!n.resolveDisabled(t[e],e,t))return e;return r}case 2:{for(let e=s+1;e=0;--e)if(!n.resolveDisabled(t[e],e,t))return e;return r}case 4:{for(let e=0;e(r[r.Open=0]=\"Open\",r[r.Closed=1]=\"Closed\",r))(Ee||{}),Ve=(r=>(r[r.Single=0]=\"Single\",r[r.Multi=1]=\"Multi\",r))(Ve||{}),ke=(y=>(y[y.Pointer=0]=\"Pointer\",y[y.Focus=1]=\"Focus\",y[y.Other=2]=\"Other\",y))(ke||{});let ne=Symbol(\"ComboboxContext\");function K(a){let h=ee(ne,null);if(h===null){let r=new Error(`<${a} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,K),r}return h}let ie=Symbol(\"VirtualContext\"),Ae=H({name:\"VirtualProvider\",setup(a,{slots:h}){let r=K(\"VirtualProvider\"),y=m(()=>{let c=x(r.optionsRef);if(!c)return{start:0,end:0};let f=window.getComputedStyle(c);return{start:parseFloat(f.paddingBlockStart||f.paddingTop),end:parseFloat(f.paddingBlockEnd||f.paddingBottom)}}),o=re(m(()=>({scrollPaddingStart:y.value.start,scrollPaddingEnd:y.value.end,count:r.virtual.value.options.length,estimateSize(){return 40},getScrollElement(){return x(r.optionsRef)},overscan:12}))),u=m(()=>{var c;return(c=r.virtual.value)==null?void 0:c.options}),e=k(0);return J([u],()=>{e.value+=1}),te(ie,r.virtual.value?o:null),()=>[z(\"div\",{style:{position:\"relative\",width:\"100%\",height:`${o.value.getTotalSize()}px`},ref:c=>{if(c){if(typeof process!=\"undefined\"&&process.env.JEST_WORKER_ID!==void 0||r.activationTrigger.value===0)return;r.activeOptionIndex.value!==null&&r.virtual.value.options.length>r.activeOptionIndex.value&&o.value.scrollToIndex(r.activeOptionIndex.value)}}},o.value.getVirtualItems().map(c=>de(h.default({option:r.virtual.value.options[c.index],open:r.comboboxState.value===0})[0],{key:`${e.value}-${c.index}`,\"data-index\":c.index,\"aria-setsize\":r.virtual.value.options.length,\"aria-posinset\":c.index+1,style:{position:\"absolute\",top:0,left:0,transform:`translateY(${c.start}px)`,overflowAnchor:\"none\"}})))]}}),lt=H({name:\"Combobox\",emits:{\"update:modelValue\":a=>!0},props:{as:{type:[Object,String],default:\"template\"},disabled:{type:[Boolean],default:!1},by:{type:[String,Function],nullable:!0,default:null},modelValue:{type:[Object,String,Number,Boolean],default:void 0},defaultValue:{type:[Object,String,Number,Boolean],default:void 0},form:{type:String,optional:!0},name:{type:String,optional:!0},nullable:{type:Boolean,default:!1},multiple:{type:[Boolean],default:!1},immediate:{type:[Boolean],default:!1},virtual:{type:Object,default:null}},inheritAttrs:!1,setup(a,{slots:h,attrs:r,emit:y}){let o=k(1),u=k(null),e=k(null),c=k(null),f=k(null),S=k({static:!1,hold:!1}),v=k([]),d=k(null),D=k(2),E=k(!1);function w(t=n=>n){let n=d.value!==null?v.value[d.value]:null,s=t(v.value.slice()),b=s.length>0&&s[0].dataRef.order.value!==null?s.sort((C,A)=>C.dataRef.order.value-A.dataRef.order.value):Te(s,C=>x(C.dataRef.domRef)),O=n?b.indexOf(n):null;return O===-1&&(O=null),{options:b,activeOptionIndex:O}}let M=m(()=>a.multiple?1:0),$=m(()=>a.nullable),[B,p]=pe(m(()=>a.modelValue),t=>y(\"update:modelValue\",t),m(()=>a.defaultValue)),R=m(()=>B.value===void 0?_(M.value,{[1]:[],[0]:void 0}):B.value),V=null,i=null;function I(t){return _(M.value,{[0](){return p==null?void 0:p(t)},[1]:()=>{let n=L(l.value.value).slice(),s=L(t),b=n.findIndex(O=>l.compare(s,L(O)));return b===-1?n.push(s):n.splice(b,1),p==null?void 0:p(n)}})}let T=m(()=>{});J([T],([t],[n])=>{if(l.virtual.value&&t&&n&&d.value!==null){let s=t.indexOf(n[d.value]);s!==-1?d.value=s:d.value=null}});let l={comboboxState:o,value:R,mode:M,compare(t,n){if(typeof a.by==\"string\"){let s=a.by;return(t==null?void 0:t[s])===(n==null?void 0:n[s])}return a.by===null?De(t,n):a.by(t,n)},calculateIndex(t){return l.virtual.value?a.by===null?l.virtual.value.options.indexOf(t):l.virtual.value.options.findIndex(n=>l.compare(n,t)):v.value.findIndex(n=>l.compare(n.dataRef.value,t))},defaultValue:m(()=>a.defaultValue),nullable:$,immediate:m(()=>!1),virtual:m(()=>null),inputRef:e,labelRef:u,buttonRef:c,optionsRef:f,disabled:m(()=>a.disabled),options:v,change(t){p(t)},activeOptionIndex:m(()=>{if(E.value&&d.value===null&&(l.virtual.value?l.virtual.value.options.length>0:v.value.length>0)){if(l.virtual.value){let n=l.virtual.value.options.findIndex(s=>{var b;return!((b=l.virtual.value)!=null&&b.disabled(s))});if(n!==-1)return n}let t=v.value.findIndex(n=>!n.dataRef.disabled);if(t!==-1)return t}return d.value}),activationTrigger:D,optionsPropsRef:S,closeCombobox(){E.value=!1,!a.disabled&&o.value!==1&&(o.value=1,d.value=null)},openCombobox(){if(E.value=!0,!a.disabled&&o.value!==0){if(l.value.value){let t=l.calculateIndex(l.value.value);t!==-1&&(d.value=t)}o.value=0}},setActivationTrigger(t){D.value=t},goToOption(t,n,s){E.value=!1,V!==null&&cancelAnimationFrame(V),V=requestAnimationFrame(()=>{if(a.disabled||f.value&&!S.value.static&&o.value===1)return;if(l.virtual.value){d.value=t===P.Specific?n:le({focus:t},{resolveItems:()=>l.virtual.value.options,resolveActiveIndex:()=>{var C,A;return(A=(C=l.activeOptionIndex.value)!=null?C:l.virtual.value.options.findIndex(j=>{var q;return!((q=l.virtual.value)!=null&&q.disabled(j))}))!=null?A:null},resolveDisabled:C=>l.virtual.value.disabled(C),resolveId(){throw new Error(\"Function not implemented.\")}}),D.value=s!=null?s:2;return}let b=w();if(b.activeOptionIndex===null){let C=b.options.findIndex(A=>!A.dataRef.disabled);C!==-1&&(b.activeOptionIndex=C)}let O=t===P.Specific?n:le({focus:t},{resolveItems:()=>b.options,resolveActiveIndex:()=>b.activeOptionIndex,resolveId:C=>C.id,resolveDisabled:C=>C.dataRef.disabled});d.value=O,D.value=s!=null?s:2,v.value=b.options})},selectOption(t){let n=v.value.find(b=>b.id===t);if(!n)return;let{dataRef:s}=n;I(s.value)},selectActiveOption(){if(l.activeOptionIndex.value!==null){if(l.virtual.value)I(l.virtual.value.options[l.activeOptionIndex.value]);else{let{dataRef:t}=v.value[l.activeOptionIndex.value];I(t.value)}l.goToOption(P.Specific,l.activeOptionIndex.value)}},registerOption(t,n){let s=ve({id:t,dataRef:n});if(l.virtual.value){v.value.push(s);return}i&&cancelAnimationFrame(i);let b=w(O=>(O.push(s),O));d.value===null&&l.isSelected(n.value.value)&&(b.activeOptionIndex=b.options.indexOf(s)),v.value=b.options,d.value=b.activeOptionIndex,D.value=2,b.options.some(O=>!x(O.dataRef.domRef))&&(i=requestAnimationFrame(()=>{let O=w();v.value=O.options,d.value=O.activeOptionIndex}))},unregisterOption(t,n){if(V!==null&&cancelAnimationFrame(V),n&&(E.value=!0),l.virtual.value){v.value=v.value.filter(b=>b.id!==t);return}let s=w(b=>{let O=b.findIndex(C=>C.id===t);return O!==-1&&b.splice(O,1),b});v.value=s.options,d.value=s.activeOptionIndex,D.value=2},isSelected(t){return _(M.value,{[0]:()=>l.compare(L(l.value.value),L(t)),[1]:()=>L(l.value.value).some(n=>l.compare(L(n),L(t)))})},isActive(t){return d.value===l.calculateIndex(t)}};ce([e,c,f],()=>l.closeCombobox(),m(()=>o.value===0)),te(ne,l),Re(m(()=>_(o.value,{[0]:G.Open,[1]:G.Closed})));let g=m(()=>{var t;return(t=x(e))==null?void 0:t.closest(\"form\")});return X(()=>{J([g],()=>{if(!g.value||a.defaultValue===void 0)return;function t(){l.change(a.defaultValue)}return g.value.addEventListener(\"reset\",t),()=>{var n;(n=g.value)==null||n.removeEventListener(\"reset\",t)}},{immediate:!0})}),()=>{var C,A,j;let{name:t,disabled:n,form:s,...b}=a,O={open:o.value===0,disabled:n,activeIndex:l.activeOptionIndex.value,activeOption:l.activeOptionIndex.value===null?null:l.virtual.value?l.virtual.value.options[(C=l.activeOptionIndex.value)!=null?C:0]:(j=(A=l.options.value[l.activeOptionIndex.value])==null?void 0:A.dataRef.value)!=null?j:null,value:R.value};return z(se,[...t!=null&&R.value!=null?Ie({[t]:R.value}).map(([q,ue])=>z(Oe,Pe({features:Se.Hidden,key:q,as:\"input\",type:\"hidden\",hidden:!0,readOnly:!0,form:s,disabled:n,name:q,value:ue}))):[],U({theirProps:{...r,...Z(b,[\"by\",\"defaultValue\",\"immediate\",\"modelValue\",\"multiple\",\"nullable\",\"onUpdate:modelValue\",\"virtual\"])},ourProps:{},slot:O,slots:h,attrs:r,name:\"Combobox\"})])}}}),at=H({name:\"ComboboxLabel\",props:{as:{type:[Object,String],default:\"label\"},id:{type:String,default:null}},setup(a,{attrs:h,slots:r}){var e;let y=(e=a.id)!=null?e:`headlessui-combobox-label-${W()}`,o=K(\"ComboboxLabel\");function u(){var c;(c=x(o.inputRef))==null||c.focus({preventScroll:!0})}return()=>{let c={open:o.comboboxState.value===0,disabled:o.disabled.value},{...f}=a,S={id:y,ref:o.labelRef,onClick:u};return U({ourProps:S,theirProps:f,slot:c,attrs:h,slots:r,name:\"ComboboxLabel\"})}}}),nt=H({name:\"ComboboxButton\",props:{as:{type:[Object,String],default:\"button\"},id:{type:String,default:null}},setup(a,{attrs:h,slots:r,expose:y}){var S;let o=(S=a.id)!=null?S:`headlessui-combobox-button-${W()}`,u=K(\"ComboboxButton\");y({el:u.buttonRef,$el:u.buttonRef});function e(v){u.disabled.value||(u.comboboxState.value===0?u.closeCombobox():(v.preventDefault(),u.openCombobox()),N(()=>{var d;return(d=x(u.inputRef))==null?void 0:d.focus({preventScroll:!0})}))}function c(v){switch(v.key){case F.ArrowDown:v.preventDefault(),v.stopPropagation(),u.comboboxState.value===1&&u.openCombobox(),N(()=>{var d;return(d=u.inputRef.value)==null?void 0:d.focus({preventScroll:!0})});return;case F.ArrowUp:v.preventDefault(),v.stopPropagation(),u.comboboxState.value===1&&(u.openCombobox(),N(()=>{u.value.value||u.goToOption(P.Last)})),N(()=>{var d;return(d=u.inputRef.value)==null?void 0:d.focus({preventScroll:!0})});return;case F.Escape:if(u.comboboxState.value!==0)return;v.preventDefault(),u.optionsRef.value&&!u.optionsPropsRef.value.static&&v.stopPropagation(),u.closeCombobox(),N(()=>{var d;return(d=u.inputRef.value)==null?void 0:d.focus({preventScroll:!0})});return}}let f=me(m(()=>({as:a.as,type:h.type})),u.buttonRef);return()=>{var E,w;let v={open:u.comboboxState.value===0,disabled:u.disabled.value,value:u.value.value},{...d}=a,D={ref:u.buttonRef,id:o,type:f.value,tabindex:\"-1\",\"aria-haspopup\":\"listbox\",\"aria-controls\":(E=x(u.optionsRef))==null?void 0:E.id,\"aria-expanded\":u.comboboxState.value===0,\"aria-labelledby\":u.labelRef.value?[(w=x(u.labelRef))==null?void 0:w.id,o].join(\" \"):void 0,disabled:u.disabled.value===!0?!0:void 0,onKeydown:c,onClick:e};return U({ourProps:D,theirProps:d,slot:v,attrs:h,slots:r,name:\"ComboboxButton\"})}}}),it=H({name:\"ComboboxInput\",props:{as:{type:[Object,String],default:\"input\"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},displayValue:{type:Function},defaultValue:{type:String,default:void 0},id:{type:String,default:null}},emits:{change:a=>!0},setup(a,{emit:h,attrs:r,slots:y,expose:o}){var V;let u=(V=a.id)!=null?V:`headlessui-combobox-input-${W()}`,e=K(\"ComboboxInput\"),c=m(()=>he(x(e.inputRef))),f={value:!1};o({el:e.inputRef,$el:e.inputRef});function S(){e.change(null);let i=x(e.optionsRef);i&&(i.scrollTop=0),e.goToOption(P.Nothing)}let v=m(()=>{var I;let i=e.value.value;return x(e.inputRef)?typeof a.displayValue!=\"undefined\"&&i!==void 0?(I=a.displayValue(i))!=null?I:\"\":typeof i==\"string\"?i:\"\":\"\"});X(()=>{J([v,e.comboboxState,c],([i,I],[T,l])=>{if(f.value)return;let g=x(e.inputRef);g&&((l===0&&I===1||i!==T)&&(g.value=i),requestAnimationFrame(()=>{var s;if(f.value||!g||((s=c.value)==null?void 0:s.activeElement)!==g)return;let{selectionStart:t,selectionEnd:n}=g;Math.abs((n!=null?n:0)-(t!=null?t:0))===0&&t===0&&g.setSelectionRange(g.value.length,g.value.length)}))},{immediate:!0}),J([e.comboboxState],([i],[I])=>{if(i===0&&I===1){if(f.value)return;let T=x(e.inputRef);if(!T)return;let l=T.value,{selectionStart:g,selectionEnd:t,selectionDirection:n}=T;T.value=\"\",T.value=l,n!==null?T.setSelectionRange(g,t,n):T.setSelectionRange(g,t)}})});let d=k(!1);function D(){d.value=!0}function E(){ae().nextFrame(()=>{d.value=!1})}let w=be();function M(i){switch(f.value=!0,w(()=>{f.value=!1}),i.key){case F.Enter:if(f.value=!1,e.comboboxState.value!==0||d.value)return;if(i.preventDefault(),i.stopPropagation(),e.activeOptionIndex.value===null){e.closeCombobox();return}e.selectActiveOption(),e.mode.value===0&&e.closeCombobox();break;case F.ArrowDown:return f.value=!1,i.preventDefault(),i.stopPropagation(),_(e.comboboxState.value,{[0]:()=>e.goToOption(P.Next),[1]:()=>e.openCombobox()});case F.ArrowUp:return f.value=!1,i.preventDefault(),i.stopPropagation(),_(e.comboboxState.value,{[0]:()=>e.goToOption(P.Previous),[1]:()=>{e.openCombobox(),N(()=>{e.value.value||e.goToOption(P.Last)})}});case F.Home:if(i.shiftKey)break;return f.value=!1,i.preventDefault(),i.stopPropagation(),e.goToOption(P.First);case F.PageUp:return f.value=!1,i.preventDefault(),i.stopPropagation(),e.goToOption(P.First);case F.End:if(i.shiftKey)break;return f.value=!1,i.preventDefault(),i.stopPropagation(),e.goToOption(P.Last);case F.PageDown:return f.value=!1,i.preventDefault(),i.stopPropagation(),e.goToOption(P.Last);case F.Escape:if(f.value=!1,e.comboboxState.value!==0)return;i.preventDefault(),e.optionsRef.value&&!e.optionsPropsRef.value.static&&i.stopPropagation(),e.nullable.value&&e.mode.value===0&&e.value.value===null&&S(),e.closeCombobox();break;case F.Tab:if(f.value=!1,e.comboboxState.value!==0)return;e.mode.value===0&&e.activationTrigger.value!==1&&e.selectActiveOption(),e.closeCombobox();break}}function $(i){h(\"change\",i),e.nullable.value&&e.mode.value===0&&i.target.value===\"\"&&S(),e.openCombobox()}function B(i){var T,l,g;let I=(T=i.relatedTarget)!=null?T:oe.find(t=>t!==i.currentTarget);if(f.value=!1,!((l=x(e.optionsRef))!=null&&l.contains(I))&&!((g=x(e.buttonRef))!=null&&g.contains(I))&&e.comboboxState.value===0)return i.preventDefault(),e.mode.value===0&&(e.nullable.value&&e.value.value===null?S():e.activationTrigger.value!==1&&e.selectActiveOption()),e.closeCombobox()}function p(i){var T,l,g;let I=(T=i.relatedTarget)!=null?T:oe.find(t=>t!==i.currentTarget);(l=x(e.buttonRef))!=null&&l.contains(I)||(g=x(e.optionsRef))!=null&&g.contains(I)||e.disabled.value||e.immediate.value&&e.comboboxState.value!==0&&(e.openCombobox(),ae().nextFrame(()=>{e.setActivationTrigger(1)}))}let R=m(()=>{var i,I,T,l;return(l=(T=(I=a.defaultValue)!=null?I:e.defaultValue.value!==void 0?(i=a.displayValue)==null?void 0:i.call(a,e.defaultValue.value):null)!=null?T:e.defaultValue.value)!=null?l:\"\"});return()=>{var t,n,s,b,O,C,A;let i={open:e.comboboxState.value===0},{displayValue:I,onChange:T,...l}=a,g={\"aria-controls\":(t=e.optionsRef.value)==null?void 0:t.id,\"aria-expanded\":e.comboboxState.value===0,\"aria-activedescendant\":e.activeOptionIndex.value===null?void 0:e.virtual.value?(n=e.options.value.find(j=>!e.virtual.value.disabled(j.dataRef.value)&&e.compare(j.dataRef.value,e.virtual.value.options[e.activeOptionIndex.value])))==null?void 0:n.id:(s=e.options.value[e.activeOptionIndex.value])==null?void 0:s.id,\"aria-labelledby\":(C=(b=x(e.labelRef))==null?void 0:b.id)!=null?C:(O=x(e.buttonRef))==null?void 0:O.id,\"aria-autocomplete\":\"list\",id:u,onCompositionstart:D,onCompositionend:E,onKeydown:M,onInput:$,onFocus:p,onBlur:B,role:\"combobox\",type:(A=r.type)!=null?A:\"text\",tabIndex:0,ref:e.inputRef,defaultValue:R.value,disabled:e.disabled.value===!0?!0:void 0};return U({ourProps:g,theirProps:l,slot:i,attrs:r,slots:y,features:Q.RenderStrategy|Q.Static,name:\"ComboboxInput\"})}}}),ut=H({name:\"ComboboxOptions\",props:{as:{type:[Object,String],default:\"ul\"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},hold:{type:[Boolean],default:!1}},setup(a,{attrs:h,slots:r,expose:y}){let o=K(\"ComboboxOptions\"),u=`headlessui-combobox-options-${W()}`;y({el:o.optionsRef,$el:o.optionsRef}),Y(()=>{o.optionsPropsRef.value.static=a.static}),Y(()=>{o.optionsPropsRef.value.hold=a.hold});let e=Ce(),c=m(()=>e!==null?(e.value&G.Open)===G.Open:o.comboboxState.value===0);ge({container:m(()=>x(o.optionsRef)),enabled:m(()=>o.comboboxState.value===0),accept(S){return S.getAttribute(\"role\")===\"option\"?NodeFilter.FILTER_REJECT:S.hasAttribute(\"role\")?NodeFilter.FILTER_SKIP:NodeFilter.FILTER_ACCEPT},walk(S){S.setAttribute(\"role\",\"none\")}});function f(S){S.preventDefault()}return()=>{var D,E,w;let S={open:o.comboboxState.value===0},v={\"aria-labelledby\":(w=(D=x(o.labelRef))==null?void 0:D.id)!=null?w:(E=x(o.buttonRef))==null?void 0:E.id,id:u,ref:o.optionsRef,role:\"listbox\",\"aria-multiselectable\":o.mode.value===1?!0:void 0,onMousedown:f},d=Z(a,[\"hold\"]);return U({ourProps:v,theirProps:d,slot:S,attrs:h,slots:o.virtual.value&&o.comboboxState.value===0?{...r,default:()=>[z(Ae,{},r.default)]}:r,features:Q.RenderStrategy|Q.Static,visible:c.value,name:\"ComboboxOptions\"})}}}),rt=H({name:\"ComboboxOption\",props:{as:{type:[Object,String],default:\"li\"},value:{type:[Object,String,Number,Boolean]},disabled:{type:Boolean,default:!1},order:{type:[Number],default:null}},setup(a,{slots:h,attrs:r,expose:y}){let o=K(\"ComboboxOption\"),u=`headlessui-combobox-option-${W()}`,e=k(null),c=m(()=>a.disabled);y({el:e,$el:e});let f=m(()=>{var p;return o.virtual.value?o.activeOptionIndex.value===o.calculateIndex(a.value):o.activeOptionIndex.value===null?!1:((p=o.options.value[o.activeOptionIndex.value])==null?void 0:p.id)===u}),S=m(()=>o.isSelected(a.value)),v=ee(ie,null),d=m(()=>({disabled:a.disabled,value:a.value,domRef:e,order:m(()=>a.order)}));X(()=>o.registerOption(u,d)),fe(()=>o.unregisterOption(u,f.value)),Y(()=>{let p=x(e);p&&(v==null||v.value.measureElement(p))}),Y(()=>{o.comboboxState.value===0&&f.value&&(o.virtual.value||o.activationTrigger.value!==0&&N(()=>{var p,R;return(R=(p=x(e))==null?void 0:p.scrollIntoView)==null?void 0:R.call(p,{block:\"nearest\"})}))});function D(p){p.preventDefault(),p.button===ye.Left&&(c.value||(o.selectOption(u),we()||requestAnimationFrame(()=>{var R;return(R=x(o.inputRef))==null?void 0:R.focus({preventScroll:!0})}),o.mode.value===0&&o.closeCombobox()))}function E(){var R;if(a.disabled||(R=o.virtual.value)!=null&&R.disabled(a.value))return o.goToOption(P.Nothing);let p=o.calculateIndex(a.value);o.goToOption(P.Specific,p)}let w=xe();function M(p){w.update(p)}function $(p){var V;if(!w.wasMoved(p)||a.disabled||(V=o.virtual.value)!=null&&V.disabled(a.value)||f.value)return;let R=o.calculateIndex(a.value);o.goToOption(P.Specific,R,0)}function B(p){var R;w.wasMoved(p)&&(a.disabled||(R=o.virtual.value)!=null&&R.disabled(a.value)||f.value&&(o.optionsPropsRef.value.hold||o.goToOption(P.Nothing)))}return()=>{let{disabled:p}=a,R={active:f.value,selected:S.value,disabled:p},V={id:u,ref:e,role:\"option\",tabIndex:p===!0?void 0:-1,\"aria-disabled\":p===!0?!0:void 0,\"aria-selected\":S.value,disabled:void 0,onMousedown:D,onFocus:E,onPointerenter:M,onMouseenter:M,onPointermove:$,onMousemove:$,onPointerleave:B,onMouseleave:B},i=Z(a,[\"order\",\"value\"]);return U({ourProps:V,theirProps:i,slot:R,attrs:r,slots:h,name:\"ComboboxOption\"})}}});export{lt as Combobox,nt as ComboboxButton,it as ComboboxInput,at as ComboboxLabel,rt as ComboboxOption,ut as ComboboxOptions};\n","import{watchEffect as i}from\"vue\";import{env as a}from'../utils/env.js';function E(n,e,o,r){a.isServer||i(t=>{n=n!=null?n:window,n.addEventListener(e,o,r),t(()=>n.removeEventListener(e,o,r))})}export{E as useEventListener};\n","import{ref as a}from\"vue\";import{useWindowEvent as t}from'./use-window-event.js';var d=(r=>(r[r.Forwards=0]=\"Forwards\",r[r.Backwards=1]=\"Backwards\",r))(d||{});function n(){let o=a(0);return t(\"keydown\",e=>{e.key===\"Tab\"&&(o.value=e.shiftKey?1:0)}),o}export{d as Direction,n as useTabDirection};\n","import{computed as L,defineComponent as I,Fragment as j,h as R,onMounted as M,onUnmounted as h,ref as E,watch as g,watchEffect as K}from\"vue\";import{useEventListener as U}from'../../hooks/use-event-listener.js';import{Direction as y,useTabDirection as _}from'../../hooks/use-tab-direction.js';import{Features as k,Hidden as D}from'../../internal/hidden.js';import{history as C}from'../../utils/active-element-history.js';import{dom as c}from'../../utils/dom.js';import{Focus as v,focusElement as p,focusIn as b,FocusResult as q}from'../../utils/focus-management.js';import{match as P}from'../../utils/match.js';import{microTask as S}from'../../utils/micro-task.js';import{getOwnerDocument as x}from'../../utils/owner.js';import{render as G}from'../../utils/render.js';function B(t){if(!t)return new Set;if(typeof t==\"function\")return new Set(t());let n=new Set;for(let r of t.value){let l=c(r);l instanceof HTMLElement&&n.add(l)}return n}var A=(e=>(e[e.None=1]=\"None\",e[e.InitialFocus=2]=\"InitialFocus\",e[e.TabLock=4]=\"TabLock\",e[e.FocusLock=8]=\"FocusLock\",e[e.RestoreFocus=16]=\"RestoreFocus\",e[e.All=30]=\"All\",e))(A||{});let ue=Object.assign(I({name:\"FocusTrap\",props:{as:{type:[Object,String],default:\"div\"},initialFocus:{type:Object,default:null},features:{type:Number,default:30},containers:{type:[Object,Function],default:E(new Set)}},inheritAttrs:!1,setup(t,{attrs:n,slots:r,expose:l}){let o=E(null);l({el:o,$el:o});let i=L(()=>x(o)),e=E(!1);M(()=>e.value=!0),h(()=>e.value=!1),$({ownerDocument:i},L(()=>e.value&&Boolean(t.features&16)));let m=z({ownerDocument:i,container:o,initialFocus:L(()=>t.initialFocus)},L(()=>e.value&&Boolean(t.features&2)));J({ownerDocument:i,container:o,containers:t.containers,previousActiveElement:m},L(()=>e.value&&Boolean(t.features&8)));let f=_();function a(u){let T=c(o);if(!T)return;(w=>w())(()=>{P(f.value,{[y.Forwards]:()=>{b(T,v.First,{skipElements:[u.relatedTarget]})},[y.Backwards]:()=>{b(T,v.Last,{skipElements:[u.relatedTarget]})}})})}let s=E(!1);function F(u){u.key===\"Tab\"&&(s.value=!0,requestAnimationFrame(()=>{s.value=!1}))}function H(u){if(!e.value)return;let T=B(t.containers);c(o)instanceof HTMLElement&&T.add(c(o));let d=u.relatedTarget;d instanceof HTMLElement&&d.dataset.headlessuiFocusGuard!==\"true\"&&(N(T,d)||(s.value?b(c(o),P(f.value,{[y.Forwards]:()=>v.Next,[y.Backwards]:()=>v.Previous})|v.WrapAround,{relativeTo:u.target}):u.target instanceof HTMLElement&&p(u.target)))}return()=>{let u={},T={ref:o,onKeydown:F,onFocusout:H},{features:d,initialFocus:w,containers:Q,...O}=t;return R(j,[Boolean(d&4)&&R(D,{as:\"button\",type:\"button\",\"data-headlessui-focus-guard\":!0,onFocus:a,features:k.Focusable}),G({ourProps:T,theirProps:{...n,...O},slot:u,attrs:n,slots:r,name:\"FocusTrap\"}),Boolean(d&4)&&R(D,{as:\"button\",type:\"button\",\"data-headlessui-focus-guard\":!0,onFocus:a,features:k.Focusable})])}}}),{features:A});function W(t){let n=E(C.slice());return g([t],([r],[l])=>{l===!0&&r===!1?S(()=>{n.value.splice(0)}):l===!1&&r===!0&&(n.value=C.slice())},{flush:\"post\"}),()=>{var r;return(r=n.value.find(l=>l!=null&&l.isConnected))!=null?r:null}}function $({ownerDocument:t},n){let r=W(n);M(()=>{K(()=>{var l,o;n.value||((l=t.value)==null?void 0:l.activeElement)===((o=t.value)==null?void 0:o.body)&&p(r())},{flush:\"post\"})}),h(()=>{n.value&&p(r())})}function z({ownerDocument:t,container:n,initialFocus:r},l){let o=E(null),i=E(!1);return M(()=>i.value=!0),h(()=>i.value=!1),M(()=>{g([n,r,l],(e,m)=>{if(e.every((a,s)=>(m==null?void 0:m[s])===a)||!l.value)return;let f=c(n);f&&S(()=>{var F,H;if(!i.value)return;let a=c(r),s=(F=t.value)==null?void 0:F.activeElement;if(a){if(a===s){o.value=s;return}}else if(f.contains(s)){o.value=s;return}a?p(a):b(f,v.First|v.NoScroll)===q.Error&&console.warn(\"There are no focusable elements inside the \"),o.value=(H=t.value)==null?void 0:H.activeElement})},{immediate:!0,flush:\"post\"})}),o}function J({ownerDocument:t,container:n,containers:r,previousActiveElement:l},o){var i;U((i=t.value)==null?void 0:i.defaultView,\"focus\",e=>{if(!o.value)return;let m=B(r);c(n)instanceof HTMLElement&&m.add(c(n));let f=l.value;if(!f)return;let a=e.target;a&&a instanceof HTMLElement?N(m,a)?(l.value=a,p(a)):(e.preventDefault(),e.stopPropagation(),p(f)):p(l.value)},!0)}function N(t,n){for(let r of t)if(r.contains(n))return!0;return!1}export{ue as FocusTrap};\n","import{onUnmounted as o,shallowRef as n}from\"vue\";function m(t){let e=n(t.getSnapshot());return o(t.subscribe(()=>{e.value=t.getSnapshot()})),e}export{m as useStore};\n","function a(o,r){let t=o(),n=new Set;return{getSnapshot(){return t},subscribe(e){return n.add(e),()=>n.delete(e)},dispatch(e,...s){let i=r[e].call(t,...s);i&&(t=i,n.forEach(c=>c()))}}}export{a as createStore};\n","function c(){let o;return{before({doc:e}){var l;let n=e.documentElement;o=((l=e.defaultView)!=null?l:window).innerWidth-n.clientWidth},after({doc:e,d:n}){let t=e.documentElement,l=t.clientWidth-t.offsetWidth,r=o-l;n.style(t,\"paddingRight\",`${r}px`)}}}export{c as adjustScrollbarPadding};\n","import{disposables as m}from'../../utils/disposables.js';import{isIOS as u}from'../../utils/platform.js';function w(){return u()?{before({doc:r,d:n,meta:c}){function a(o){return c.containers.flatMap(l=>l()).some(l=>l.contains(o))}n.microTask(()=>{var s;if(window.getComputedStyle(r.documentElement).scrollBehavior!==\"auto\"){let t=m();t.style(r.documentElement,\"scrollBehavior\",\"auto\"),n.add(()=>n.microTask(()=>t.dispose()))}let o=(s=window.scrollY)!=null?s:window.pageYOffset,l=null;n.addEventListener(r,\"click\",t=>{if(t.target instanceof HTMLElement)try{let e=t.target.closest(\"a\");if(!e)return;let{hash:f}=new URL(e.href),i=r.querySelector(f);i&&!a(i)&&(l=i)}catch{}},!0),n.addEventListener(r,\"touchstart\",t=>{if(t.target instanceof HTMLElement)if(a(t.target)){let e=t.target;for(;e.parentElement&&a(e.parentElement);)e=e.parentElement;n.style(e,\"overscrollBehavior\",\"contain\")}else n.style(t.target,\"touchAction\",\"none\")}),n.addEventListener(r,\"touchmove\",t=>{if(t.target instanceof HTMLElement){if(t.target.tagName===\"INPUT\")return;if(a(t.target)){let e=t.target;for(;e.parentElement&&e.dataset.headlessuiPortal!==\"\"&&!(e.scrollHeight>e.clientHeight||e.scrollWidth>e.clientWidth);)e=e.parentElement;e.dataset.headlessuiPortal===\"\"&&t.preventDefault()}else t.preventDefault()}},{passive:!1}),n.add(()=>{var e;let t=(e=window.scrollY)!=null?e:window.pageYOffset;o!==t&&window.scrollTo(0,o),l&&l.isConnected&&(l.scrollIntoView({block:\"nearest\"}),l=null)})})}}:{}}export{w as handleIOSLocking};\n","function l(){return{before({doc:e,d:o}){o.style(e.documentElement,\"overflow\",\"hidden\")}}}export{l as preventScroll};\n","import{disposables as s}from'../../utils/disposables.js';import{createStore as i}from'../../utils/store.js';import{adjustScrollbarPadding as l}from'./adjust-scrollbar-padding.js';import{handleIOSLocking as d}from'./handle-ios-locking.js';import{preventScroll as p}from'./prevent-scroll.js';function m(e){let n={};for(let t of e)Object.assign(n,t(n));return n}let a=i(()=>new Map,{PUSH(e,n){var o;let t=(o=this.get(e))!=null?o:{doc:e,count:0,d:s(),meta:new Set};return t.count++,t.meta.add(n),this.set(e,t),this},POP(e,n){let t=this.get(e);return t&&(t.count--,t.meta.delete(n)),this},SCROLL_PREVENT({doc:e,d:n,meta:t}){let o={doc:e,d:n,meta:m(t)},c=[d(),l(),p()];c.forEach(({before:r})=>r==null?void 0:r(o)),c.forEach(({after:r})=>r==null?void 0:r(o))},SCROLL_ALLOW({d:e}){e.dispose()},TEARDOWN({doc:e}){this.delete(e)}});a.subscribe(()=>{let e=a.getSnapshot(),n=new Map;for(let[t]of e)n.set(t,t.documentElement.style.overflow);for(let t of e.values()){let o=n.get(t.doc)===\"hidden\",c=t.count!==0;(c&&!o||!c&&o)&&a.dispatch(t.count>0?\"SCROLL_PREVENT\":\"SCROLL_ALLOW\",t),t.count===0&&a.dispatch(\"TEARDOWN\",t)}});export{a as overflows};\n","import{computed as p,watch as s}from\"vue\";import{useStore as v}from'../../hooks/use-store.js';import{overflows as u}from'./overflow-store.js';function d(t,a,n){let i=v(u),l=p(()=>{let e=t.value?i.value.get(t.value):void 0;return e?e.count>0:!1});return s([t,a],([e,m],[r],o)=>{if(!e||!m)return;u.dispatch(\"PUSH\",e,n);let f=!1;o(()=>{f||(u.dispatch(\"POP\",r!=null?r:e,n),f=!0)})},{immediate:!0}),l}export{d as useDocumentOverflowLockedEffect};\n","import{ref as m,watchEffect as s}from\"vue\";import{dom as h}from'../utils/dom.js';let i=new Map,t=new Map;function E(d,f=m(!0)){s(o=>{var a;if(!f.value)return;let e=h(d);if(!e)return;o(function(){var u;if(!e)return;let r=(u=t.get(e))!=null?u:1;if(r===1?t.delete(e):t.set(e,r-1),r!==1)return;let n=i.get(e);n&&(n[\"aria-hidden\"]===null?e.removeAttribute(\"aria-hidden\"):e.setAttribute(\"aria-hidden\",n[\"aria-hidden\"]),e.inert=n.inert,i.delete(e))});let l=(a=t.get(e))!=null?a:0;t.set(e,l+1),l===0&&(i.set(e,{\"aria-hidden\":e.getAttribute(\"aria-hidden\"),inert:e.inert}),e.setAttribute(\"aria-hidden\",\"true\"),e.inert=!0)})}export{E as useInert};\n","import{h as m,ref as s}from\"vue\";import{Features as d,Hidden as c}from'../internal/hidden.js';import{dom as T}from'../utils/dom.js';import{getOwnerDocument as E}from'../utils/owner.js';function N({defaultContainers:o=[],portals:i,mainTreeNodeRef:H}={}){let t=s(null),r=E(t);function u(){var l,f,a;let n=[];for(let e of o)e!==null&&(e instanceof HTMLElement?n.push(e):\"value\"in e&&e.value instanceof HTMLElement&&n.push(e.value));if(i!=null&&i.value)for(let e of i.value)n.push(e);for(let e of(l=r==null?void 0:r.querySelectorAll(\"html > *, body > *\"))!=null?l:[])e!==document.body&&e!==document.head&&e instanceof HTMLElement&&e.id!==\"headlessui-portal-root\"&&(e.contains(T(t))||e.contains((a=(f=T(t))==null?void 0:f.getRootNode())==null?void 0:a.host)||n.some(M=>e.contains(M))||n.push(e));return n}return{resolveContainers:u,contains(n){return u().some(l=>l.contains(n))},mainTreeNodeRef:t,MainTreeNode(){return H!=null?null:m(c,{features:d.Hidden,ref:t})}}}function v(){let o=s(null);return{mainTreeNodeRef:o,MainTreeNode(){return m(c,{features:d.Hidden,ref:o})}}}export{v as useMainTreeNode,N as useRootContainers};\n","import{defineComponent as l,inject as a,provide as c}from\"vue\";import{render as p}from'../utils/render.js';let e=Symbol(\"ForcePortalRootContext\");function s(){return a(e,!1)}let u=l({name:\"ForcePortalRoot\",props:{as:{type:[Object,String],default:\"template\"},force:{type:Boolean,default:!1}},setup(o,{slots:t,attrs:r}){return c(e,o.force),()=>{let{force:f,...n}=o;return p({theirProps:n,ourProps:{},slot:{},slots:t,attrs:r,name:\"ForcePortalRoot\"})}}});export{u as ForcePortalRoot,s as usePortalRoot};\n","import{inject as f,onMounted as m,onUnmounted as l,provide as c,watch as p}from\"vue\";let u=Symbol(\"StackContext\");var s=(e=>(e[e.Add=0]=\"Add\",e[e.Remove=1]=\"Remove\",e))(s||{});function y(){return f(u,()=>{})}function R({type:o,enabled:r,element:e,onUpdate:i}){let a=y();function t(...n){i==null||i(...n),a(...n)}m(()=>{p(r,(n,d)=>{n?t(0,o,e):d===!0&&t(1,o,e)},{immediate:!0,flush:\"sync\"})}),l(()=>{r.value&&t(1,o,e)}),c(u,t)}export{s as StackMessage,y as useStackContext,R as useStackProvider};\n","import{computed as x,defineComponent as y,inject as R,onMounted as v,onUnmounted as D,provide as j,ref as p,unref as C}from\"vue\";import{useId as h}from'../../hooks/use-id.js';import{render as b}from'../../utils/render.js';let u=Symbol(\"DescriptionContext\");function w(){let t=R(u,null);if(t===null)throw new Error(\"Missing parent\");return t}function k({slot:t=p({}),name:o=\"Description\",props:s={}}={}){let e=p([]);function r(n){return e.value.push(n),()=>{let i=e.value.indexOf(n);i!==-1&&e.value.splice(i,1)}}return j(u,{register:r,slot:t,name:o,props:s}),x(()=>e.value.length>0?e.value.join(\" \"):void 0)}let K=y({name:\"Description\",props:{as:{type:[Object,String],default:\"p\"},id:{type:String,default:null}},setup(t,{attrs:o,slots:s}){var n;let e=(n=t.id)!=null?n:`headlessui-description-${h()}`,r=w();return v(()=>D(r.register(e))),()=>{let{name:i=\"Description\",slot:l=p({}),props:d={}}=r,{...c}=t,f={...Object.entries(d).reduce((a,[g,m])=>Object.assign(a,{[g]:C(m)}),{}),id:e};return b({ourProps:f,theirProps:c,slot:l.value,attrs:o,slots:s,name:i})}}});export{K as Description,k as useDescriptions};\n","import{computed as w,defineComponent as m,getCurrentInstance as j,h as I,inject as s,onMounted as R,onUnmounted as y,provide as E,reactive as G,ref as p,Teleport as O,watch as D,watchEffect as K}from\"vue\";import{usePortalRoot as S}from'../../internal/portal-force-root.js';import{dom as B}from'../../utils/dom.js';import{getOwnerDocument as C}from'../../utils/owner.js';import{render as h}from'../../utils/render.js';function x(e){let t=C(e);if(!t){if(e===null)return null;throw new Error(`[Headless UI]: Cannot find ownerDocument for contextElement: ${e}`)}let l=t.getElementById(\"headlessui-portal-root\");if(l)return l;let r=t.createElement(\"div\");return r.setAttribute(\"id\",\"headlessui-portal-root\"),t.body.appendChild(r)}const f=new WeakMap;function U(e){var t;return(t=f.get(e))!=null?t:0}function M(e,t){let l=t(U(e));return l<=0?f.delete(e):f.set(e,l),l}let $=m({name:\"Portal\",props:{as:{type:[Object,String],default:\"div\"}},setup(e,{slots:t,attrs:l}){let r=p(null),i=w(()=>C(r)),o=S(),u=s(H,null),n=p(o===!0||u==null?x(r.value):u.resolveTarget());n.value&&M(n.value,a=>a+1);let c=p(!1);R(()=>{c.value=!0}),K(()=>{o||u!=null&&(n.value=u.resolveTarget())});let v=s(d,null),g=!1,b=j();return D(r,()=>{if(g||!v)return;let a=B(r);a&&(y(v.register(a),b),g=!0)}),y(()=>{var P,T;let a=(P=i.value)==null?void 0:P.getElementById(\"headlessui-portal-root\");!a||n.value!==a||M(n.value,L=>L-1)||n.value.children.length>0||(T=n.value.parentElement)==null||T.removeChild(n.value)}),()=>{if(!c.value||n.value===null)return null;let a={ref:r,\"data-headlessui-portal\":\"\"};return I(O,{to:n.value},h({ourProps:a,theirProps:e,slot:{},attrs:l,slots:t,name:\"Portal\"}))}}}),d=Symbol(\"PortalParentContext\");function q(){let e=s(d,null),t=p([]);function l(o){return t.value.push(o),e&&e.register(o),()=>r(o)}function r(o){let u=t.value.indexOf(o);u!==-1&&t.value.splice(u,1),e&&e.unregister(o)}let i={register:l,unregister:r,portals:t};return[t,m({name:\"PortalWrapper\",setup(o,{slots:u}){return E(d,i),()=>{var n;return(n=u.default)==null?void 0:n.call(u)}}})]}let H=Symbol(\"PortalGroupContext\"),z=m({name:\"PortalGroup\",props:{as:{type:[Object,String],default:\"template\"},target:{type:Object,default:null}},setup(e,{attrs:t,slots:l}){let r=G({resolveTarget(){return e.target}});return E(H,r),()=>{let{target:i,...o}=e;return h({theirProps:o,ourProps:{},slot:{},attrs:t,slots:l,name:\"PortalGroup\"})}}});export{$ as Portal,z as PortalGroup,q as useNestedPortals};\n","import{computed as o,defineComponent as O,h as v,inject as Y,nextTick as se,onMounted as $,onUnmounted as pe,provide as de,ref as y,watchEffect as fe}from\"vue\";import{FocusTrap as P}from'../../components/focus-trap/focus-trap.js';import{useDocumentOverflowLockedEffect as ge}from'../../hooks/document-overflow/use-document-overflow.js';import{useEventListener as ce}from'../../hooks/use-event-listener.js';import{useId as b}from'../../hooks/use-id.js';import{useInert as _}from'../../hooks/use-inert.js';import{useOutsideClick as ve}from'../../hooks/use-outside-click.js';import{useRootContainers as me}from'../../hooks/use-root-containers.js';import{State as I,useOpenClosed as De}from'../../internal/open-closed.js';import{ForcePortalRoot as F}from'../../internal/portal-force-root.js';import{StackMessage as z,useStackProvider as ye}from'../../internal/stack-context.js';import{Keys as Se}from'../../keyboard.js';import{dom as j}from'../../utils/dom.js';import{match as G}from'../../utils/match.js';import{getOwnerDocument as he}from'../../utils/owner.js';import{Features as V,render as C}from'../../utils/render.js';import{Description as Oe,useDescriptions as Pe}from'../description/description.js';import{Portal as J,PortalGroup as be,useNestedPortals as Ce}from'../portal/portal.js';var Te=(l=>(l[l.Open=0]=\"Open\",l[l.Closed=1]=\"Closed\",l))(Te||{});let H=Symbol(\"DialogContext\");function T(t){let i=Y(H,null);if(i===null){let l=new Error(`<${t} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(l,T),l}return i}let A=\"DC8F892D-2EBD-447C-A4C8-A03058436FF4\",Ye=O({name:\"Dialog\",inheritAttrs:!1,props:{as:{type:[Object,String],default:\"div\"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},open:{type:[Boolean,String],default:A},initialFocus:{type:Object,default:null},id:{type:String,default:null},role:{type:String,default:\"dialog\"}},emits:{close:t=>!0},setup(t,{emit:i,attrs:l,slots:p,expose:s}){var q,W;let n=(q=t.id)!=null?q:`headlessui-dialog-${b()}`,u=y(!1);$(()=>{u.value=!0});let r=!1,g=o(()=>t.role===\"dialog\"||t.role===\"alertdialog\"?t.role:(r||(r=!0,console.warn(`Invalid role [${g}] passed to . Only \\`dialog\\` and and \\`alertdialog\\` are supported. Using \\`dialog\\` instead.`)),\"dialog\")),D=y(0),S=De(),R=o(()=>t.open===A&&S!==null?(S.value&I.Open)===I.Open:t.open),m=y(null),E=o(()=>he(m));if(s({el:m,$el:m}),!(t.open!==A||S!==null))throw new Error(\"You forgot to provide an `open` prop to the `Dialog`.\");if(typeof R.value!=\"boolean\")throw new Error(`You provided an \\`open\\` prop to the \\`Dialog\\`, but the value is not a boolean. Received: ${R.value===A?void 0:t.open}`);let c=o(()=>u.value&&R.value?0:1),k=o(()=>c.value===0),w=o(()=>D.value>1),N=Y(H,null)!==null,[Q,X]=Ce(),{resolveContainers:B,mainTreeNodeRef:K,MainTreeNode:Z}=me({portals:Q,defaultContainers:[o(()=>{var e;return(e=h.panelRef.value)!=null?e:m.value})]}),ee=o(()=>w.value?\"parent\":\"leaf\"),U=o(()=>S!==null?(S.value&I.Closing)===I.Closing:!1),te=o(()=>N||U.value?!1:k.value),le=o(()=>{var e,a,d;return(d=Array.from((a=(e=E.value)==null?void 0:e.querySelectorAll(\"body > *\"))!=null?a:[]).find(f=>f.id===\"headlessui-portal-root\"?!1:f.contains(j(K))&&f instanceof HTMLElement))!=null?d:null});_(le,te);let ae=o(()=>w.value?!0:k.value),oe=o(()=>{var e,a,d;return(d=Array.from((a=(e=E.value)==null?void 0:e.querySelectorAll(\"[data-headlessui-portal]\"))!=null?a:[]).find(f=>f.contains(j(K))&&f instanceof HTMLElement))!=null?d:null});_(oe,ae),ye({type:\"Dialog\",enabled:o(()=>c.value===0),element:m,onUpdate:(e,a)=>{if(a===\"Dialog\")return G(e,{[z.Add]:()=>D.value+=1,[z.Remove]:()=>D.value-=1})}});let re=Pe({name:\"DialogDescription\",slot:o(()=>({open:R.value}))}),M=y(null),h={titleId:M,panelRef:y(null),dialogState:c,setTitleId(e){M.value!==e&&(M.value=e)},close(){i(\"close\",!1)}};de(H,h);let ne=o(()=>!(!k.value||w.value));ve(B,(e,a)=>{e.preventDefault(),h.close(),se(()=>a==null?void 0:a.focus())},ne);let ie=o(()=>!(w.value||c.value!==0));ce((W=E.value)==null?void 0:W.defaultView,\"keydown\",e=>{ie.value&&(e.defaultPrevented||e.key===Se.Escape&&(e.preventDefault(),e.stopPropagation(),h.close()))});let ue=o(()=>!(U.value||c.value!==0||N));return ge(E,ue,e=>{var a;return{containers:[...(a=e.containers)!=null?a:[],B]}}),fe(e=>{if(c.value!==0)return;let a=j(m);if(!a)return;let d=new ResizeObserver(f=>{for(let L of f){let x=L.target.getBoundingClientRect();x.x===0&&x.y===0&&x.width===0&&x.height===0&&h.close()}});d.observe(a),e(()=>d.disconnect())}),()=>{let{open:e,initialFocus:a,...d}=t,f={...l,ref:m,id:n,role:g.value,\"aria-modal\":c.value===0?!0:void 0,\"aria-labelledby\":M.value,\"aria-describedby\":re.value},L={open:c.value===0};return v(F,{force:!0},()=>[v(J,()=>v(be,{target:m.value},()=>v(F,{force:!1},()=>v(P,{initialFocus:a,containers:B,features:k.value?G(ee.value,{parent:P.features.RestoreFocus,leaf:P.features.All&~P.features.FocusLock}):P.features.None},()=>v(X,{},()=>C({ourProps:f,theirProps:{...d,...l},slot:L,attrs:l,slots:p,visible:c.value===0,features:V.RenderStrategy|V.Static,name:\"Dialog\"})))))),v(Z)])}}}),_e=O({name:\"DialogOverlay\",props:{as:{type:[Object,String],default:\"div\"},id:{type:String,default:null}},setup(t,{attrs:i,slots:l}){var u;let p=(u=t.id)!=null?u:`headlessui-dialog-overlay-${b()}`,s=T(\"DialogOverlay\");function n(r){r.target===r.currentTarget&&(r.preventDefault(),r.stopPropagation(),s.close())}return()=>{let{...r}=t;return C({ourProps:{id:p,\"aria-hidden\":!0,onClick:n},theirProps:r,slot:{open:s.dialogState.value===0},attrs:i,slots:l,name:\"DialogOverlay\"})}}}),ze=O({name:\"DialogBackdrop\",props:{as:{type:[Object,String],default:\"div\"},id:{type:String,default:null}},inheritAttrs:!1,setup(t,{attrs:i,slots:l,expose:p}){var r;let s=(r=t.id)!=null?r:`headlessui-dialog-backdrop-${b()}`,n=T(\"DialogBackdrop\"),u=y(null);return p({el:u,$el:u}),$(()=>{if(n.panelRef.value===null)throw new Error(\"A component is being used, but a component is missing.\")}),()=>{let{...g}=t,D={id:s,ref:u,\"aria-hidden\":!0};return v(F,{force:!0},()=>v(J,()=>C({ourProps:D,theirProps:{...i,...g},slot:{open:n.dialogState.value===0},attrs:i,slots:l,name:\"DialogBackdrop\"})))}}}),Ge=O({name:\"DialogPanel\",props:{as:{type:[Object,String],default:\"div\"},id:{type:String,default:null}},setup(t,{attrs:i,slots:l,expose:p}){var r;let s=(r=t.id)!=null?r:`headlessui-dialog-panel-${b()}`,n=T(\"DialogPanel\");p({el:n.panelRef,$el:n.panelRef});function u(g){g.stopPropagation()}return()=>{let{...g}=t,D={id:s,ref:n.panelRef,onClick:u};return C({ourProps:D,theirProps:g,slot:{open:n.dialogState.value===0},attrs:i,slots:l,name:\"DialogPanel\"})}}}),Ve=O({name:\"DialogTitle\",props:{as:{type:[Object,String],default:\"h2\"},id:{type:String,default:null}},setup(t,{attrs:i,slots:l}){var n;let p=(n=t.id)!=null?n:`headlessui-dialog-title-${b()}`,s=T(\"DialogTitle\");return $(()=>{s.setTitleId(p),pe(()=>s.setTitleId(null))}),()=>{let{...u}=t;return C({ourProps:{id:p},theirProps:u,slot:{open:s.dialogState.value===0},attrs:i,slots:l,name:\"DialogTitle\"})}}}),Je=Oe;export{Ye as Dialog,ze as DialogBackdrop,Je as DialogDescription,_e as DialogOverlay,Ge as DialogPanel,Ve as DialogTitle};\n","import{computed as m,defineComponent as b,inject as I,onMounted as P,onUnmounted as h,provide as R,ref as d,watchEffect as w}from\"vue\";import{useId as E}from'../../hooks/use-id.js';import{useResolveButtonType as H}from'../../hooks/use-resolve-button-type.js';import{State as y,useOpenClosed as L,useOpenClosedProvider as j}from'../../internal/open-closed.js';import{Keys as f}from'../../keyboard.js';import{dom as p}from'../../utils/dom.js';import{match as x}from'../../utils/match.js';import{Features as B,render as g}from'../../utils/render.js';var $=(o=>(o[o.Open=0]=\"Open\",o[o.Closed=1]=\"Closed\",o))($||{});let T=Symbol(\"DisclosureContext\");function O(t){let r=I(T,null);if(r===null){let o=new Error(`<${t} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(o,O),o}return r}let k=Symbol(\"DisclosurePanelContext\");function U(){return I(k,null)}let N=b({name:\"Disclosure\",props:{as:{type:[Object,String],default:\"template\"},defaultOpen:{type:[Boolean],default:!1}},setup(t,{slots:r,attrs:o}){let s=d(t.defaultOpen?0:1),e=d(null),i=d(null),n={buttonId:d(`headlessui-disclosure-button-${E()}`),panelId:d(`headlessui-disclosure-panel-${E()}`),disclosureState:s,panel:e,button:i,toggleDisclosure(){s.value=x(s.value,{[0]:1,[1]:0})},closeDisclosure(){s.value!==1&&(s.value=1)},close(l){n.closeDisclosure();let a=(()=>l?l instanceof HTMLElement?l:l.value instanceof HTMLElement?p(l):p(n.button):p(n.button))();a==null||a.focus()}};return R(T,n),j(m(()=>x(s.value,{[0]:y.Open,[1]:y.Closed}))),()=>{let{defaultOpen:l,...a}=t,c={open:s.value===0,close:n.close};return g({theirProps:a,ourProps:{},slot:c,slots:r,attrs:o,name:\"Disclosure\"})}}}),Q=b({name:\"DisclosureButton\",props:{as:{type:[Object,String],default:\"button\"},disabled:{type:[Boolean],default:!1},id:{type:String,default:null}},setup(t,{attrs:r,slots:o,expose:s}){let e=O(\"DisclosureButton\"),i=U(),n=m(()=>i===null?!1:i.value===e.panelId.value);P(()=>{n.value||t.id!==null&&(e.buttonId.value=t.id)}),h(()=>{n.value||(e.buttonId.value=null)});let l=d(null);s({el:l,$el:l}),n.value||w(()=>{e.button.value=l.value});let a=H(m(()=>({as:t.as,type:r.type})),l);function c(){var u;t.disabled||(n.value?(e.toggleDisclosure(),(u=p(e.button))==null||u.focus()):e.toggleDisclosure())}function D(u){var S;if(!t.disabled)if(n.value)switch(u.key){case f.Space:case f.Enter:u.preventDefault(),u.stopPropagation(),e.toggleDisclosure(),(S=p(e.button))==null||S.focus();break}else switch(u.key){case f.Space:case f.Enter:u.preventDefault(),u.stopPropagation(),e.toggleDisclosure();break}}function v(u){switch(u.key){case f.Space:u.preventDefault();break}}return()=>{var C;let u={open:e.disclosureState.value===0},{id:S,...K}=t,M=n.value?{ref:l,type:a.value,onClick:c,onKeydown:D}:{id:(C=e.buttonId.value)!=null?C:S,ref:l,type:a.value,\"aria-expanded\":e.disclosureState.value===0,\"aria-controls\":e.disclosureState.value===0||p(e.panel)?e.panelId.value:void 0,disabled:t.disabled?!0:void 0,onClick:c,onKeydown:D,onKeyup:v};return g({ourProps:M,theirProps:K,slot:u,attrs:r,slots:o,name:\"DisclosureButton\"})}}}),V=b({name:\"DisclosurePanel\",props:{as:{type:[Object,String],default:\"div\"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},id:{type:String,default:null}},setup(t,{attrs:r,slots:o,expose:s}){let e=O(\"DisclosurePanel\");P(()=>{t.id!==null&&(e.panelId.value=t.id)}),h(()=>{e.panelId.value=null}),s({el:e.panel,$el:e.panel}),R(k,e.panelId);let i=L(),n=m(()=>i!==null?(i.value&y.Open)===y.Open:e.disclosureState.value===0);return()=>{var v;let l={open:e.disclosureState.value===0,close:e.close},{id:a,...c}=t,D={id:(v=e.panelId.value)!=null?v:a,ref:e.panel};return g({ourProps:D,theirProps:c,slot:l,attrs:r,slots:o,features:B.RenderStrategy|B.Static,visible:n.value,name:\"DisclosurePanel\"})}}});export{N as Disclosure,Q as DisclosureButton,V as DisclosurePanel};\n","let a=/([\\u2700-\\u27BF]|[\\uE000-\\uF8FF]|\\uD83C[\\uDC00-\\uDFFF]|\\uD83D[\\uDC00-\\uDFFF]|[\\u2011-\\u26FF]|\\uD83E[\\uDD10-\\uDDFF])/g;function o(e){var r,i;let n=(r=e.innerText)!=null?r:\"\",t=e.cloneNode(!0);if(!(t instanceof HTMLElement))return n;let u=!1;for(let f of t.querySelectorAll('[hidden],[aria-hidden],[role=\"img\"]'))f.remove(),u=!0;let l=u?(i=t.innerText)!=null?i:\"\":n;return a.test(l)&&(l=l.replace(a,\"\")),l}function g(e){let n=e.getAttribute(\"aria-label\");if(typeof n==\"string\")return n.trim();let t=e.getAttribute(\"aria-labelledby\");if(t){let u=t.split(\" \").map(l=>{let r=document.getElementById(l);if(r){let i=r.getAttribute(\"aria-label\");return typeof i==\"string\"?i.trim():o(r).trim()}return null}).filter(Boolean);if(u.length>0)return u.join(\", \")}return o(e).trim()}export{g as getTextValue};\n","import{ref as n}from\"vue\";import{dom as o}from'../utils/dom.js';import{getTextValue as i}from'../utils/get-text-value.js';function p(a){let t=n(\"\"),r=n(\"\");return()=>{let e=o(a);if(!e)return\"\";let l=e.innerText;if(t.value===l)return r.value;let u=i(e).trim().toLowerCase();return t.value=l,r.value=u,u}}export{p as useTextValue};\n","import{computed as x,defineComponent as E,Fragment as z,h as N,inject as _,nextTick as V,onMounted as K,onUnmounted as q,provide as W,ref as T,toRaw as R,watch as H,watchEffect as G}from\"vue\";import{useControllable as J}from'../../hooks/use-controllable.js';import{useId as F}from'../../hooks/use-id.js';import{useOutsideClick as X}from'../../hooks/use-outside-click.js';import{useResolveButtonType as Y}from'../../hooks/use-resolve-button-type.js';import{useTextValue as Z}from'../../hooks/use-text-value.js';import{useTrackedPointer as ee}from'../../hooks/use-tracked-pointer.js';import{Features as te,Hidden as oe}from'../../internal/hidden.js';import{State as B,useOpenClosed as ae,useOpenClosedProvider as ie}from'../../internal/open-closed.js';import{Keys as c}from'../../keyboard.js';import{calculateActiveIndex as ne,Focus as g}from'../../utils/calculate-active-index.js';import{dom as S}from'../../utils/dom.js';import{FocusableMode as le,isFocusableElement as ue,sortByDomNode as re}from'../../utils/focus-management.js';import{objectToFormEntries as se}from'../../utils/form.js';import{match as P}from'../../utils/match.js';import{compact as de,Features as U,omit as fe,render as j}from'../../utils/render.js';function pe(o,b){return o===b}var ce=(r=>(r[r.Open=0]=\"Open\",r[r.Closed=1]=\"Closed\",r))(ce||{}),ve=(r=>(r[r.Single=0]=\"Single\",r[r.Multi=1]=\"Multi\",r))(ve||{}),be=(r=>(r[r.Pointer=0]=\"Pointer\",r[r.Other=1]=\"Other\",r))(be||{});function me(o){requestAnimationFrame(()=>requestAnimationFrame(o))}let $=Symbol(\"ListboxContext\");function A(o){let b=_($,null);if(b===null){let r=new Error(`<${o} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,A),r}return b}let Ie=E({name:\"Listbox\",emits:{\"update:modelValue\":o=>!0},props:{as:{type:[Object,String],default:\"template\"},disabled:{type:[Boolean],default:!1},by:{type:[String,Function],default:()=>pe},horizontal:{type:[Boolean],default:!1},modelValue:{type:[Object,String,Number,Boolean],default:void 0},defaultValue:{type:[Object,String,Number,Boolean],default:void 0},form:{type:String,optional:!0},name:{type:String,optional:!0},multiple:{type:[Boolean],default:!1}},inheritAttrs:!1,setup(o,{slots:b,attrs:r,emit:w}){let n=T(1),e=T(null),f=T(null),v=T(null),s=T([]),m=T(\"\"),p=T(null),a=T(1);function u(t=i=>i){let i=p.value!==null?s.value[p.value]:null,l=re(t(s.value.slice()),O=>S(O.dataRef.domRef)),d=i?l.indexOf(i):null;return d===-1&&(d=null),{options:l,activeOptionIndex:d}}let D=x(()=>o.multiple?1:0),[y,L]=J(x(()=>o.modelValue),t=>w(\"update:modelValue\",t),x(()=>o.defaultValue)),M=x(()=>y.value===void 0?P(D.value,{[1]:[],[0]:void 0}):y.value),k={listboxState:n,value:M,mode:D,compare(t,i){if(typeof o.by==\"string\"){let l=o.by;return(t==null?void 0:t[l])===(i==null?void 0:i[l])}return o.by(t,i)},orientation:x(()=>o.horizontal?\"horizontal\":\"vertical\"),labelRef:e,buttonRef:f,optionsRef:v,disabled:x(()=>o.disabled),options:s,searchQuery:m,activeOptionIndex:p,activationTrigger:a,closeListbox(){o.disabled||n.value!==1&&(n.value=1,p.value=null)},openListbox(){o.disabled||n.value!==0&&(n.value=0)},goToOption(t,i,l){if(o.disabled||n.value===1)return;let d=u(),O=ne(t===g.Specific?{focus:g.Specific,id:i}:{focus:t},{resolveItems:()=>d.options,resolveActiveIndex:()=>d.activeOptionIndex,resolveId:h=>h.id,resolveDisabled:h=>h.dataRef.disabled});m.value=\"\",p.value=O,a.value=l!=null?l:1,s.value=d.options},search(t){if(o.disabled||n.value===1)return;let l=m.value!==\"\"?0:1;m.value+=t.toLowerCase();let O=(p.value!==null?s.value.slice(p.value+l).concat(s.value.slice(0,p.value+l)):s.value).find(I=>I.dataRef.textValue.startsWith(m.value)&&!I.dataRef.disabled),h=O?s.value.indexOf(O):-1;h===-1||h===p.value||(p.value=h,a.value=1)},clearSearch(){o.disabled||n.value!==1&&m.value!==\"\"&&(m.value=\"\")},registerOption(t,i){let l=u(d=>[...d,{id:t,dataRef:i}]);s.value=l.options,p.value=l.activeOptionIndex},unregisterOption(t){let i=u(l=>{let d=l.findIndex(O=>O.id===t);return d!==-1&&l.splice(d,1),l});s.value=i.options,p.value=i.activeOptionIndex,a.value=1},theirOnChange(t){o.disabled||L(t)},select(t){o.disabled||L(P(D.value,{[0]:()=>t,[1]:()=>{let i=R(k.value.value).slice(),l=R(t),d=i.findIndex(O=>k.compare(l,R(O)));return d===-1?i.push(l):i.splice(d,1),i}}))}};X([f,v],(t,i)=>{var l;k.closeListbox(),ue(i,le.Loose)||(t.preventDefault(),(l=S(f))==null||l.focus())},x(()=>n.value===0)),W($,k),ie(x(()=>P(n.value,{[0]:B.Open,[1]:B.Closed})));let C=x(()=>{var t;return(t=S(f))==null?void 0:t.closest(\"form\")});return K(()=>{H([C],()=>{if(!C.value||o.defaultValue===void 0)return;function t(){k.theirOnChange(o.defaultValue)}return C.value.addEventListener(\"reset\",t),()=>{var i;(i=C.value)==null||i.removeEventListener(\"reset\",t)}},{immediate:!0})}),()=>{let{name:t,modelValue:i,disabled:l,form:d,...O}=o,h={open:n.value===0,disabled:l,value:M.value};return N(z,[...t!=null&&M.value!=null?se({[t]:M.value}).map(([I,Q])=>N(oe,de({features:te.Hidden,key:I,as:\"input\",type:\"hidden\",hidden:!0,readOnly:!0,form:d,disabled:l,name:I,value:Q}))):[],j({ourProps:{},theirProps:{...r,...fe(O,[\"defaultValue\",\"onUpdate:modelValue\",\"horizontal\",\"multiple\",\"by\"])},slot:h,slots:b,attrs:r,name:\"Listbox\"})])}}}),Ee=E({name:\"ListboxLabel\",props:{as:{type:[Object,String],default:\"label\"},id:{type:String,default:null}},setup(o,{attrs:b,slots:r}){var f;let w=(f=o.id)!=null?f:`headlessui-listbox-label-${F()}`,n=A(\"ListboxLabel\");function e(){var v;(v=S(n.buttonRef))==null||v.focus({preventScroll:!0})}return()=>{let v={open:n.listboxState.value===0,disabled:n.disabled.value},{...s}=o,m={id:w,ref:n.labelRef,onClick:e};return j({ourProps:m,theirProps:s,slot:v,attrs:b,slots:r,name:\"ListboxLabel\"})}}}),je=E({name:\"ListboxButton\",props:{as:{type:[Object,String],default:\"button\"},id:{type:String,default:null}},setup(o,{attrs:b,slots:r,expose:w}){var p;let n=(p=o.id)!=null?p:`headlessui-listbox-button-${F()}`,e=A(\"ListboxButton\");w({el:e.buttonRef,$el:e.buttonRef});function f(a){switch(a.key){case c.Space:case c.Enter:case c.ArrowDown:a.preventDefault(),e.openListbox(),V(()=>{var u;(u=S(e.optionsRef))==null||u.focus({preventScroll:!0}),e.value.value||e.goToOption(g.First)});break;case c.ArrowUp:a.preventDefault(),e.openListbox(),V(()=>{var u;(u=S(e.optionsRef))==null||u.focus({preventScroll:!0}),e.value.value||e.goToOption(g.Last)});break}}function v(a){switch(a.key){case c.Space:a.preventDefault();break}}function s(a){e.disabled.value||(e.listboxState.value===0?(e.closeListbox(),V(()=>{var u;return(u=S(e.buttonRef))==null?void 0:u.focus({preventScroll:!0})})):(a.preventDefault(),e.openListbox(),me(()=>{var u;return(u=S(e.optionsRef))==null?void 0:u.focus({preventScroll:!0})})))}let m=Y(x(()=>({as:o.as,type:b.type})),e.buttonRef);return()=>{var y,L;let a={open:e.listboxState.value===0,disabled:e.disabled.value,value:e.value.value},{...u}=o,D={ref:e.buttonRef,id:n,type:m.value,\"aria-haspopup\":\"listbox\",\"aria-controls\":(y=S(e.optionsRef))==null?void 0:y.id,\"aria-expanded\":e.listboxState.value===0,\"aria-labelledby\":e.labelRef.value?[(L=S(e.labelRef))==null?void 0:L.id,n].join(\" \"):void 0,disabled:e.disabled.value===!0?!0:void 0,onKeydown:f,onKeyup:v,onClick:s};return j({ourProps:D,theirProps:u,slot:a,attrs:b,slots:r,name:\"ListboxButton\"})}}}),Ae=E({name:\"ListboxOptions\",props:{as:{type:[Object,String],default:\"ul\"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},id:{type:String,default:null}},setup(o,{attrs:b,slots:r,expose:w}){var p;let n=(p=o.id)!=null?p:`headlessui-listbox-options-${F()}`,e=A(\"ListboxOptions\"),f=T(null);w({el:e.optionsRef,$el:e.optionsRef});function v(a){switch(f.value&&clearTimeout(f.value),a.key){case c.Space:if(e.searchQuery.value!==\"\")return a.preventDefault(),a.stopPropagation(),e.search(a.key);case c.Enter:if(a.preventDefault(),a.stopPropagation(),e.activeOptionIndex.value!==null){let u=e.options.value[e.activeOptionIndex.value];e.select(u.dataRef.value)}e.mode.value===0&&(e.closeListbox(),V(()=>{var u;return(u=S(e.buttonRef))==null?void 0:u.focus({preventScroll:!0})}));break;case P(e.orientation.value,{vertical:c.ArrowDown,horizontal:c.ArrowRight}):return a.preventDefault(),a.stopPropagation(),e.goToOption(g.Next);case P(e.orientation.value,{vertical:c.ArrowUp,horizontal:c.ArrowLeft}):return a.preventDefault(),a.stopPropagation(),e.goToOption(g.Previous);case c.Home:case c.PageUp:return a.preventDefault(),a.stopPropagation(),e.goToOption(g.First);case c.End:case c.PageDown:return a.preventDefault(),a.stopPropagation(),e.goToOption(g.Last);case c.Escape:a.preventDefault(),a.stopPropagation(),e.closeListbox(),V(()=>{var u;return(u=S(e.buttonRef))==null?void 0:u.focus({preventScroll:!0})});break;case c.Tab:a.preventDefault(),a.stopPropagation();break;default:a.key.length===1&&(e.search(a.key),f.value=setTimeout(()=>e.clearSearch(),350));break}}let s=ae(),m=x(()=>s!==null?(s.value&B.Open)===B.Open:e.listboxState.value===0);return()=>{var y,L;let a={open:e.listboxState.value===0},{...u}=o,D={\"aria-activedescendant\":e.activeOptionIndex.value===null||(y=e.options.value[e.activeOptionIndex.value])==null?void 0:y.id,\"aria-multiselectable\":e.mode.value===1?!0:void 0,\"aria-labelledby\":(L=S(e.buttonRef))==null?void 0:L.id,\"aria-orientation\":e.orientation.value,id:n,onKeydown:v,role:\"listbox\",tabIndex:0,ref:e.optionsRef};return j({ourProps:D,theirProps:u,slot:a,attrs:b,slots:r,features:U.RenderStrategy|U.Static,visible:m.value,name:\"ListboxOptions\"})}}}),Fe=E({name:\"ListboxOption\",props:{as:{type:[Object,String],default:\"li\"},value:{type:[Object,String,Number,Boolean]},disabled:{type:Boolean,default:!1},id:{type:String,default:null}},setup(o,{slots:b,attrs:r,expose:w}){var C;let n=(C=o.id)!=null?C:`headlessui-listbox-option-${F()}`,e=A(\"ListboxOption\"),f=T(null);w({el:f,$el:f});let v=x(()=>e.activeOptionIndex.value!==null?e.options.value[e.activeOptionIndex.value].id===n:!1),s=x(()=>P(e.mode.value,{[0]:()=>e.compare(R(e.value.value),R(o.value)),[1]:()=>R(e.value.value).some(t=>e.compare(R(t),R(o.value)))})),m=x(()=>P(e.mode.value,{[1]:()=>{var i;let t=R(e.value.value);return((i=e.options.value.find(l=>t.some(d=>e.compare(R(d),R(l.dataRef.value)))))==null?void 0:i.id)===n},[0]:()=>s.value})),p=Z(f),a=x(()=>({disabled:o.disabled,value:o.value,get textValue(){return p()},domRef:f}));K(()=>e.registerOption(n,a)),q(()=>e.unregisterOption(n)),K(()=>{H([e.listboxState,s],()=>{e.listboxState.value===0&&s.value&&P(e.mode.value,{[1]:()=>{m.value&&e.goToOption(g.Specific,n)},[0]:()=>{e.goToOption(g.Specific,n)}})},{immediate:!0})}),G(()=>{e.listboxState.value===0&&v.value&&e.activationTrigger.value!==0&&V(()=>{var t,i;return(i=(t=S(f))==null?void 0:t.scrollIntoView)==null?void 0:i.call(t,{block:\"nearest\"})})});function u(t){if(o.disabled)return t.preventDefault();e.select(o.value),e.mode.value===0&&(e.closeListbox(),V(()=>{var i;return(i=S(e.buttonRef))==null?void 0:i.focus({preventScroll:!0})}))}function D(){if(o.disabled)return e.goToOption(g.Nothing);e.goToOption(g.Specific,n)}let y=ee();function L(t){y.update(t)}function M(t){y.wasMoved(t)&&(o.disabled||v.value||e.goToOption(g.Specific,n,0))}function k(t){y.wasMoved(t)&&(o.disabled||v.value&&e.goToOption(g.Nothing))}return()=>{let{disabled:t}=o,i={active:v.value,selected:s.value,disabled:t},{value:l,disabled:d,...O}=o,h={id:n,ref:f,role:\"option\",tabIndex:t===!0?void 0:-1,\"aria-disabled\":t===!0?!0:void 0,\"aria-selected\":s.value,disabled:void 0,onClick:u,onFocus:D,onPointerenter:L,onMouseenter:L,onPointermove:M,onMousemove:M,onPointerleave:k,onMouseleave:k};return j({ourProps:h,theirProps:O,slot:i,attrs:r,slots:b,name:\"ListboxOption\"})}}});export{Ie as Listbox,je as ListboxButton,Ee as ListboxLabel,Fe as ListboxOption,Ae as ListboxOptions};\n","import{computed as y,defineComponent as T,inject as K,nextTick as x,onMounted as N,onUnmounted as j,provide as L,ref as R,watchEffect as B}from\"vue\";import{useId as w}from'../../hooks/use-id.js';import{useOutsideClick as U}from'../../hooks/use-outside-click.js';import{useResolveButtonType as $}from'../../hooks/use-resolve-button-type.js';import{useTextValue as V}from'../../hooks/use-text-value.js';import{useTrackedPointer as H}from'../../hooks/use-tracked-pointer.js';import{useTreeWalker as Q}from'../../hooks/use-tree-walker.js';import{State as D,useOpenClosed as _,useOpenClosedProvider as q}from'../../internal/open-closed.js';import{Keys as c}from'../../keyboard.js';import{calculateActiveIndex as W,Focus as S}from'../../utils/calculate-active-index.js';import{dom as m}from'../../utils/dom.js';import{Focus as E,FocusableMode as J,focusFrom as z,isFocusableElement as G,restoreFocusIfNecessary as k,sortByDomNode as X}from'../../utils/focus-management.js';import{match as Y}from'../../utils/match.js';import{Features as F,render as P}from'../../utils/render.js';var Z=(i=>(i[i.Open=0]=\"Open\",i[i.Closed=1]=\"Closed\",i))(Z||{}),ee=(i=>(i[i.Pointer=0]=\"Pointer\",i[i.Other=1]=\"Other\",i))(ee||{});function te(o){requestAnimationFrame(()=>requestAnimationFrame(o))}let A=Symbol(\"MenuContext\");function O(o){let M=K(A,null);if(M===null){let i=new Error(`<${o} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(i,O),i}return M}let ge=T({name:\"Menu\",props:{as:{type:[Object,String],default:\"template\"}},setup(o,{slots:M,attrs:i}){let I=R(1),p=R(null),e=R(null),r=R([]),f=R(\"\"),d=R(null),g=R(1);function b(t=a=>a){let a=d.value!==null?r.value[d.value]:null,n=X(t(r.value.slice()),v=>m(v.dataRef.domRef)),s=a?n.indexOf(a):null;return s===-1&&(s=null),{items:n,activeItemIndex:s}}let l={menuState:I,buttonRef:p,itemsRef:e,items:r,searchQuery:f,activeItemIndex:d,activationTrigger:g,closeMenu:()=>{I.value=1,d.value=null},openMenu:()=>I.value=0,goToItem(t,a,n){let s=b(),v=W(t===S.Specific?{focus:S.Specific,id:a}:{focus:t},{resolveItems:()=>s.items,resolveActiveIndex:()=>s.activeItemIndex,resolveId:u=>u.id,resolveDisabled:u=>u.dataRef.disabled});f.value=\"\",d.value=v,g.value=n!=null?n:1,r.value=s.items},search(t){let n=f.value!==\"\"?0:1;f.value+=t.toLowerCase();let v=(d.value!==null?r.value.slice(d.value+n).concat(r.value.slice(0,d.value+n)):r.value).find(h=>h.dataRef.textValue.startsWith(f.value)&&!h.dataRef.disabled),u=v?r.value.indexOf(v):-1;u===-1||u===d.value||(d.value=u,g.value=1)},clearSearch(){f.value=\"\"},registerItem(t,a){let n=b(s=>[...s,{id:t,dataRef:a}]);r.value=n.items,d.value=n.activeItemIndex,g.value=1},unregisterItem(t){let a=b(n=>{let s=n.findIndex(v=>v.id===t);return s!==-1&&n.splice(s,1),n});r.value=a.items,d.value=a.activeItemIndex,g.value=1}};return U([p,e],(t,a)=>{var n;l.closeMenu(),G(a,J.Loose)||(t.preventDefault(),(n=m(p))==null||n.focus())},y(()=>I.value===0)),L(A,l),q(y(()=>Y(I.value,{[0]:D.Open,[1]:D.Closed}))),()=>{let t={open:I.value===0,close:l.closeMenu};return P({ourProps:{},theirProps:o,slot:t,slots:M,attrs:i,name:\"Menu\"})}}}),Se=T({name:\"MenuButton\",props:{disabled:{type:Boolean,default:!1},as:{type:[Object,String],default:\"button\"},id:{type:String,default:null}},setup(o,{attrs:M,slots:i,expose:I}){var b;let p=(b=o.id)!=null?b:`headlessui-menu-button-${w()}`,e=O(\"MenuButton\");I({el:e.buttonRef,$el:e.buttonRef});function r(l){switch(l.key){case c.Space:case c.Enter:case c.ArrowDown:l.preventDefault(),l.stopPropagation(),e.openMenu(),x(()=>{var t;(t=m(e.itemsRef))==null||t.focus({preventScroll:!0}),e.goToItem(S.First)});break;case c.ArrowUp:l.preventDefault(),l.stopPropagation(),e.openMenu(),x(()=>{var t;(t=m(e.itemsRef))==null||t.focus({preventScroll:!0}),e.goToItem(S.Last)});break}}function f(l){switch(l.key){case c.Space:l.preventDefault();break}}function d(l){o.disabled||(e.menuState.value===0?(e.closeMenu(),x(()=>{var t;return(t=m(e.buttonRef))==null?void 0:t.focus({preventScroll:!0})})):(l.preventDefault(),e.openMenu(),te(()=>{var t;return(t=m(e.itemsRef))==null?void 0:t.focus({preventScroll:!0})})))}let g=$(y(()=>({as:o.as,type:M.type})),e.buttonRef);return()=>{var n;let l={open:e.menuState.value===0},{...t}=o,a={ref:e.buttonRef,id:p,type:g.value,\"aria-haspopup\":\"menu\",\"aria-controls\":(n=m(e.itemsRef))==null?void 0:n.id,\"aria-expanded\":e.menuState.value===0,onKeydown:r,onKeyup:f,onClick:d};return P({ourProps:a,theirProps:t,slot:l,attrs:M,slots:i,name:\"MenuButton\"})}}}),Me=T({name:\"MenuItems\",props:{as:{type:[Object,String],default:\"div\"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},id:{type:String,default:null}},setup(o,{attrs:M,slots:i,expose:I}){var l;let p=(l=o.id)!=null?l:`headlessui-menu-items-${w()}`,e=O(\"MenuItems\"),r=R(null);I({el:e.itemsRef,$el:e.itemsRef}),Q({container:y(()=>m(e.itemsRef)),enabled:y(()=>e.menuState.value===0),accept(t){return t.getAttribute(\"role\")===\"menuitem\"?NodeFilter.FILTER_REJECT:t.hasAttribute(\"role\")?NodeFilter.FILTER_SKIP:NodeFilter.FILTER_ACCEPT},walk(t){t.setAttribute(\"role\",\"none\")}});function f(t){var a;switch(r.value&&clearTimeout(r.value),t.key){case c.Space:if(e.searchQuery.value!==\"\")return t.preventDefault(),t.stopPropagation(),e.search(t.key);case c.Enter:if(t.preventDefault(),t.stopPropagation(),e.activeItemIndex.value!==null){let s=e.items.value[e.activeItemIndex.value];(a=m(s.dataRef.domRef))==null||a.click()}e.closeMenu(),k(m(e.buttonRef));break;case c.ArrowDown:return t.preventDefault(),t.stopPropagation(),e.goToItem(S.Next);case c.ArrowUp:return t.preventDefault(),t.stopPropagation(),e.goToItem(S.Previous);case c.Home:case c.PageUp:return t.preventDefault(),t.stopPropagation(),e.goToItem(S.First);case c.End:case c.PageDown:return t.preventDefault(),t.stopPropagation(),e.goToItem(S.Last);case c.Escape:t.preventDefault(),t.stopPropagation(),e.closeMenu(),x(()=>{var n;return(n=m(e.buttonRef))==null?void 0:n.focus({preventScroll:!0})});break;case c.Tab:t.preventDefault(),t.stopPropagation(),e.closeMenu(),x(()=>z(m(e.buttonRef),t.shiftKey?E.Previous:E.Next));break;default:t.key.length===1&&(e.search(t.key),r.value=setTimeout(()=>e.clearSearch(),350));break}}function d(t){switch(t.key){case c.Space:t.preventDefault();break}}let g=_(),b=y(()=>g!==null?(g.value&D.Open)===D.Open:e.menuState.value===0);return()=>{var s,v;let t={open:e.menuState.value===0},{...a}=o,n={\"aria-activedescendant\":e.activeItemIndex.value===null||(s=e.items.value[e.activeItemIndex.value])==null?void 0:s.id,\"aria-labelledby\":(v=m(e.buttonRef))==null?void 0:v.id,id:p,onKeydown:f,onKeyup:d,role:\"menu\",tabIndex:0,ref:e.itemsRef};return P({ourProps:n,theirProps:a,slot:t,attrs:M,slots:i,features:F.RenderStrategy|F.Static,visible:b.value,name:\"MenuItems\"})}}}),be=T({name:\"MenuItem\",inheritAttrs:!1,props:{as:{type:[Object,String],default:\"template\"},disabled:{type:Boolean,default:!1},id:{type:String,default:null}},setup(o,{slots:M,attrs:i,expose:I}){var v;let p=(v=o.id)!=null?v:`headlessui-menu-item-${w()}`,e=O(\"MenuItem\"),r=R(null);I({el:r,$el:r});let f=y(()=>e.activeItemIndex.value!==null?e.items.value[e.activeItemIndex.value].id===p:!1),d=V(r),g=y(()=>({disabled:o.disabled,get textValue(){return d()},domRef:r}));N(()=>e.registerItem(p,g)),j(()=>e.unregisterItem(p)),B(()=>{e.menuState.value===0&&f.value&&e.activationTrigger.value!==0&&x(()=>{var u,h;return(h=(u=m(r))==null?void 0:u.scrollIntoView)==null?void 0:h.call(u,{block:\"nearest\"})})});function b(u){if(o.disabled)return u.preventDefault();e.closeMenu(),k(m(e.buttonRef))}function l(){if(o.disabled)return e.goToItem(S.Nothing);e.goToItem(S.Specific,p)}let t=H();function a(u){t.update(u)}function n(u){t.wasMoved(u)&&(o.disabled||f.value||e.goToItem(S.Specific,p,0))}function s(u){t.wasMoved(u)&&(o.disabled||f.value&&e.goToItem(S.Nothing))}return()=>{let{disabled:u,...h}=o,C={active:f.value,disabled:u,close:e.closeMenu};return P({ourProps:{id:p,ref:r,role:\"menuitem\",tabIndex:u===!0?void 0:-1,\"aria-disabled\":u===!0?!0:void 0,onClick:b,onFocus:l,onPointerenter:a,onMouseenter:a,onPointermove:n,onMousemove:n,onPointerleave:s,onMouseleave:s},theirProps:{...i,...h},slot:C,attrs:i,slots:M,name:\"MenuItem\"})}}});export{ge as Menu,Se as MenuButton,be as MenuItem,Me as MenuItems};\n","function l(r){let e={called:!1};return(...t)=>{if(!e.called)return e.called=!0,r(...t)}}export{l as once};\n","import{disposables as p}from'../../../utils/disposables.js';import{once as f}from'../../../utils/once.js';function m(e,...t){e&&t.length>0&&e.classList.add(...t)}function d(e,...t){e&&t.length>0&&e.classList.remove(...t)}var g=(i=>(i.Finished=\"finished\",i.Cancelled=\"cancelled\",i))(g||{});function F(e,t){let i=p();if(!e)return i.dispose;let{transitionDuration:n,transitionDelay:a}=getComputedStyle(e),[l,s]=[n,a].map(o=>{let[u=0]=o.split(\",\").filter(Boolean).map(r=>r.includes(\"ms\")?parseFloat(r):parseFloat(r)*1e3).sort((r,c)=>c-r);return u});return l!==0?i.setTimeout(()=>t(\"finished\"),l+s):t(\"finished\"),i.add(()=>t(\"cancelled\")),i.dispose}function L(e,t,i,n,a,l){let s=p(),o=l!==void 0?f(l):()=>{};return d(e,...a),m(e,...t,...i),s.nextFrame(()=>{d(e,...i),m(e,...n),s.add(F(e,u=>(d(e,...n,...t),m(e,...a),o(u))))}),s.add(()=>d(e,...t,...i,...n,...a)),s.add(()=>o(\"cancelled\")),s.dispose}export{g as Reason,L as transition};\n","import{computed as w,defineComponent as K,h as k,inject as F,normalizeClass as ae,onMounted as C,onUnmounted as z,provide as B,ref as m,watch as le,watchEffect as x}from\"vue\";import{useId as ie}from'../../hooks/use-id.js';import{hasOpenClosed as se,State as u,useOpenClosed as oe,useOpenClosedProvider as ue}from'../../internal/open-closed.js';import{dom as $}from'../../utils/dom.js';import{env as fe}from'../../utils/env.js';import{match as O}from'../../utils/match.js';import{Features as de,omit as ve,render as q,RenderStrategy as T}from'../../utils/render.js';import{Reason as G,transition as J}from'./utils/transition.js';function g(e=\"\"){return e.split(/\\s+/).filter(t=>t.length>1)}let R=Symbol(\"TransitionContext\");var pe=(a=>(a.Visible=\"visible\",a.Hidden=\"hidden\",a))(pe||{});function me(){return F(R,null)!==null}function Te(){let e=F(R,null);if(e===null)throw new Error(\"A is used but it is missing a parent .\");return e}function ge(){let e=F(N,null);if(e===null)throw new Error(\"A is used but it is missing a parent .\");return e}let N=Symbol(\"NestingContext\");function L(e){return\"children\"in e?L(e.children):e.value.filter(({state:t})=>t===\"visible\").length>0}function Q(e){let t=m([]),a=m(!1);C(()=>a.value=!0),z(()=>a.value=!1);function s(n,r=T.Hidden){let l=t.value.findIndex(({id:f})=>f===n);l!==-1&&(O(r,{[T.Unmount](){t.value.splice(l,1)},[T.Hidden](){t.value[l].state=\"hidden\"}}),!L(t)&&a.value&&(e==null||e()))}function h(n){let r=t.value.find(({id:l})=>l===n);return r?r.state!==\"visible\"&&(r.state=\"visible\"):t.value.push({id:n,state:\"visible\"}),()=>s(n,T.Unmount)}return{children:t,register:h,unregister:s}}let W=de.RenderStrategy,he=K({props:{as:{type:[Object,String],default:\"div\"},show:{type:[Boolean],default:null},unmount:{type:[Boolean],default:!0},appear:{type:[Boolean],default:!1},enter:{type:[String],default:\"\"},enterFrom:{type:[String],default:\"\"},enterTo:{type:[String],default:\"\"},entered:{type:[String],default:\"\"},leave:{type:[String],default:\"\"},leaveFrom:{type:[String],default:\"\"},leaveTo:{type:[String],default:\"\"}},emits:{beforeEnter:()=>!0,afterEnter:()=>!0,beforeLeave:()=>!0,afterLeave:()=>!0},setup(e,{emit:t,attrs:a,slots:s,expose:h}){let n=m(0);function r(){n.value|=u.Opening,t(\"beforeEnter\")}function l(){n.value&=~u.Opening,t(\"afterEnter\")}function f(){n.value|=u.Closing,t(\"beforeLeave\")}function S(){n.value&=~u.Closing,t(\"afterLeave\")}if(!me()&&se())return()=>k(Se,{...e,onBeforeEnter:r,onAfterEnter:l,onBeforeLeave:f,onAfterLeave:S},s);let d=m(null),y=w(()=>e.unmount?T.Unmount:T.Hidden);h({el:d,$el:d});let{show:v,appear:A}=Te(),{register:D,unregister:H}=ge(),i=m(v.value?\"visible\":\"hidden\"),I={value:!0},c=ie(),b={value:!1},P=Q(()=>{!b.value&&i.value!==\"hidden\"&&(i.value=\"hidden\",H(c),S())});C(()=>{let o=D(c);z(o)}),x(()=>{if(y.value===T.Hidden&&c){if(v.value&&i.value!==\"visible\"){i.value=\"visible\";return}O(i.value,{[\"hidden\"]:()=>H(c),[\"visible\"]:()=>D(c)})}});let j=g(e.enter),M=g(e.enterFrom),X=g(e.enterTo),_=g(e.entered),Y=g(e.leave),Z=g(e.leaveFrom),ee=g(e.leaveTo);C(()=>{x(()=>{if(i.value===\"visible\"){let o=$(d);if(o instanceof Comment&&o.data===\"\")throw new Error(\"Did you forget to passthrough the `ref` to the actual DOM node?\")}})});function te(o){let E=I.value&&!A.value,p=$(d);!p||!(p instanceof HTMLElement)||E||(b.value=!0,v.value&&r(),v.value||f(),o(v.value?J(p,j,M,X,_,V=>{b.value=!1,V===G.Finished&&l()}):J(p,Y,Z,ee,_,V=>{b.value=!1,V===G.Finished&&(L(P)||(i.value=\"hidden\",H(c),S()))})))}return C(()=>{le([v],(o,E,p)=>{te(p),I.value=!1},{immediate:!0})}),B(N,P),ue(w(()=>O(i.value,{[\"visible\"]:u.Open,[\"hidden\"]:u.Closed})|n.value)),()=>{let{appear:o,show:E,enter:p,enterFrom:V,enterTo:Ce,entered:ye,leave:be,leaveFrom:Ee,leaveTo:Ve,...U}=e,ne={ref:d},re={...U,...A.value&&v.value&&fe.isServer?{class:ae([a.class,U.class,...j,...M])}:{}};return q({theirProps:re,ourProps:ne,slot:{},slots:s,attrs:a,features:W,visible:i.value===\"visible\",name:\"TransitionChild\"})}}}),ce=he,Se=K({inheritAttrs:!1,props:{as:{type:[Object,String],default:\"div\"},show:{type:[Boolean],default:null},unmount:{type:[Boolean],default:!0},appear:{type:[Boolean],default:!1},enter:{type:[String],default:\"\"},enterFrom:{type:[String],default:\"\"},enterTo:{type:[String],default:\"\"},entered:{type:[String],default:\"\"},leave:{type:[String],default:\"\"},leaveFrom:{type:[String],default:\"\"},leaveTo:{type:[String],default:\"\"}},emits:{beforeEnter:()=>!0,afterEnter:()=>!0,beforeLeave:()=>!0,afterLeave:()=>!0},setup(e,{emit:t,attrs:a,slots:s}){let h=oe(),n=w(()=>e.show===null&&h!==null?(h.value&u.Open)===u.Open:e.show);x(()=>{if(![!0,!1].includes(n.value))throw new Error('A is used but it is missing a `:show=\"true | false\"` prop.')});let r=m(n.value?\"visible\":\"hidden\"),l=Q(()=>{r.value=\"hidden\"}),f=m(!0),S={show:n,appear:w(()=>e.appear||!f.value)};return C(()=>{x(()=>{f.value=!1,n.value?r.value=\"visible\":L(l)||(r.value=\"hidden\")})}),B(N,l),B(R,S),()=>{let d=ve(e,[\"show\",\"appear\",\"unmount\",\"onBeforeEnter\",\"onBeforeLeave\",\"onAfterEnter\",\"onAfterLeave\"]),y={unmount:e.unmount};return q({ourProps:{...y,as:\"template\"},theirProps:{},slot:{},slots:{...s,default:()=>[k(ce,{onBeforeEnter:()=>t(\"beforeEnter\"),onAfterEnter:()=>t(\"afterEnter\"),onBeforeLeave:()=>t(\"beforeLeave\"),onAfterLeave:()=>t(\"afterLeave\"),...a,...y,...d},s.default)]},attrs:{},features:W,visible:r.value===\"visible\",name:\"Transition\"})}}});export{he as TransitionChild,Se as TransitionRoot};\n","\n\n \n \n \n \n\n","import { computed, onBeforeUnmount, onMounted, ref, type Ref } from 'vue';\n\nconst windowWidth = ref(window.innerWidth);\nconst windowHeight = ref(window.innerHeight);\nconst isLarge = computed(() => windowWidth.value >= 1024); // This should equal the \"lg\" breakpoint in tailwind.config.js\nconst isMedium = computed(() => windowWidth.value >= 768); // This should equal the \"md\" breakpoint in tailwind.config.js\nconst isBelowSmall = computed(() => windowWidth.value < 640); // This should equal the \"sm\" breakpoint in tailwind.config.js\n\nfunction handleResize() {\n windowWidth.value = window.innerWidth;\n windowHeight.value = window.innerHeight;\n}\n\nexport function setupResizeListener() {\n onMounted(() => {\n window.addEventListener('resize', handleResize);\n });\n onBeforeUnmount(() => {\n window.removeEventListener('resize', handleResize);\n });\n}\nexport function useResizeListener(): {\n windowWidth: Ref;\n windowHeight: Ref;\n /** Above or equal to the \"lg\" breakpoint in tailwind.config.js */\n isLarge: Ref;\n /** Above or equal to the \"md\" breakpoint in tailwind.config.js */\n isMedium: Ref;\n /** Below the \"sm\" breakpoint in tailwind.config.js */\n isBelowSmall: Ref;\n} {\n return { windowWidth, windowHeight, isLarge, isMedium, isBelowSmall };\n}\n","\n\n\n","import type { Guid, LayoutItem, Translated } from '@/api/types';\nimport type BlockList from './BlockList.vue';\nimport { computed, type ComponentPublicInstance, type Ref, ref } from 'vue';\nimport type SearchBar from './SearchBar.vue';\n\ntype ConnectionRefs = {\n filter?: InstanceType;\n list?: InstanceType;\n};\nexport type TranslatedConnectionItem = {\n item: Translated;\n label: string;\n};\ntype ConnectionItem> = {\n item: T;\n label: string;\n};\nexport type ConnectionInfo = {\n self_id: Guid;\n role: 'filter' | 'list' | 'search';\n};\n\nexport function useBlockListConnections(\n item: Ref>,\n flatList: Ref,\n): {\n onRefCreated: (ref: Element | ComponentPublicInstance | null) => void;\n connection: Ref;\n flattened: Ref;\n} {\n const flattened = computed(() => {\n if (flatList.value) return flatList.value;\n return flattenLayout([item.value]);\n });\n const connections = computed(() => {\n return flattened.value\n .filter((i) => !!i.item.doclistFilterFor || !!i.item.doclistSearchFor)\n .map((f) => [\n f.item.id,\n f.item.doclistFilterFor ?? f.item.doclistSearchFor!,\n ])\n .flat();\n });\n return {\n onRefCreated: (ref) =>\n addBlockListConnectionRef(\n item.value,\n flattened.value,\n ref as InstanceType,\n ),\n connection: computed(() =>\n connections.value.includes(item.value.id)\n ? ({\n self_id: item.value.id,\n role: item.value.doclistFilterFor\n ? 'filter'\n : item.value.doclistSearchFor\n ? 'search'\n : 'list',\n } as ConnectionInfo)\n : undefined,\n ),\n flattened,\n };\n}\n\nexport function getLayoutBlockId(parentId = '', index?: number) {\n if (parentId) parentId += ':';\n return `${parentId}${(index ?? 0) + 1}`;\n}\nexport function flattenLayout>(\n items: T[],\n parentId?: string,\n): ConnectionItem[] {\n const res: ConnectionItem[] = [];\n let index = 0;\n for (const i of items) {\n if (!i) return res;\n const id = getLayoutBlockId(parentId, index);\n res.push({ item: i, label: id });\n if (i.children) res.push(...flattenLayout(i.children as T[], id));\n index++;\n }\n return res;\n}\n\nconst blockListConnections: {\n byFilterId: Ref<{ [key: Guid]: Omit }>;\n bySearchId: Ref<{ [key: Guid]: Omit }>;\n byListId: Ref<{ [key: Guid]: Omit }>;\n} = { byFilterId: ref({}), bySearchId: ref({}), byListId: ref({}) };\nexport function getConnectedFilterByListId(list: ConnectionInfo | undefined) {\n if (!list) return undefined;\n return blockListConnections.byListId.value[list.self_id]?.filter;\n}\nexport function getConnectedListByFilterId(filter: ConnectionInfo) {\n return blockListConnections.byFilterId.value[filter.self_id]?.list;\n}\nexport function getConnectedListBySearchId(filter: ConnectionInfo) {\n return blockListConnections.bySearchId.value[filter.self_id]?.list;\n}\nexport function isConnectedFilter(id: Guid) {\n return !!blockListConnections.byFilterId.value[id];\n}\n\nfunction addBlockListConnectionRef(\n item: Pick,\n lookupList: {\n item: Pick;\n }[],\n ref: InstanceType | InstanceType,\n) {\n const addConnection = <\n K1 extends keyof typeof blockListConnections,\n K2 extends keyof (typeof blockListConnections)[K1]['value'][Guid],\n >(\n connectionType: K1,\n connectedType: K2,\n id: Guid,\n ) => {\n if (!blockListConnections[connectionType].value[id]) {\n blockListConnections[connectionType].value[id] = {};\n }\n (\n blockListConnections[connectionType].value[id] as {\n [key in typeof connectedType]: typeof ref;\n }\n )[connectedType] = ref;\n };\n\n if (item.doclistFilterFor) {\n const connectedListId = lookupList.find(\n (i) => i.item.id === item.doclistFilterFor,\n )?.item.id;\n if (!connectedListId) return; // connected to no longer existing component\n addConnection('byListId', 'filter', connectedListId);\n } else {\n const connectedFilters = lookupList.filter(\n (i) => i.item.doclistFilterFor === item.id,\n );\n connectedFilters.forEach((f) => {\n addConnection('byFilterId', 'list', f.item.id);\n });\n const connectedSearchBars = lookupList.filter(\n (i) => i.item.doclistSearchFor === item.id,\n );\n connectedSearchBars.forEach((f) => {\n addConnection('bySearchId', 'list', f.item.id);\n });\n }\n}\n","\n\n\n","\n\n\n","\n;(function (name, root, factory) {\n if (typeof exports === 'object') {\n module.exports = factory()\n module.exports['default'] = factory()\n }\n /* istanbul ignore next */\n else if (typeof define === 'function' && define.amd) {\n define(factory)\n }\n else {\n root[name] = factory()\n }\n}('slugify', this, function () {\n var charMap = JSON.parse('{\"$\":\"dollar\",\"%\":\"percent\",\"&\":\"and\",\"<\":\"less\",\">\":\"greater\",\"|\":\"or\",\"¢\":\"cent\",\"£\":\"pound\",\"¤\":\"currency\",\"¥\":\"yen\",\"©\":\"(c)\",\"ª\":\"a\",\"®\":\"(r)\",\"º\":\"o\",\"À\":\"A\",\"Á\":\"A\",\"Â\":\"A\",\"Ã\":\"A\",\"Ä\":\"A\",\"Å\":\"A\",\"Æ\":\"AE\",\"Ç\":\"C\",\"È\":\"E\",\"É\":\"E\",\"Ê\":\"E\",\"Ë\":\"E\",\"Ì\":\"I\",\"Í\":\"I\",\"Î\":\"I\",\"Ï\":\"I\",\"Ð\":\"D\",\"Ñ\":\"N\",\"Ò\":\"O\",\"Ó\":\"O\",\"Ô\":\"O\",\"Õ\":\"O\",\"Ö\":\"O\",\"Ø\":\"O\",\"Ù\":\"U\",\"Ú\":\"U\",\"Û\":\"U\",\"Ü\":\"U\",\"Ý\":\"Y\",\"Þ\":\"TH\",\"ß\":\"ss\",\"à\":\"a\",\"á\":\"a\",\"â\":\"a\",\"ã\":\"a\",\"ä\":\"a\",\"å\":\"a\",\"æ\":\"ae\",\"ç\":\"c\",\"è\":\"e\",\"é\":\"e\",\"ê\":\"e\",\"ë\":\"e\",\"ì\":\"i\",\"í\":\"i\",\"î\":\"i\",\"ï\":\"i\",\"ð\":\"d\",\"ñ\":\"n\",\"ò\":\"o\",\"ó\":\"o\",\"ô\":\"o\",\"õ\":\"o\",\"ö\":\"o\",\"ø\":\"o\",\"ù\":\"u\",\"ú\":\"u\",\"û\":\"u\",\"ü\":\"u\",\"ý\":\"y\",\"þ\":\"th\",\"ÿ\":\"y\",\"Ā\":\"A\",\"ā\":\"a\",\"Ă\":\"A\",\"ă\":\"a\",\"Ą\":\"A\",\"ą\":\"a\",\"Ć\":\"C\",\"ć\":\"c\",\"Č\":\"C\",\"č\":\"c\",\"Ď\":\"D\",\"ď\":\"d\",\"Đ\":\"DJ\",\"đ\":\"dj\",\"Ē\":\"E\",\"ē\":\"e\",\"Ė\":\"E\",\"ė\":\"e\",\"Ę\":\"e\",\"ę\":\"e\",\"Ě\":\"E\",\"ě\":\"e\",\"Ğ\":\"G\",\"ğ\":\"g\",\"Ģ\":\"G\",\"ģ\":\"g\",\"Ĩ\":\"I\",\"ĩ\":\"i\",\"Ī\":\"i\",\"ī\":\"i\",\"Į\":\"I\",\"į\":\"i\",\"İ\":\"I\",\"ı\":\"i\",\"Ķ\":\"k\",\"ķ\":\"k\",\"Ļ\":\"L\",\"ļ\":\"l\",\"Ľ\":\"L\",\"ľ\":\"l\",\"Ł\":\"L\",\"ł\":\"l\",\"Ń\":\"N\",\"ń\":\"n\",\"Ņ\":\"N\",\"ņ\":\"n\",\"Ň\":\"N\",\"ň\":\"n\",\"Ō\":\"O\",\"ō\":\"o\",\"Ő\":\"O\",\"ő\":\"o\",\"Œ\":\"OE\",\"œ\":\"oe\",\"Ŕ\":\"R\",\"ŕ\":\"r\",\"Ř\":\"R\",\"ř\":\"r\",\"Ś\":\"S\",\"ś\":\"s\",\"Ş\":\"S\",\"ş\":\"s\",\"Š\":\"S\",\"š\":\"s\",\"Ţ\":\"T\",\"ţ\":\"t\",\"Ť\":\"T\",\"ť\":\"t\",\"Ũ\":\"U\",\"ũ\":\"u\",\"Ū\":\"u\",\"ū\":\"u\",\"Ů\":\"U\",\"ů\":\"u\",\"Ű\":\"U\",\"ű\":\"u\",\"Ų\":\"U\",\"ų\":\"u\",\"Ŵ\":\"W\",\"ŵ\":\"w\",\"Ŷ\":\"Y\",\"ŷ\":\"y\",\"Ÿ\":\"Y\",\"Ź\":\"Z\",\"ź\":\"z\",\"Ż\":\"Z\",\"ż\":\"z\",\"Ž\":\"Z\",\"ž\":\"z\",\"Ə\":\"E\",\"ƒ\":\"f\",\"Ơ\":\"O\",\"ơ\":\"o\",\"Ư\":\"U\",\"ư\":\"u\",\"Lj\":\"LJ\",\"lj\":\"lj\",\"Nj\":\"NJ\",\"nj\":\"nj\",\"Ș\":\"S\",\"ș\":\"s\",\"Ț\":\"T\",\"ț\":\"t\",\"ə\":\"e\",\"˚\":\"o\",\"Ά\":\"A\",\"Έ\":\"E\",\"Ή\":\"H\",\"Ί\":\"I\",\"Ό\":\"O\",\"Ύ\":\"Y\",\"Ώ\":\"W\",\"ΐ\":\"i\",\"Α\":\"A\",\"Β\":\"B\",\"Γ\":\"G\",\"Δ\":\"D\",\"Ε\":\"E\",\"Ζ\":\"Z\",\"Η\":\"H\",\"Θ\":\"8\",\"Ι\":\"I\",\"Κ\":\"K\",\"Λ\":\"L\",\"Μ\":\"M\",\"Ν\":\"N\",\"Ξ\":\"3\",\"Ο\":\"O\",\"Π\":\"P\",\"Ρ\":\"R\",\"Σ\":\"S\",\"Τ\":\"T\",\"Υ\":\"Y\",\"Φ\":\"F\",\"Χ\":\"X\",\"Ψ\":\"PS\",\"Ω\":\"W\",\"Ϊ\":\"I\",\"Ϋ\":\"Y\",\"ά\":\"a\",\"έ\":\"e\",\"ή\":\"h\",\"ί\":\"i\",\"ΰ\":\"y\",\"α\":\"a\",\"β\":\"b\",\"γ\":\"g\",\"δ\":\"d\",\"ε\":\"e\",\"ζ\":\"z\",\"η\":\"h\",\"θ\":\"8\",\"ι\":\"i\",\"κ\":\"k\",\"λ\":\"l\",\"μ\":\"m\",\"ν\":\"n\",\"ξ\":\"3\",\"ο\":\"o\",\"π\":\"p\",\"ρ\":\"r\",\"ς\":\"s\",\"σ\":\"s\",\"τ\":\"t\",\"υ\":\"y\",\"φ\":\"f\",\"χ\":\"x\",\"ψ\":\"ps\",\"ω\":\"w\",\"ϊ\":\"i\",\"ϋ\":\"y\",\"ό\":\"o\",\"ύ\":\"y\",\"ώ\":\"w\",\"Ё\":\"Yo\",\"Ђ\":\"DJ\",\"Є\":\"Ye\",\"І\":\"I\",\"Ї\":\"Yi\",\"Ј\":\"J\",\"Љ\":\"LJ\",\"Њ\":\"NJ\",\"Ћ\":\"C\",\"Џ\":\"DZ\",\"А\":\"A\",\"Б\":\"B\",\"В\":\"V\",\"Г\":\"G\",\"Д\":\"D\",\"Е\":\"E\",\"Ж\":\"Zh\",\"З\":\"Z\",\"И\":\"I\",\"Й\":\"J\",\"К\":\"K\",\"Л\":\"L\",\"М\":\"M\",\"Н\":\"N\",\"О\":\"O\",\"П\":\"P\",\"Р\":\"R\",\"С\":\"S\",\"Т\":\"T\",\"У\":\"U\",\"Ф\":\"F\",\"Х\":\"H\",\"Ц\":\"C\",\"Ч\":\"Ch\",\"Ш\":\"Sh\",\"Щ\":\"Sh\",\"Ъ\":\"U\",\"Ы\":\"Y\",\"Ь\":\"\",\"Э\":\"E\",\"Ю\":\"Yu\",\"Я\":\"Ya\",\"а\":\"a\",\"б\":\"b\",\"в\":\"v\",\"г\":\"g\",\"д\":\"d\",\"е\":\"e\",\"ж\":\"zh\",\"з\":\"z\",\"и\":\"i\",\"й\":\"j\",\"к\":\"k\",\"л\":\"l\",\"м\":\"m\",\"н\":\"n\",\"о\":\"o\",\"п\":\"p\",\"р\":\"r\",\"с\":\"s\",\"т\":\"t\",\"у\":\"u\",\"ф\":\"f\",\"х\":\"h\",\"ц\":\"c\",\"ч\":\"ch\",\"ш\":\"sh\",\"щ\":\"sh\",\"ъ\":\"u\",\"ы\":\"y\",\"ь\":\"\",\"э\":\"e\",\"ю\":\"yu\",\"я\":\"ya\",\"ё\":\"yo\",\"ђ\":\"dj\",\"є\":\"ye\",\"і\":\"i\",\"ї\":\"yi\",\"ј\":\"j\",\"љ\":\"lj\",\"њ\":\"nj\",\"ћ\":\"c\",\"ѝ\":\"u\",\"џ\":\"dz\",\"Ґ\":\"G\",\"ґ\":\"g\",\"Ғ\":\"GH\",\"ғ\":\"gh\",\"Қ\":\"KH\",\"қ\":\"kh\",\"Ң\":\"NG\",\"ң\":\"ng\",\"Ү\":\"UE\",\"ү\":\"ue\",\"Ұ\":\"U\",\"ұ\":\"u\",\"Һ\":\"H\",\"һ\":\"h\",\"Ә\":\"AE\",\"ә\":\"ae\",\"Ө\":\"OE\",\"ө\":\"oe\",\"Ա\":\"A\",\"Բ\":\"B\",\"Գ\":\"G\",\"Դ\":\"D\",\"Ե\":\"E\",\"Զ\":\"Z\",\"Է\":\"E\\'\",\"Ը\":\"Y\\'\",\"Թ\":\"T\\'\",\"Ժ\":\"JH\",\"Ի\":\"I\",\"Լ\":\"L\",\"Խ\":\"X\",\"Ծ\":\"C\\'\",\"Կ\":\"K\",\"Հ\":\"H\",\"Ձ\":\"D\\'\",\"Ղ\":\"GH\",\"Ճ\":\"TW\",\"Մ\":\"M\",\"Յ\":\"Y\",\"Ն\":\"N\",\"Շ\":\"SH\",\"Չ\":\"CH\",\"Պ\":\"P\",\"Ջ\":\"J\",\"Ռ\":\"R\\'\",\"Ս\":\"S\",\"Վ\":\"V\",\"Տ\":\"T\",\"Ր\":\"R\",\"Ց\":\"C\",\"Փ\":\"P\\'\",\"Ք\":\"Q\\'\",\"Օ\":\"O\\'\\'\",\"Ֆ\":\"F\",\"և\":\"EV\",\"ء\":\"a\",\"آ\":\"aa\",\"أ\":\"a\",\"ؤ\":\"u\",\"إ\":\"i\",\"ئ\":\"e\",\"ا\":\"a\",\"ب\":\"b\",\"ة\":\"h\",\"ت\":\"t\",\"ث\":\"th\",\"ج\":\"j\",\"ح\":\"h\",\"خ\":\"kh\",\"د\":\"d\",\"ذ\":\"th\",\"ر\":\"r\",\"ز\":\"z\",\"س\":\"s\",\"ش\":\"sh\",\"ص\":\"s\",\"ض\":\"dh\",\"ط\":\"t\",\"ظ\":\"z\",\"ع\":\"a\",\"غ\":\"gh\",\"ف\":\"f\",\"ق\":\"q\",\"ك\":\"k\",\"ل\":\"l\",\"م\":\"m\",\"ن\":\"n\",\"ه\":\"h\",\"و\":\"w\",\"ى\":\"a\",\"ي\":\"y\",\"ً\":\"an\",\"ٌ\":\"on\",\"ٍ\":\"en\",\"َ\":\"a\",\"ُ\":\"u\",\"ِ\":\"e\",\"ْ\":\"\",\"٠\":\"0\",\"١\":\"1\",\"٢\":\"2\",\"٣\":\"3\",\"٤\":\"4\",\"٥\":\"5\",\"٦\":\"6\",\"٧\":\"7\",\"٨\":\"8\",\"٩\":\"9\",\"پ\":\"p\",\"چ\":\"ch\",\"ژ\":\"zh\",\"ک\":\"k\",\"گ\":\"g\",\"ی\":\"y\",\"۰\":\"0\",\"۱\":\"1\",\"۲\":\"2\",\"۳\":\"3\",\"۴\":\"4\",\"۵\":\"5\",\"۶\":\"6\",\"۷\":\"7\",\"۸\":\"8\",\"۹\":\"9\",\"฿\":\"baht\",\"ა\":\"a\",\"ბ\":\"b\",\"გ\":\"g\",\"დ\":\"d\",\"ე\":\"e\",\"ვ\":\"v\",\"ზ\":\"z\",\"თ\":\"t\",\"ი\":\"i\",\"კ\":\"k\",\"ლ\":\"l\",\"მ\":\"m\",\"ნ\":\"n\",\"ო\":\"o\",\"პ\":\"p\",\"ჟ\":\"zh\",\"რ\":\"r\",\"ს\":\"s\",\"ტ\":\"t\",\"უ\":\"u\",\"ფ\":\"f\",\"ქ\":\"k\",\"ღ\":\"gh\",\"ყ\":\"q\",\"შ\":\"sh\",\"ჩ\":\"ch\",\"ც\":\"ts\",\"ძ\":\"dz\",\"წ\":\"ts\",\"ჭ\":\"ch\",\"ხ\":\"kh\",\"ჯ\":\"j\",\"ჰ\":\"h\",\"Ṣ\":\"S\",\"ṣ\":\"s\",\"Ẁ\":\"W\",\"ẁ\":\"w\",\"Ẃ\":\"W\",\"ẃ\":\"w\",\"Ẅ\":\"W\",\"ẅ\":\"w\",\"ẞ\":\"SS\",\"Ạ\":\"A\",\"ạ\":\"a\",\"Ả\":\"A\",\"ả\":\"a\",\"Ấ\":\"A\",\"ấ\":\"a\",\"Ầ\":\"A\",\"ầ\":\"a\",\"Ẩ\":\"A\",\"ẩ\":\"a\",\"Ẫ\":\"A\",\"ẫ\":\"a\",\"Ậ\":\"A\",\"ậ\":\"a\",\"Ắ\":\"A\",\"ắ\":\"a\",\"Ằ\":\"A\",\"ằ\":\"a\",\"Ẳ\":\"A\",\"ẳ\":\"a\",\"Ẵ\":\"A\",\"ẵ\":\"a\",\"Ặ\":\"A\",\"ặ\":\"a\",\"Ẹ\":\"E\",\"ẹ\":\"e\",\"Ẻ\":\"E\",\"ẻ\":\"e\",\"Ẽ\":\"E\",\"ẽ\":\"e\",\"Ế\":\"E\",\"ế\":\"e\",\"Ề\":\"E\",\"ề\":\"e\",\"Ể\":\"E\",\"ể\":\"e\",\"Ễ\":\"E\",\"ễ\":\"e\",\"Ệ\":\"E\",\"ệ\":\"e\",\"Ỉ\":\"I\",\"ỉ\":\"i\",\"Ị\":\"I\",\"ị\":\"i\",\"Ọ\":\"O\",\"ọ\":\"o\",\"Ỏ\":\"O\",\"ỏ\":\"o\",\"Ố\":\"O\",\"ố\":\"o\",\"Ồ\":\"O\",\"ồ\":\"o\",\"Ổ\":\"O\",\"ổ\":\"o\",\"Ỗ\":\"O\",\"ỗ\":\"o\",\"Ộ\":\"O\",\"ộ\":\"o\",\"Ớ\":\"O\",\"ớ\":\"o\",\"Ờ\":\"O\",\"ờ\":\"o\",\"Ở\":\"O\",\"ở\":\"o\",\"Ỡ\":\"O\",\"ỡ\":\"o\",\"Ợ\":\"O\",\"ợ\":\"o\",\"Ụ\":\"U\",\"ụ\":\"u\",\"Ủ\":\"U\",\"ủ\":\"u\",\"Ứ\":\"U\",\"ứ\":\"u\",\"Ừ\":\"U\",\"ừ\":\"u\",\"Ử\":\"U\",\"ử\":\"u\",\"Ữ\":\"U\",\"ữ\":\"u\",\"Ự\":\"U\",\"ự\":\"u\",\"Ỳ\":\"Y\",\"ỳ\":\"y\",\"Ỵ\":\"Y\",\"ỵ\":\"y\",\"Ỷ\":\"Y\",\"ỷ\":\"y\",\"Ỹ\":\"Y\",\"ỹ\":\"y\",\"–\":\"-\",\"‘\":\"\\'\",\"’\":\"\\'\",\"“\":\"\\\\\\\"\",\"”\":\"\\\\\\\"\",\"„\":\"\\\\\\\"\",\"†\":\"+\",\"•\":\"*\",\"…\":\"...\",\"₠\":\"ecu\",\"₢\":\"cruzeiro\",\"₣\":\"french franc\",\"₤\":\"lira\",\"₥\":\"mill\",\"₦\":\"naira\",\"₧\":\"peseta\",\"₨\":\"rupee\",\"₩\":\"won\",\"₪\":\"new shequel\",\"₫\":\"dong\",\"€\":\"euro\",\"₭\":\"kip\",\"₮\":\"tugrik\",\"₯\":\"drachma\",\"₰\":\"penny\",\"₱\":\"peso\",\"₲\":\"guarani\",\"₳\":\"austral\",\"₴\":\"hryvnia\",\"₵\":\"cedi\",\"₸\":\"kazakhstani tenge\",\"₹\":\"indian rupee\",\"₺\":\"turkish lira\",\"₽\":\"russian ruble\",\"₿\":\"bitcoin\",\"℠\":\"sm\",\"™\":\"tm\",\"∂\":\"d\",\"∆\":\"delta\",\"∑\":\"sum\",\"∞\":\"infinity\",\"♥\":\"love\",\"元\":\"yuan\",\"円\":\"yen\",\"﷼\":\"rial\",\"ﻵ\":\"laa\",\"ﻷ\":\"laa\",\"ﻹ\":\"lai\",\"ﻻ\":\"la\"}')\n var locales = JSON.parse('{\"bg\":{\"Й\":\"Y\",\"Ц\":\"Ts\",\"Щ\":\"Sht\",\"Ъ\":\"A\",\"Ь\":\"Y\",\"й\":\"y\",\"ц\":\"ts\",\"щ\":\"sht\",\"ъ\":\"a\",\"ь\":\"y\"},\"de\":{\"Ä\":\"AE\",\"ä\":\"ae\",\"Ö\":\"OE\",\"ö\":\"oe\",\"Ü\":\"UE\",\"ü\":\"ue\",\"ß\":\"ss\",\"%\":\"prozent\",\"&\":\"und\",\"|\":\"oder\",\"∑\":\"summe\",\"∞\":\"unendlich\",\"♥\":\"liebe\"},\"es\":{\"%\":\"por ciento\",\"&\":\"y\",\"<\":\"menor que\",\">\":\"mayor que\",\"|\":\"o\",\"¢\":\"centavos\",\"£\":\"libras\",\"¤\":\"moneda\",\"₣\":\"francos\",\"∑\":\"suma\",\"∞\":\"infinito\",\"♥\":\"amor\"},\"fr\":{\"%\":\"pourcent\",\"&\":\"et\",\"<\":\"plus petit\",\">\":\"plus grand\",\"|\":\"ou\",\"¢\":\"centime\",\"£\":\"livre\",\"¤\":\"devise\",\"₣\":\"franc\",\"∑\":\"somme\",\"∞\":\"infini\",\"♥\":\"amour\"},\"pt\":{\"%\":\"porcento\",\"&\":\"e\",\"<\":\"menor\",\">\":\"maior\",\"|\":\"ou\",\"¢\":\"centavo\",\"∑\":\"soma\",\"£\":\"libra\",\"∞\":\"infinito\",\"♥\":\"amor\"},\"uk\":{\"И\":\"Y\",\"и\":\"y\",\"Й\":\"Y\",\"й\":\"y\",\"Ц\":\"Ts\",\"ц\":\"ts\",\"Х\":\"Kh\",\"х\":\"kh\",\"Щ\":\"Shch\",\"щ\":\"shch\",\"Г\":\"H\",\"г\":\"h\"},\"vi\":{\"Đ\":\"D\",\"đ\":\"d\"},\"da\":{\"Ø\":\"OE\",\"ø\":\"oe\",\"Å\":\"AA\",\"å\":\"aa\",\"%\":\"procent\",\"&\":\"og\",\"|\":\"eller\",\"$\":\"dollar\",\"<\":\"mindre end\",\">\":\"større end\"},\"nb\":{\"&\":\"og\",\"Å\":\"AA\",\"Æ\":\"AE\",\"Ø\":\"OE\",\"å\":\"aa\",\"æ\":\"ae\",\"ø\":\"oe\"},\"it\":{\"&\":\"e\"},\"nl\":{\"&\":\"en\"},\"sv\":{\"&\":\"och\",\"Å\":\"AA\",\"Ä\":\"AE\",\"Ö\":\"OE\",\"å\":\"aa\",\"ä\":\"ae\",\"ö\":\"oe\"}}')\n\n function replace (string, options) {\n if (typeof string !== 'string') {\n throw new Error('slugify: string argument expected')\n }\n\n options = (typeof options === 'string')\n ? {replacement: options}\n : options || {}\n\n var locale = locales[options.locale] || {}\n\n var replacement = options.replacement === undefined ? '-' : options.replacement\n\n var trim = options.trim === undefined ? true : options.trim\n\n var slug = string.normalize().split('')\n // replace characters based on charMap\n .reduce(function (result, ch) {\n var appendChar = locale[ch];\n if (appendChar === undefined) appendChar = charMap[ch];\n if (appendChar === undefined) appendChar = ch;\n if (appendChar === replacement) appendChar = ' ';\n return result + appendChar\n // remove not allowed characters\n .replace(options.remove || /[^\\w\\s$*_+~.()'\"!\\-:@]+/g, '')\n }, '');\n\n if (options.strict) {\n slug = slug.replace(/[^A-Za-z0-9\\s]/g, '');\n }\n\n if (trim) {\n slug = slug.trim()\n }\n\n // Replace spaces with replacement character, treating multiple consecutive\n // spaces as a single space.\n slug = slug.replace(/\\s+/g, replacement);\n\n if (options.lower) {\n slug = slug.toLowerCase()\n }\n\n return slug\n }\n\n replace.extend = function (customMap) {\n Object.assign(charMap, customMap)\n }\n\n return replace\n}))\n","\n\n\n","import { ref, type Ref } from 'vue';\nimport { refreshCurrentUser, type RoleName, type RoleType } from '@/api/auth';\nimport type { Role, User, UserNotificationSettings } from '@/api/types';\nimport { apiUrl } from '@/config';\nimport { compose, type ComposableResult } from '@/api/composable';\n\nexport function useUsers(): Ref {\n const users = ref(null);\n fetch(`${apiUrl}/users`)\n .then((r) => (r.ok ? r.json() : Promise.resolve([])))\n .then((v) => (users.value = v))\n .catch(() => (users.value = []));\n return users;\n}\n\nexport function useRoles(types?: RoleType[]): ComposableResult {\n return compose(\n (async (): Promise => {\n const query = types ? `?types=${types.join(',')}` : '';\n const response = await fetch(`${apiUrl}/roles${query}`);\n if (!response.ok) throw new Error('error.get_roles_failed');\n const result: (Omit & { type: string })[] =\n await response.json();\n return result.map(\n (r): Role => ({\n id: r.id,\n name: r.name,\n types: r.type.split(', ').filter((t) => !!t) as RoleType[],\n }),\n );\n })(),\n );\n}\n\nexport function useRoleMembers(role: RoleName): ComposableResult {\n return compose(\n (async (): Promise => {\n const response = await fetch(`${apiUrl}/roles/${role}/members`);\n if (!response.ok) throw new Error('error.get_rolemembers_failed');\n return await response.json();\n })(),\n );\n}\n\nexport async function updateRoles(userId: string, roleIds: number[]) {\n fetch(`${apiUrl}/roles/user/${userId}`, {\n method: 'PUT',\n credentials: 'include',\n body: JSON.stringify(roleIds),\n headers: { 'Content-Type': 'application/json' },\n });\n}\n\nexport const updateUser = async (user: User & UserNotificationSettings) => {\n await fetch(apiUrl + '/users/current', {\n method: 'PUT',\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(user),\n });\n await refreshCurrentUser();\n};\n\nexport async function deleteUserAccount(includeB2C = false) {\n const response = await fetch(\n `${apiUrl}/users/current${includeB2C ? '?keepLoginHint=true' : ''}`,\n {\n method: 'DELETE',\n credentials: 'include',\n },\n );\n if (!response.ok) {\n console.error(\n `Error deleting user account: ${response.statusText}`,\n response,\n );\n throw new Error('error.delete_user_failed');\n }\n if (includeB2C) {\n window.location.assign(\n `${apiUrl}/auth/delete_user?rd=${encodeURIComponent(\n window.location.href.replace(window.location.origin, ''),\n )}`,\n );\n } else {\n window.location.assign('/');\n }\n}\n","\n\n\n\n\n","\n\n\n","\n\n","\n\n","\n\n","import { sleep } from '@/utilities/sleep';\nimport type { RouteRecordRaw, Router } from 'vue-router';\n\nlet router: Router | undefined = undefined;\n/** Used to avoid circular dependencies */\nexport function setRouter(r: Router) {\n router = r;\n}\n/** Use this to avoid circular dependencies */\nexport function getRouter(): Router | undefined {\n return router;\n}\nexport async function waitForRouterReady(): Promise {\n while (router === undefined) {\n await sleep(250);\n }\n}\n\nfunction flattenRoutes(\n items: (RouteRecordRaw & { fullPath?: string })[],\n parentPath = '',\n): (RouteRecordRaw & { fullPath?: string })[] {\n const result: typeof items = [];\n for (const item of items) {\n item.fullPath = item.path.startsWith('/')\n ? item.path\n : `${parentPath}/${item.path}`;\n result.push(item);\n if (item.children) {\n result.push(...flattenRoutes(item.children, item.fullPath));\n }\n }\n return result;\n}\nexport const hasOnlyOptionalParamsRe =\n /^(?:(?:\\/[^:/?\\n]*)|(\\/:[^/?\\n]*\\?))*$/m;\nexport let hardcodedStaticRoutes: (RouteRecordRaw & {\n fullPath?: string | undefined;\n sourceTitle?: string;\n})[] = [];\nexport function setStaticRoutes(routes: RouteRecordRaw[]) {\n hardcodedStaticRoutes = flattenRoutes(routes).filter(\n (i) => i.fullPath?.match(hasOnlyOptionalParamsRe) && !!i.meta?.title,\n );\n hardcodedStaticRoutes.forEach((i) => {\n i.sourceTitle = i.meta?.title;\n });\n}\n","/** Can be used to throw an error with extended info. The `cause`-part of the source-error will be saved in a \"details\"-property and logged in a collapsed group by `onErrorCaptured`. */\nexport class ExtendedError extends Error {\n details?: unknown;\n constructor(message?: string, source?: Error) {\n const _details = source?.cause;\n delete source?.cause;\n super(message, { cause: source });\n if (_details) {\n this.details = _details;\n }\n this.name = 'Gnist extended error';\n }\n}\n","\n\n\n","\n\n\n\n","\n\n\n","\n\n\n\n","import { type Ref } from 'vue';\nimport {\n type ComposableResult,\n composeWithRefresh,\n compose,\n} from './composable';\nimport type { Block, Favorite, Guid } from './types';\nimport { apiUrl } from '@/config';\n\nconst favoriteUrl = apiUrl + '/favorites';\n\nexport function useBlockFavorite(\n block: Ref,\n): ComposableResult {\n return composeWithRefresh(\n async () => (block.value ? getFavorite(block.value.blockId) : null),\n block,\n );\n}\n\nconst getFavorite = async (blockId: Guid): Promise => {\n const response = await fetch(`${favoriteUrl}/block/${blockId}`, {\n method: 'GET',\n credentials: 'include',\n });\n if (!response.ok || response.status === 204) return undefined;\n return await response.json();\n};\n\nexport function useFavorites(): ComposableResult {\n return compose(getFavorites());\n}\n\nconst getFavorites = async (): Promise => {\n return fetch(favoriteUrl, {\n method: 'GET',\n credentials: 'include',\n })\n .then((response) => response.json())\n .then((favorites) => favorites);\n};\n\nexport const addFavorite = async (blockId: Guid): Promise => {\n const resp = await fetch(favoriteUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify({ blockId }),\n });\n return await resp.json();\n};\n\nexport const removeFavorite = async (favoriteId: number): Promise => {\n fetch(`${favoriteUrl}/${favoriteId}`, {\n method: 'DELETE',\n credentials: 'include',\n });\n};\n\nexport const removeFavoriteByBlockId = async (blockId: Guid): Promise => {\n fetch(\n favoriteUrl + '?' + new URLSearchParams({ blockId: blockId.toString() }),\n {\n method: 'DELETE',\n headers: {},\n credentials: 'include',\n },\n );\n};\n\nexport const updateFavorite = async (\n blockId: Guid,\n notes: string,\n favoriteId: number,\n): Promise => {\n fetch(favoriteUrl + '/' + favoriteId, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify({ blockId, notes, favoriteId }),\n });\n};\n","\n\n\n","\n\n\n","import { apiUrl } from '@/config';\nimport { getCommentPagePath, SocialPageType } from '@/enums/SocialPageType';\nimport { nextTick, reactive, ref, watchEffect, type Ref } from 'vue';\nimport type {\n Commenter,\n Comment,\n Discussion,\n DiscussionAttributes,\n SortStrategy,\n ThreadComment,\n AssessmentType,\n CommentAssessment,\n commentPageId,\n MyThreadsComment,\n} from '@/api/commentoTypes';\nimport { compose, type ComposableResult } from '@/api/composable';\nimport type { BlockPage, User } from '@/api/types';\nimport { useCurrentUser } from './auth';\n\nconst commentsUrl = apiUrl + '/comments';\nconst blockPageUrl = apiUrl + '/comments/blocks';\nconst threadUrl = apiUrl + '/comments/thread';\n\ninterface CommonResponse {\n success: boolean;\n message?: string;\n}\n\ninterface ListResponse extends CommonResponse {\n attributes: DiscussionAttributes;\n commenters: { [key: string]: Commenter };\n comments: Comment[];\n // ignore: configuredOauths\n defaultSortPolicy: SortStrategy;\n isFrozen: boolean;\n requireIdentification: boolean;\n requireModeration: boolean;\n}\n\ninterface NewCommentResponse extends CommonResponse {\n commentHex: string;\n html: string;\n}\n\nasync function post(path: string, data: T) {\n const response = await fetch(`${commentsUrl}${path}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n mode: 'cors',\n body: JSON.stringify(data),\n referrerPolicy: 'origin-when-cross-origin',\n });\n if (!response.ok) throw response;\n return (await response.json()) as R;\n}\n\nexport async function commentsGet(\n discussionId: commentPageId,\n): Promise {\n const requestPayload = {\n discussionId,\n };\n\n const response: ListResponse = await post('/list', requestPayload);\n if (!response.success) throw response.message;\n\n const commenterMap = new Map(\n Object.entries(response.commenters),\n );\n const commentMap = new Map(\n response.comments.map((c) => [\n c.commentHex,\n reactive({\n ...c,\n children: [],\n commenter: commenterMap.get(c.userId),\n }),\n ]),\n );\n for (const comment of commentMap.values()) {\n if (comment.parentHex !== 'root') {\n comment.parent = commentMap.get(comment.parentHex);\n comment.parent?.children.push(comment);\n }\n }\n\n const allCommentEntries = [...commentMap.values()];\n const threads = allCommentEntries.filter((c) => !c.parent);\n const stickiedComment = response.attributes.stickyCommentHex\n ? commentMap.get(response.attributes.stickyCommentHex)\n : undefined;\n return {\n commenterMap,\n commentMap,\n stickiedComment,\n threads,\n attributes: response.attributes,\n defaultSortPolicy: response.defaultSortPolicy,\n };\n}\n\nexport async function commentNew(\n discussion: Discussion,\n parentHex: string,\n markdown: string,\n user: Pick,\n discussionId: commentPageId,\n discussionType: SocialPageType,\n): Promise {\n const json = {\n discussionId,\n parentHex,\n markdown,\n discussionType,\n commentPagePath: getCommentPagePath(discussionId, discussionType),\n };\n\n const response: NewCommentResponse = await post('/new', json);\n if (!response.success) throw response.message;\n\n const comment: ThreadComment = reactive({\n commentHex: response.commentHex,\n userId: user.id,\n commenter: {\n name: `${user.firstName} ${user.lastName}`,\n userId: user.id,\n },\n markdown: markdown,\n html: response.html,\n parentHex: 'root',\n score: 0,\n state: 'approved',\n direction: 0,\n creationDate: new Date().toISOString(),\n deleted: false,\n children: [],\n parent:\n parentHex !== 'root' ? discussion.commentMap.get(parentHex) : undefined,\n });\n\n if (comment.parent) {\n comment.parent.children.unshift(comment);\n } else {\n discussion.threads.unshift(comment);\n }\n nextTick(() => {\n const el = document.getElementById('comment-' + comment.commentHex);\n if (!el) return;\n el.classList.add('bg-gnist-yellow');\n el.classList.add('bg-opacity-25');\n setTimeout(() => {\n el.classList.remove('bg-gnist-yellow');\n el.classList.remove('bg-opacity-25');\n }, 5000);\n });\n return comment;\n}\n\n// TODO: Do we need this since all comments are auto-approved?\nexport async function commentApprove(): Promise {}\n// global.commentApprove = function(commentHex) {\n// const json = {\n// 'commenterToken': commenterTokenGet(),\n// 'commentHex': commentHex,\n// };\n\n// post(origin + '/api/comment/approve', json, function(resp) {\n// if (!resp.success) {\n// errorShow(resp.message);\n// return;\n// } else {\n// errorHide();\n// }\n\n// const card = $(ID_CARD + commentHex);\n// const name = $(ID_NAME + commentHex);\n// const tick = $(ID_APPROVE + commentHex);\n\n// classRemove(card, 'dark-card');\n// classRemove(name, 'flagged');\n// remove(tick);\n// });\n// };\n\nexport async function commentDelete(comment: Comment): Promise {\n const json = {\n commentHex: comment.commentHex,\n };\n\n const response: NewCommentResponse = await post('/delete', json);\n if (!response.success) throw response.message;\n\n comment.html = '[deleted]';\n comment.deleted = true;\n}\n\nexport async function commentModeratorDelete(\n comment: { commentHex: string; html: string; deleted?: boolean },\n deleteReason?: string,\n): Promise {\n const json = {\n commentHex: comment.commentHex,\n deleteReason,\n };\n\n const response: NewCommentResponse = await post('/moderator-delete', json);\n if (!response.success) throw response.message;\n\n comment.html = '[deleted]';\n comment.deleted = true;\n}\n\nexport async function commentModeratorVerify(\n comment: { commentHex: string },\n reason?: string,\n): Promise {\n const json = {\n commentHex: comment.commentHex,\n reason,\n };\n\n const response: CommonResponse = await post('/moderator-verify', json);\n if (!response.success) throw response.message;\n}\n\nexport async function commentDocownerDiscard(\n comment: { commentHex: string },\n endpoint: 'docowner-discard' | 'moderator-discard',\n reason?: string,\n): Promise {\n const json = {\n commentHex: comment.commentHex,\n reason,\n };\n\n const response: CommonResponse = await post(`/${endpoint}`, json);\n if (!response.success) throw response.message;\n}\n\nexport async function vote(\n comment: Comment,\n newDirection: -1 | 0 | 1,\n): Promise {\n const json = {\n commentHex: comment.commentHex,\n direction: newDirection,\n };\n\n const response: CommonResponse = await post('/vote', json);\n if (!response.success) throw response.message;\n\n comment.score = comment.score + newDirection - comment.direction;\n comment.direction = newDirection;\n}\n\nexport async function commentEdit(\n comment: Comment,\n markdown: string,\n discussionId: commentPageId,\n discussionType: SocialPageType,\n): Promise {\n const json = {\n commentHex: comment.commentHex,\n markdown: markdown,\n commentPagePath: getCommentPagePath(discussionId, discussionType),\n };\n\n const response: NewCommentResponse = await post('/edit', json);\n if (!response.success) throw response.message;\n\n comment.markdown = markdown;\n comment.html = response.html;\n}\n\nexport async function pageUpdate(\n discussion: Discussion,\n isLocked: boolean,\n stickyCommentHex: string,\n): Promise {\n const json = {\n discussionId: discussion.attributes.id,\n isLocked,\n stickyCommentHex,\n };\n\n const response: CommonResponse = await post('/update', json);\n if (!response.success) throw response.message;\n\n discussion.attributes.isLocked = isLocked;\n discussion.attributes.stickyCommentHex = stickyCommentHex;\n\n if (stickyCommentHex == 'none') {\n discussion.stickiedComment = undefined;\n } else {\n discussion.stickiedComment = discussion.commentMap.get(stickyCommentHex);\n }\n}\n\nexport function useDiscussion(\n discussionId: commentPageId,\n): ComposableResult {\n return compose(commentsGet(discussionId));\n}\n\nexport function useUnassessedComments(\n assessmentType: AssessmentType,\n includeAllBlocks = false,\n getNonBlockComments = false,\n): ComposableResult {\n return compose(\n getUnassessedComments(\n assessmentType,\n includeAllBlocks,\n getNonBlockComments,\n ),\n );\n}\nasync function getUnassessedComments(\n assessmentType: AssessmentType,\n includeAllBlocks: boolean,\n getNonBlockComments: boolean,\n): Promise {\n const response = await fetch(\n `${commentsUrl}/assess/${assessmentType}?includeAllBlocks=${includeAllBlocks}&getNonBlockComments=${getNonBlockComments}`,\n {\n method: 'GET',\n credentials: 'include',\n },\n );\n if (!response.ok) throw new Error('error.get_categories_failed');\n return response.json();\n}\n\nexport function useThreads(): Ref {\n const threads = ref([]);\n const userInfo = useCurrentUser();\n watchEffect(() => {\n if (userInfo.value) {\n getMyThreads().then((result) => (threads.value = result));\n }\n });\n return threads;\n}\n\nexport const getMyThreads = async (): Promise => {\n return fetch(threadUrl, {\n method: 'GET',\n credentials: 'include',\n })\n .then((response) => response.json())\n .then((comment) => comment);\n};\n\nconst getBlockPages = async (): Promise => {\n const response = await fetch(blockPageUrl, {\n method: 'GET',\n credentials: 'include',\n });\n if (!response.ok) throw new Error(await response.text());\n return response.json();\n};\n\nexport const useBlockPages = (): ComposableResult => {\n return compose(getBlockPages());\n};\n","export default \"__VITE_ASSET__Ds6Pzfm$__\"","import { apiUrl } from '@/config';\nimport { type ComposableResult, compose } from './composable';\nimport type {\n ChangeProps,\n Suggestion,\n SuggestionPage,\n SuggestionUserConnection,\n WorkItem,\n} from './types';\nimport { translateStringOrLocaleWithDefault } from '@/i18n';\nimport { computed, ref, watchEffect } from 'vue';\nimport type { VoteDirection } from '@/enums/VoteDirection';\n\nconst suggestionsUrl = apiUrl + '/suggestions';\nconst suggestionPageUrl = apiUrl + '/comments/suggestions';\n\nexport function useSuggestions(): ComposableResult {\n const composable = compose(getSuggestions());\n const translated = ref(null);\n watchEffect(() => {\n composable.error.value = composable.result.value?.error ?? null;\n translated.value =\n composable.result.value?.data.map((suggestion) =>\n translateSuggestion(suggestion),\n ) ?? null;\n });\n return { ...composable, result: translated };\n}\nexport function useSuggestion(\n suggestionId: number | undefined,\n includeWorkItem = false,\n): ComposableResult {\n const composable = compose(\n !suggestionId ? null : getSuggestion(suggestionId, includeWorkItem),\n );\n const data = computed({\n get: () => composable.result.value?.data ?? null,\n set: (newValue) => {\n if (!composable.result.value || !newValue) return;\n composable.result.value.data = newValue;\n },\n });\n watchEffect(() => {\n composable.error.value = composable.result.value?.error ?? null;\n });\n return { ...composable, result: data };\n}\n\ntype TranslatedSuggestion = ChangeProps<\n Suggestion,\n 'title' | 'description',\n string\n>;\nfunction translateSuggestion(suggestion: Suggestion): TranslatedSuggestion {\n return {\n ...suggestion,\n title: translateStringOrLocaleWithDefault(\n suggestion.title,\n 'language.unknownValue',\n ).value,\n description: translateStringOrLocaleWithDefault(\n suggestion.description,\n 'language.unknownValue',\n ).value,\n };\n}\n\nconst getSuggestions = async (): Promise<{\n data: Suggestion[];\n error?: Error;\n}> => {\n const response = await fetch(suggestionsUrl, {\n method: 'GET',\n credentials: 'include',\n });\n if (!response.ok) throw new Error('error.get_suggestions_failed');\n const suggestions: Suggestion[] = await response.json();\n const error = await addWorkItemsData(suggestions);\n return { data: suggestions, error };\n};\nasync function addWorkItemsData(\n suggestions: Suggestion[],\n): Promise {\n const workItemIds = suggestions\n .map((i) => i.workItem?.id ?? -1)\n .filter((i) => i !== -1);\n if (workItemIds.length == 0) return;\n try {\n const response = await fetch(`${suggestionsUrl}/workitems`, {\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify(workItemIds),\n headers: { 'Content-Type': 'application/json' },\n });\n const workItems: WorkItem[] = await response.json();\n for (const suggestion of suggestions) {\n suggestion.workItem = workItems.find(\n (i) => i.id === suggestion.workItem?.id,\n );\n }\n } catch (err) {\n (err as Error).message = 'error.get_workitems_failed';\n return err as Error;\n }\n}\n\nexport const useSuggestionPages = (): ComposableResult => {\n return compose(getSuggestionPages());\n};\n\nconst getSuggestionPages = async (): Promise => {\n const response = await fetch(suggestionPageUrl, {\n method: 'GET',\n credentials: 'include',\n });\n if (!response.ok) throw new Error(await response.text());\n return response.json();\n};\n\nconst getSuggestion = async (\n suggestionId: number,\n includeWorkItem: boolean,\n): Promise<{ data: Suggestion; error?: Error }> => {\n const search = includeWorkItem === true ? '?includeWorkItem=true' : '';\n const response = await fetch(`${suggestionsUrl}/${suggestionId}${search}`, {\n method: 'GET',\n credentials: 'include',\n });\n if (!response.ok) throw new Error('error.get_item_failed');\n const data: Suggestion = await response.json();\n const error =\n data.workItem !== undefined && data.workItem?.id === undefined\n ? new Error('error.get_workitems_failed')\n : undefined;\n return { data, error };\n};\nexport async function updateSuggestion(item: Suggestion) {\n fetch(`${suggestionsUrl}/${item.id}`, {\n method: 'PUT',\n credentials: 'include',\n body: JSON.stringify(item),\n headers: { 'Content-Type': 'application/json' },\n });\n}\nexport async function closeSuggestion(suggestionId: number) {\n fetch(`${suggestionsUrl}/${suggestionId}/close`, {\n method: 'PUT',\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n });\n}\nexport async function createSuggestion(\n item: Omit,\n): Promise {\n const resp = await fetch(`${suggestionsUrl}`, {\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify(item),\n headers: { 'Content-Type': 'application/json' },\n });\n return resp.json();\n}\n\nexport async function deleteSuggestion(suggestionId: number) {\n fetch(`${suggestionsUrl}/${suggestionId}`, {\n method: 'DELETE',\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n });\n}\n\nexport const updateVote = async (\n suggestionId: number,\n direction: VoteDirection,\n) => {\n const resp = await fetch(\n `${suggestionsUrl}/${suggestionId}/vote?direction=${direction}`,\n {\n method: 'PUT',\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n },\n );\n if (!resp.ok) throw new Error('error.update_vote_failed');\n return await resp.json();\n};\nexport const updateSubscription = async (\n suggestionId: number,\n subscribe: boolean,\n): Promise => {\n const resp = await fetch(\n `${suggestionsUrl}/${suggestionId}/vote?subscribe=${subscribe}`,\n {\n method: 'PUT',\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n },\n );\n if (!resp.ok) throw new Error('error.update_subscription_failed');\n return await resp.json();\n};\n\nexport const connectWorkItem = async (\n suggestion: Pick,\n suggestionId: number | undefined,\n): Promise => {\n const endpoint =\n suggestionId === undefined\n ? 'from_devops'\n : `${suggestionId}/connect_devops`;\n const response = await fetch(`${suggestionsUrl}/${endpoint}`, {\n method: suggestionId === undefined ? 'POST' : 'PUT',\n credentials: 'include',\n body: JSON.stringify(suggestion),\n headers: { 'Content-Type': 'application/json' },\n });\n if (!response.ok) throw new Error('error.get_item_failed');\n return await response.json();\n};\nexport const disconnectWorkItem = async (\n suggestion: Pick,\n suggestionId: number,\n): Promise => {\n const response = await fetch(\n `${suggestionsUrl}/${suggestionId}/disconnect_devops`,\n {\n method: 'PUT',\n credentials: 'include',\n body: JSON.stringify(suggestion),\n headers: { 'Content-Type': 'application/json' },\n },\n );\n if (!response.ok) throw new Error('error.get_item_failed');\n return await response.json();\n};\nexport const createWorkItem = async (\n data: Pick,\n): Promise => {\n const response = await fetch(`${suggestionsUrl}/workitems/create`, {\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify(data),\n headers: { 'Content-Type': 'application/json' },\n });\n if (!response.ok) throw new Error('error.create_devops_failed');\n return await response.json();\n};\n\nexport const getWorkItemFromSuggestion = async (\n suggestionId: number,\n): Promise => {\n const response = await fetch(\n `${suggestionsUrl}/workitems/from_suggestion/${suggestionId}`,\n {\n method: 'GET',\n credentials: 'include',\n },\n );\n if (!response.ok) throw new Error('error.get_item_failed');\n if (response.status === 204) return undefined;\n return await response.json();\n};\n","\n\n\n\n\n","/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument) {\n const argStr = Object.prototype.toString.call(argument);\n\n // Clone the date\n if (\n argument instanceof Date ||\n (typeof argument === \"object\" && argStr === \"[object Date]\")\n ) {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new argument.constructor(+argument);\n } else if (\n typeof argument === \"number\" ||\n argStr === \"[object Number]\" ||\n typeof argument === \"string\" ||\n argStr === \"[object String]\"\n ) {\n // TODO: Can we get rid of as?\n return new Date(argument);\n } else {\n // TODO: Can we get rid of as?\n return new Date(NaN);\n }\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from 'date-fns'\n *\n * // A function that clones a date preserving the original type\n * function cloneDate Sun Feb 01 2015 00:00:00\n *\n * // Add one month to 30 January 2023:\n * const result = addMonths(new Date(2023, 0, 30), 1)\n * //=> Tue Feb 28 2023 00:00:00\n */\nexport function addMonths(date, amount) {\n const _date = toDate(date);\n if (isNaN(amount)) return constructFrom(date, NaN);\n if (!amount) {\n // If 0 months, no-op to avoid changing times in the hour before end of DST\n return _date;\n }\n const dayOfMonth = _date.getDate();\n\n // The JS Date object supports date math by accepting out-of-bounds values for\n // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and\n // new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we\n // want except that dates will wrap around the end of a month, meaning that\n // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So\n // we'll default to the end of the desired month by adding 1 to the desired\n // month and using a date of 0 to back up one day to the end of the desired\n // month.\n const endOfDesiredMonth = constructFrom(date, _date.getTime());\n endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0);\n const daysInMonth = endOfDesiredMonth.getDate();\n if (dayOfMonth >= daysInMonth) {\n // If we're already at the end of the month, then this is the correct date\n // and we're done.\n return endOfDesiredMonth;\n } else {\n // Otherwise, we now know that setting the original day-of-month value won't\n // cause an overflow, so set the desired day-of-month. Note that we can't\n // just set the date of `endOfDesiredMonth` because that object may have had\n // its time changed in the unusual case where where a DST transition was on\n // the last day of the month and its local time was in the hour skipped or\n // repeated next to a DST transition. So we use `date` instead which is\n // guaranteed to still have the original time.\n _date.setFullYear(\n endOfDesiredMonth.getFullYear(),\n endOfDesiredMonth.getMonth(),\n dayOfMonth,\n );\n return _date;\n }\n}\n\n// Fallback for modularized imports:\nexport default addMonths;\n","/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n * return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occures every 4 years, except for years that are divisable by 100 and not divisable by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n","let defaultOptions = {};\n\nexport function getDefaultOptions() {\n return defaultOptions;\n}\n\nexport function setDefaultOptions(newOptions) {\n defaultOptions = newOptions;\n}\n","import { toDate } from \"./toDate.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link startOfWeek} function options.\n */\n\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfWeek(date, options) {\n const defaultOptions = getDefaultOptions();\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const _date = toDate(date);\n const day = _date.getDay();\n const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n\n _date.setDate(_date.getDate() - diff);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeek;\n","import { startOfWeek } from \"./startOfWeek.mjs\";\n\n/**\n * @name startOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of an ISO week\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * const result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfISOWeek(date) {\n return startOfWeek(date, { weekStartsOn: 1 });\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeek;\n","import { constructFrom } from \"./constructFrom.mjs\";\nimport { startOfISOWeek } from \"./startOfISOWeek.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name getISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n *\n * @returns The ISO week-numbering year\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * const result = getISOWeekYear(new Date(2005, 0, 2))\n * //=> 2004\n */\nexport function getISOWeekYear(date) {\n const _date = toDate(date);\n const year = _date.getFullYear();\n\n const fourthOfJanuaryOfNextYear = constructFrom(date, 0);\n fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);\n fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);\n\n const fourthOfJanuaryOfThisYear = constructFrom(date, 0);\n fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);\n fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);\n\n if (_date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (_date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getISOWeekYear;\n","import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of a day\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport function startOfDay(date) {\n const _date = toDate(date);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfDay;\n","import { toDate } from \"../toDate.mjs\";\n\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport function getTimezoneOffsetInMilliseconds(date) {\n const _date = toDate(date);\n const utcDate = new Date(\n Date.UTC(\n _date.getFullYear(),\n _date.getMonth(),\n _date.getDate(),\n _date.getHours(),\n _date.getMinutes(),\n _date.getSeconds(),\n _date.getMilliseconds(),\n ),\n );\n utcDate.setUTCFullYear(_date.getFullYear());\n return +date - +utcDate;\n}\n","import { millisecondsInDay } from \"./constants.mjs\";\nimport { startOfDay } from \"./startOfDay.mjs\";\nimport { getTimezoneOffsetInMilliseconds } from \"./_lib/getTimezoneOffsetInMilliseconds.mjs\";\n\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateLeft - The later date\n * @param dateRight - The earlier date\n *\n * @returns The number of calendar days\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInCalendarDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInCalendarDays(\n * new Date(2011, 6, 3, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\nexport function differenceInCalendarDays(dateLeft, dateRight) {\n const startOfDayLeft = startOfDay(dateLeft);\n const startOfDayRight = startOfDay(dateRight);\n\n const timestampLeft =\n +startOfDayLeft - getTimezoneOffsetInMilliseconds(startOfDayLeft);\n const timestampRight =\n +startOfDayRight - getTimezoneOffsetInMilliseconds(startOfDayRight);\n\n // Round the number of days to the nearest integer because the number of\n // milliseconds in a day is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round((timestampLeft - timestampRight) / millisecondsInDay);\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarDays;\n","import { getISOWeekYear } from \"./getISOWeekYear.mjs\";\nimport { startOfISOWeek } from \"./startOfISOWeek.mjs\";\nimport { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name startOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of an ISO week-numbering year\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * const result = startOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfISOWeekYear(date) {\n const year = getISOWeekYear(date);\n const fourthOfJanuary = constructFrom(date, 0);\n fourthOfJanuary.setFullYear(year, 0, 4);\n fourthOfJanuary.setHours(0, 0, 0, 0);\n return startOfISOWeek(fourthOfJanuary);\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeekYear;\n","/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param value - The value to check\n *\n * @returns True if the given value is a date\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport function isDate(value) {\n return (\n value instanceof Date ||\n (typeof value === \"object\" &&\n Object.prototype.toString.call(value) === \"[object Date]\")\n );\n}\n\n// Fallback for modularized imports:\nexport default isDate;\n","import { isDate } from \"./isDate.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate](https://date-fns.org/docs/toDate)\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to check\n *\n * @returns The date is valid\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nexport function isValid(date) {\n if (!isDate(date) && typeof date !== \"number\") {\n return false;\n }\n const _date = toDate(date);\n return !isNaN(Number(_date));\n}\n\n// Fallback for modularized imports:\nexport default isValid;\n","import { toDate } from \"./toDate.mjs\";\nimport { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of a year\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\nexport function startOfYear(date) {\n const cleanDate = toDate(date);\n const _date = constructFrom(date, 0);\n _date.setFullYear(cleanDate.getFullYear(), 0, 1);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfYear;\n","const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"less than a second\",\n other: \"less than {{count}} seconds\",\n },\n\n xSeconds: {\n one: \"1 second\",\n other: \"{{count}} seconds\",\n },\n\n halfAMinute: \"half a minute\",\n\n lessThanXMinutes: {\n one: \"less than a minute\",\n other: \"less than {{count}} minutes\",\n },\n\n xMinutes: {\n one: \"1 minute\",\n other: \"{{count}} minutes\",\n },\n\n aboutXHours: {\n one: \"about 1 hour\",\n other: \"about {{count}} hours\",\n },\n\n xHours: {\n one: \"1 hour\",\n other: \"{{count}} hours\",\n },\n\n xDays: {\n one: \"1 day\",\n other: \"{{count}} days\",\n },\n\n aboutXWeeks: {\n one: \"about 1 week\",\n other: \"about {{count}} weeks\",\n },\n\n xWeeks: {\n one: \"1 week\",\n other: \"{{count}} weeks\",\n },\n\n aboutXMonths: {\n one: \"about 1 month\",\n other: \"about {{count}} months\",\n },\n\n xMonths: {\n one: \"1 month\",\n other: \"{{count}} months\",\n },\n\n aboutXYears: {\n one: \"about 1 year\",\n other: \"about {{count}} years\",\n },\n\n xYears: {\n one: \"1 year\",\n other: \"{{count}} years\",\n },\n\n overXYears: {\n one: \"over 1 year\",\n other: \"over {{count}} years\",\n },\n\n almostXYears: {\n one: \"almost 1 year\",\n other: \"almost {{count}} years\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n let result;\n\n const tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === \"string\") {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace(\"{{count}}\", count.toString());\n }\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return \"in \" + result;\n } else {\n return result + \" ago\";\n }\n }\n\n return result;\n};\n","export function buildFormatLongFn(args) {\n return (options = {}) => {\n // TODO: Remove String()\n const width = options.width ? String(options.width) : args.defaultWidth;\n const format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.mjs\";\n\nconst dateFormats = {\n full: \"EEEE, MMMM do, y\",\n long: \"MMMM do, y\",\n medium: \"MMM d, y\",\n short: \"MM/dd/yyyy\",\n};\n\nconst timeFormats = {\n full: \"h:mm:ss a zzzz\",\n long: \"h:mm:ss a z\",\n medium: \"h:mm:ss a\",\n short: \"h:mm a\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) =>\n formatRelativeLocale[token];\n","/* eslint-disable no-unused-vars */\n\n/**\n * The localize function argument callback which allows to convert raw value to\n * the actual type.\n *\n * @param value - The value to convert\n *\n * @returns The converted value\n */\n\n/**\n * The map of localized values for each width.\n */\n\n/**\n * The index type of the locale unit value. It types conversion of units of\n * values that don't start at 0 (i.e. quarters).\n */\n\n/**\n * Converts the unit value to the tuple of values.\n */\n\n/**\n * The tuple of localized era values. The first element represents BC,\n * the second element represents AD.\n */\n\n/**\n * The tuple of localized quarter values. The first element represents Q1.\n */\n\n/**\n * The tuple of localized day values. The first element represents Sunday.\n */\n\n/**\n * The tuple of localized month values. The first element represents January.\n */\n\nexport function buildLocalizeFn(args) {\n return (value, options) => {\n const context = options?.context ? String(options.context) : \"standalone\";\n\n let valuesArray;\n if (context === \"formatting\" && args.formattingValues) {\n const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n const width = options?.width ? String(options.width) : defaultWidth;\n\n valuesArray =\n args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n const defaultWidth = args.defaultWidth;\n const width = options?.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[width] || args.values[defaultWidth];\n }\n const index = args.argumentCallback ? args.argumentCallback(value) : value;\n\n // @ts-expect-error - For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n return valuesArray[index];\n };\n}\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.mjs\";\n\nconst eraValues = {\n narrow: [\"B\", \"A\"],\n abbreviated: [\"BC\", \"AD\"],\n wide: [\"Before Christ\", \"Anno Domini\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n wide: [\"1st quarter\", \"2nd quarter\", \"3rd quarter\", \"4th quarter\"],\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nconst monthValues = {\n narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n abbreviated: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n\n wide: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"],\n short: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n abbreviated: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n wide: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n};\n\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber, _options) => {\n const number = Number(dirtyNumber);\n\n // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n const rem100 = number % 100;\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + \"st\";\n case 2:\n return number + \"nd\";\n case 3:\n return number + \"rd\";\n }\n }\n return number + \"th\";\n};\n\nexport const localize = {\n ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => quarter - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","export function buildMatchFn(args) {\n return (string, options = {}) => {\n const width = options.width;\n\n const matchPattern =\n (width && args.matchPatterns[width]) ||\n args.matchPatterns[args.defaultMatchWidth];\n const matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n const matchedString = matchResult[0];\n\n const parsePatterns =\n (width && args.parsePatterns[width]) ||\n args.parsePatterns[args.defaultParseWidth];\n\n const key = Array.isArray(parsePatterns)\n ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString))\n : // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type\n findKey(parsePatterns, (pattern) => pattern.test(matchedString));\n\n let value;\n\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type\n options.valueCallback(value)\n : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n\nfunction findKey(object, predicate) {\n for (const key in object) {\n if (\n Object.prototype.hasOwnProperty.call(object, key) &&\n predicate(object[key])\n ) {\n return key;\n }\n }\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (let key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n return undefined;\n}\n","export function buildMatchPatternFn(args) {\n return (string, options = {}) => {\n const matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n const matchedString = matchResult[0];\n\n const parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n let value = args.valueCallback\n ? args.valueCallback(parseResult[0])\n : parseResult[0];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type\n value = options.valueCallback ? options.valueCallback(value) : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.mjs\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.mjs\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i,\n};\nconst parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^j/i,\n /^f/i,\n /^m/i,\n /^a/i,\n /^m/i,\n /^j/i,\n /^j/i,\n /^a/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n\n any: [\n /^ja/i,\n /^f/i,\n /^mar/i,\n /^ap/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^au/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i,\n};\nconst parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { formatDistance } from \"./en-US/_lib/formatDistance.mjs\";\nimport { formatLong } from \"./en-US/_lib/formatLong.mjs\";\nimport { formatRelative } from \"./en-US/_lib/formatRelative.mjs\";\nimport { localize } from \"./en-US/_lib/localize.mjs\";\nimport { match } from \"./en-US/_lib/match.mjs\";\n\n/**\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp](https://github.com/kossnocorp)\n * @author Lesha Koss [@leshakoss](https://github.com/leshakoss)\n */\nexport const enUS = {\n code: \"en-US\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default enUS;\n","import { differenceInCalendarDays } from \"./differenceInCalendarDays.mjs\";\nimport { startOfYear } from \"./startOfYear.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name getDayOfYear\n * @category Day Helpers\n * @summary Get the day of the year of the given date.\n *\n * @description\n * Get the day of the year of the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n *\n * @returns The day of year\n *\n * @example\n * // Which day of the year is 2 July 2014?\n * const result = getDayOfYear(new Date(2014, 6, 2))\n * //=> 183\n */\nexport function getDayOfYear(date) {\n const _date = toDate(date);\n const diff = differenceInCalendarDays(_date, startOfYear(_date));\n const dayOfYear = diff + 1;\n return dayOfYear;\n}\n\n// Fallback for modularized imports:\nexport default getDayOfYear;\n","import { millisecondsInWeek } from \"./constants.mjs\";\nimport { startOfISOWeek } from \"./startOfISOWeek.mjs\";\nimport { startOfISOWeekYear } from \"./startOfISOWeekYear.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name getISOWeek\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n *\n * @returns The ISO week\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * const result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\nexport function getISOWeek(date) {\n const _date = toDate(date);\n const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getISOWeek;\n","import { constructFrom } from \"./constructFrom.mjs\";\nimport { startOfWeek } from \"./startOfWeek.mjs\";\nimport { toDate } from \"./toDate.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link getWeekYear} function options.\n */\n\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n * @param options - An object with options.\n *\n * @returns The local week-numbering year\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * const result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * const result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * const result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\nexport function getWeekYear(date, options) {\n const _date = toDate(date);\n const year = _date.getFullYear();\n\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const firstWeekOfNextYear = constructFrom(date, 0);\n firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);\n firstWeekOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfWeek(firstWeekOfNextYear, options);\n\n const firstWeekOfThisYear = constructFrom(date, 0);\n firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);\n firstWeekOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfWeek(firstWeekOfThisYear, options);\n\n if (_date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (_date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getWeekYear;\n","import { constructFrom } from \"./constructFrom.mjs\";\nimport { getWeekYear } from \"./getWeekYear.mjs\";\nimport { startOfWeek } from \"./startOfWeek.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link startOfWeekYear} function options.\n */\n\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week-numbering year\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * const result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * const result = startOfWeekYear(new Date(2005, 6, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfWeekYear(date, options) {\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const year = getWeekYear(date, options);\n const firstWeek = constructFrom(date, 0);\n firstWeek.setFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setHours(0, 0, 0, 0);\n const _date = startOfWeek(firstWeek, options);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeekYear;\n","import { millisecondsInWeek } from \"./constants.mjs\";\nimport { startOfWeek } from \"./startOfWeek.mjs\";\nimport { startOfWeekYear } from \"./startOfWeekYear.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * The {@link getWeek} function options.\n */\n\n/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The week\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * const result = getWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * const result = getWeek(new Date(2005, 0, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> 53\n */\n\nexport function getWeek(date, options) {\n const _date = toDate(date);\n const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getWeek;\n","export function addLeadingZeros(number, targetLength) {\n const sign = number < 0 ? \"-\" : \"\";\n const output = Math.abs(number).toString().padStart(targetLength, \"0\");\n return sign + output;\n}\n","import { addLeadingZeros } from \"../addLeadingZeros.mjs\";\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | |\n * | d | Day of month | D | |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | m | Minute | M | Month |\n * | s | Second | S | Fraction of second |\n * | y | Year (abs) | Y | |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nexport const lightFormatters = {\n // Year\n y(date, token) {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n const signedYear = date.getFullYear();\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const year = signedYear > 0 ? signedYear : 1 - signedYear;\n return addLeadingZeros(token === \"yy\" ? year % 100 : year, token.length);\n },\n\n // Month\n M(date, token) {\n const month = date.getMonth();\n return token === \"M\" ? String(month + 1) : addLeadingZeros(month + 1, 2);\n },\n\n // Day of the month\n d(date, token) {\n return addLeadingZeros(date.getDate(), token.length);\n },\n\n // AM or PM\n a(date, token) {\n const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? \"pm\" : \"am\";\n\n switch (token) {\n case \"a\":\n case \"aa\":\n return dayPeriodEnumValue.toUpperCase();\n case \"aaa\":\n return dayPeriodEnumValue;\n case \"aaaaa\":\n return dayPeriodEnumValue[0];\n case \"aaaa\":\n default:\n return dayPeriodEnumValue === \"am\" ? \"a.m.\" : \"p.m.\";\n }\n },\n\n // Hour [1-12]\n h(date, token) {\n return addLeadingZeros(date.getHours() % 12 || 12, token.length);\n },\n\n // Hour [0-23]\n H(date, token) {\n return addLeadingZeros(date.getHours(), token.length);\n },\n\n // Minute\n m(date, token) {\n return addLeadingZeros(date.getMinutes(), token.length);\n },\n\n // Second\n s(date, token) {\n return addLeadingZeros(date.getSeconds(), token.length);\n },\n\n // Fraction of second\n S(date, token) {\n const numberOfDigits = token.length;\n const milliseconds = date.getMilliseconds();\n const fractionalSeconds = Math.trunc(\n milliseconds * Math.pow(10, numberOfDigits - 3),\n );\n return addLeadingZeros(fractionalSeconds, token.length);\n },\n};\n","import { getDayOfYear } from \"../../getDayOfYear.mjs\";\nimport { getISOWeek } from \"../../getISOWeek.mjs\";\nimport { getISOWeekYear } from \"../../getISOWeekYear.mjs\";\nimport { getWeek } from \"../../getWeek.mjs\";\nimport { getWeekYear } from \"../../getWeekYear.mjs\";\nimport { addLeadingZeros } from \"../addLeadingZeros.mjs\";\nimport { lightFormatters } from \"./lightFormatters.mjs\";\n\nconst dayPeriodEnum = {\n am: \"am\",\n pm: \"pm\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n};\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nexport const formatters = {\n // Era\n G: function (date, token, localize) {\n const era = date.getFullYear() > 0 ? 1 : 0;\n switch (token) {\n // AD, BC\n case \"G\":\n case \"GG\":\n case \"GGG\":\n return localize.era(era, { width: \"abbreviated\" });\n // A, B\n case \"GGGGG\":\n return localize.era(era, { width: \"narrow\" });\n // Anno Domini, Before Christ\n case \"GGGG\":\n default:\n return localize.era(era, { width: \"wide\" });\n }\n },\n\n // Year\n y: function (date, token, localize) {\n // Ordinal number\n if (token === \"yo\") {\n const signedYear = date.getFullYear();\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const year = signedYear > 0 ? signedYear : 1 - signedYear;\n return localize.ordinalNumber(year, { unit: \"year\" });\n }\n\n return lightFormatters.y(date, token);\n },\n\n // Local week-numbering year\n Y: function (date, token, localize, options) {\n const signedWeekYear = getWeekYear(date, options);\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear;\n\n // Two digit year\n if (token === \"YY\") {\n const twoDigitYear = weekYear % 100;\n return addLeadingZeros(twoDigitYear, 2);\n }\n\n // Ordinal number\n if (token === \"Yo\") {\n return localize.ordinalNumber(weekYear, { unit: \"year\" });\n }\n\n // Padding\n return addLeadingZeros(weekYear, token.length);\n },\n\n // ISO week-numbering year\n R: function (date, token) {\n const isoWeekYear = getISOWeekYear(date);\n\n // Padding\n return addLeadingZeros(isoWeekYear, token.length);\n },\n\n // Extended year. This is a single number designating the year of this calendar system.\n // The main difference between `y` and `u` localizers are B.C. years:\n // | Year | `y` | `u` |\n // |------|-----|-----|\n // | AC 1 | 1 | 1 |\n // | BC 1 | 1 | 0 |\n // | BC 2 | 2 | -1 |\n // Also `yy` always returns the last two digits of a year,\n // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n u: function (date, token) {\n const year = date.getFullYear();\n return addLeadingZeros(year, token.length);\n },\n\n // Quarter\n Q: function (date, token, localize) {\n const quarter = Math.ceil((date.getMonth() + 1) / 3);\n switch (token) {\n // 1, 2, 3, 4\n case \"Q\":\n return String(quarter);\n // 01, 02, 03, 04\n case \"QQ\":\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n case \"Qo\":\n return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"QQQ\":\n return localize.quarter(quarter, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"QQQQQ\":\n return localize.quarter(quarter, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"QQQQ\":\n default:\n return localize.quarter(quarter, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Stand-alone quarter\n q: function (date, token, localize) {\n const quarter = Math.ceil((date.getMonth() + 1) / 3);\n switch (token) {\n // 1, 2, 3, 4\n case \"q\":\n return String(quarter);\n // 01, 02, 03, 04\n case \"qq\":\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n case \"qo\":\n return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"qqq\":\n return localize.quarter(quarter, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"qqqqq\":\n return localize.quarter(quarter, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"qqqq\":\n default:\n return localize.quarter(quarter, {\n width: \"wide\",\n context: \"standalone\",\n });\n }\n },\n\n // Month\n M: function (date, token, localize) {\n const month = date.getMonth();\n switch (token) {\n case \"M\":\n case \"MM\":\n return lightFormatters.M(date, token);\n // 1st, 2nd, ..., 12th\n case \"Mo\":\n return localize.ordinalNumber(month + 1, { unit: \"month\" });\n // Jan, Feb, ..., Dec\n case \"MMM\":\n return localize.month(month, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // J, F, ..., D\n case \"MMMMM\":\n return localize.month(month, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // January, February, ..., December\n case \"MMMM\":\n default:\n return localize.month(month, { width: \"wide\", context: \"formatting\" });\n }\n },\n\n // Stand-alone month\n L: function (date, token, localize) {\n const month = date.getMonth();\n switch (token) {\n // 1, 2, ..., 12\n case \"L\":\n return String(month + 1);\n // 01, 02, ..., 12\n case \"LL\":\n return addLeadingZeros(month + 1, 2);\n // 1st, 2nd, ..., 12th\n case \"Lo\":\n return localize.ordinalNumber(month + 1, { unit: \"month\" });\n // Jan, Feb, ..., Dec\n case \"LLL\":\n return localize.month(month, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // J, F, ..., D\n case \"LLLLL\":\n return localize.month(month, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // January, February, ..., December\n case \"LLLL\":\n default:\n return localize.month(month, { width: \"wide\", context: \"standalone\" });\n }\n },\n\n // Local week of year\n w: function (date, token, localize, options) {\n const week = getWeek(date, options);\n\n if (token === \"wo\") {\n return localize.ordinalNumber(week, { unit: \"week\" });\n }\n\n return addLeadingZeros(week, token.length);\n },\n\n // ISO week of year\n I: function (date, token, localize) {\n const isoWeek = getISOWeek(date);\n\n if (token === \"Io\") {\n return localize.ordinalNumber(isoWeek, { unit: \"week\" });\n }\n\n return addLeadingZeros(isoWeek, token.length);\n },\n\n // Day of the month\n d: function (date, token, localize) {\n if (token === \"do\") {\n return localize.ordinalNumber(date.getDate(), { unit: \"date\" });\n }\n\n return lightFormatters.d(date, token);\n },\n\n // Day of year\n D: function (date, token, localize) {\n const dayOfYear = getDayOfYear(date);\n\n if (token === \"Do\") {\n return localize.ordinalNumber(dayOfYear, { unit: \"dayOfYear\" });\n }\n\n return addLeadingZeros(dayOfYear, token.length);\n },\n\n // Day of week\n E: function (date, token, localize) {\n const dayOfWeek = date.getDay();\n switch (token) {\n // Tue\n case \"E\":\n case \"EE\":\n case \"EEE\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"EEEEE\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"EEEEEE\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"EEEE\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Local day of week\n e: function (date, token, localize, options) {\n const dayOfWeek = date.getDay();\n const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n switch (token) {\n // Numerical value (Nth day of week with current locale or weekStartsOn)\n case \"e\":\n return String(localDayOfWeek);\n // Padded numerical value\n case \"ee\":\n return addLeadingZeros(localDayOfWeek, 2);\n // 1st, 2nd, ..., 7th\n case \"eo\":\n return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n case \"eee\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"eeeee\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"eeeeee\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"eeee\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Stand-alone local day of week\n c: function (date, token, localize, options) {\n const dayOfWeek = date.getDay();\n const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n switch (token) {\n // Numerical value (same as in `e`)\n case \"c\":\n return String(localDayOfWeek);\n // Padded numerical value\n case \"cc\":\n return addLeadingZeros(localDayOfWeek, token.length);\n // 1st, 2nd, ..., 7th\n case \"co\":\n return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n case \"ccc\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // T\n case \"ccccc\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // Tu\n case \"cccccc\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"standalone\",\n });\n // Tuesday\n case \"cccc\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"standalone\",\n });\n }\n },\n\n // ISO day of week\n i: function (date, token, localize) {\n const dayOfWeek = date.getDay();\n const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n switch (token) {\n // 2\n case \"i\":\n return String(isoDayOfWeek);\n // 02\n case \"ii\":\n return addLeadingZeros(isoDayOfWeek, token.length);\n // 2nd\n case \"io\":\n return localize.ordinalNumber(isoDayOfWeek, { unit: \"day\" });\n // Tue\n case \"iii\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"iiiii\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"iiiiii\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"iiii\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // AM or PM\n a: function (date, token, localize) {\n const hours = date.getHours();\n const dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n\n switch (token) {\n case \"a\":\n case \"aa\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"aaa\":\n return localize\n .dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n })\n .toLowerCase();\n case \"aaaaa\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"aaaa\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // AM, PM, midnight, noon\n b: function (date, token, localize) {\n const hours = date.getHours();\n let dayPeriodEnumValue;\n if (hours === 12) {\n dayPeriodEnumValue = dayPeriodEnum.noon;\n } else if (hours === 0) {\n dayPeriodEnumValue = dayPeriodEnum.midnight;\n } else {\n dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n }\n\n switch (token) {\n case \"b\":\n case \"bb\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"bbb\":\n return localize\n .dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n })\n .toLowerCase();\n case \"bbbbb\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"bbbb\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // in the morning, in the afternoon, in the evening, at night\n B: function (date, token, localize) {\n const hours = date.getHours();\n let dayPeriodEnumValue;\n if (hours >= 17) {\n dayPeriodEnumValue = dayPeriodEnum.evening;\n } else if (hours >= 12) {\n dayPeriodEnumValue = dayPeriodEnum.afternoon;\n } else if (hours >= 4) {\n dayPeriodEnumValue = dayPeriodEnum.morning;\n } else {\n dayPeriodEnumValue = dayPeriodEnum.night;\n }\n\n switch (token) {\n case \"B\":\n case \"BB\":\n case \"BBB\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"BBBBB\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"BBBB\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Hour [1-12]\n h: function (date, token, localize) {\n if (token === \"ho\") {\n let hours = date.getHours() % 12;\n if (hours === 0) hours = 12;\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return lightFormatters.h(date, token);\n },\n\n // Hour [0-23]\n H: function (date, token, localize) {\n if (token === \"Ho\") {\n return localize.ordinalNumber(date.getHours(), { unit: \"hour\" });\n }\n\n return lightFormatters.H(date, token);\n },\n\n // Hour [0-11]\n K: function (date, token, localize) {\n const hours = date.getHours() % 12;\n\n if (token === \"Ko\") {\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n\n // Hour [1-24]\n k: function (date, token, localize) {\n let hours = date.getHours();\n if (hours === 0) hours = 24;\n\n if (token === \"ko\") {\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n\n // Minute\n m: function (date, token, localize) {\n if (token === \"mo\") {\n return localize.ordinalNumber(date.getMinutes(), { unit: \"minute\" });\n }\n\n return lightFormatters.m(date, token);\n },\n\n // Second\n s: function (date, token, localize) {\n if (token === \"so\") {\n return localize.ordinalNumber(date.getSeconds(), { unit: \"second\" });\n }\n\n return lightFormatters.s(date, token);\n },\n\n // Fraction of second\n S: function (date, token) {\n return lightFormatters.S(date, token);\n },\n\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n if (timezoneOffset === 0) {\n return \"Z\";\n }\n\n switch (token) {\n // Hours and optional minutes\n case \"X\":\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n case \"XXXX\":\n case \"XX\": // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n case \"XXXXX\":\n case \"XXX\": // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Hours and optional minutes\n case \"x\":\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n case \"xxxx\":\n case \"xx\": // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n case \"xxxxx\":\n case \"xxx\": // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (GMT)\n O: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Short\n case \"O\":\n case \"OO\":\n case \"OOO\":\n return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n // Long\n case \"OOOO\":\n default:\n return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (specific non-location)\n z: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Short\n case \"z\":\n case \"zz\":\n case \"zzz\":\n return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n // Long\n case \"zzzz\":\n default:\n return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Seconds timestamp\n t: function (date, token, _localize) {\n const timestamp = Math.trunc(date.getTime() / 1000);\n return addLeadingZeros(timestamp, token.length);\n },\n\n // Milliseconds timestamp\n T: function (date, token, _localize) {\n const timestamp = date.getTime();\n return addLeadingZeros(timestamp, token.length);\n },\n};\n\nfunction formatTimezoneShort(offset, delimiter = \"\") {\n const sign = offset > 0 ? \"-\" : \"+\";\n const absOffset = Math.abs(offset);\n const hours = Math.trunc(absOffset / 60);\n const minutes = absOffset % 60;\n if (minutes === 0) {\n return sign + String(hours);\n }\n return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, delimiter) {\n if (offset % 60 === 0) {\n const sign = offset > 0 ? \"-\" : \"+\";\n return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n }\n return formatTimezone(offset, delimiter);\n}\n\nfunction formatTimezone(offset, delimiter = \"\") {\n const sign = offset > 0 ? \"-\" : \"+\";\n const absOffset = Math.abs(offset);\n const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2);\n const minutes = addLeadingZeros(absOffset % 60, 2);\n return sign + hours + delimiter + minutes;\n}\n","const dateLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"P\":\n return formatLong.date({ width: \"short\" });\n case \"PP\":\n return formatLong.date({ width: \"medium\" });\n case \"PPP\":\n return formatLong.date({ width: \"long\" });\n case \"PPPP\":\n default:\n return formatLong.date({ width: \"full\" });\n }\n};\n\nconst timeLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"p\":\n return formatLong.time({ width: \"short\" });\n case \"pp\":\n return formatLong.time({ width: \"medium\" });\n case \"ppp\":\n return formatLong.time({ width: \"long\" });\n case \"pppp\":\n default:\n return formatLong.time({ width: \"full\" });\n }\n};\n\nconst dateTimeLongFormatter = (pattern, formatLong) => {\n const matchResult = pattern.match(/(P+)(p+)?/) || [];\n const datePattern = matchResult[1];\n const timePattern = matchResult[2];\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n\n let dateTimeFormat;\n\n switch (datePattern) {\n case \"P\":\n dateTimeFormat = formatLong.dateTime({ width: \"short\" });\n break;\n case \"PP\":\n dateTimeFormat = formatLong.dateTime({ width: \"medium\" });\n break;\n case \"PPP\":\n dateTimeFormat = formatLong.dateTime({ width: \"long\" });\n break;\n case \"PPPP\":\n default:\n dateTimeFormat = formatLong.dateTime({ width: \"full\" });\n break;\n }\n\n return dateTimeFormat\n .replace(\"{{date}}\", dateLongFormatter(datePattern, formatLong))\n .replace(\"{{time}}\", timeLongFormatter(timePattern, formatLong));\n};\n\nexport const longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter,\n};\n","const dayOfYearTokenRE = /^D+$/;\nconst weekYearTokenRE = /^Y+$/;\n\nconst throwTokens = [\"D\", \"DD\", \"YY\", \"YYYY\"];\n\nexport function isProtectedDayOfYearToken(token) {\n return dayOfYearTokenRE.test(token);\n}\n\nexport function isProtectedWeekYearToken(token) {\n return weekYearTokenRE.test(token);\n}\n\nexport function warnOrThrowProtectedError(token, format, input) {\n const _message = message(token, format, input);\n console.warn(_message);\n if (throwTokens.includes(token)) throw new RangeError(_message);\n}\n\nfunction message(token, format, input) {\n const subject = token[0] === \"Y\" ? \"years\" : \"days of the month\";\n return `Use \\`${token.toLowerCase()}\\` instead of \\`${token}\\` (in \\`${format}\\`) for formatting ${subject} to the input \\`${input}\\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`;\n}\n","import { defaultLocale } from \"./_lib/defaultLocale.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\nimport { formatters } from \"./_lib/format/formatters.mjs\";\nimport { longFormatters } from \"./_lib/format/longFormatters.mjs\";\nimport {\n isProtectedDayOfYearToken,\n isProtectedWeekYearToken,\n warnOrThrowProtectedError,\n} from \"./_lib/protectedTokens.mjs\";\nimport { isValid } from \"./isValid.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n// Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\nexport { formatters, longFormatters };\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nconst formattingTokensRegExp =\n /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nconst longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\nexport { format as formatDate };\n\n/**\n * The {@link format} function options.\n */\n\n/**\n * @name format\n * @alias formatDate\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 9 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 9 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Sun | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | a..aa | AM, PM | |\n * | | aaa | am, pm | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | |\n * | | bbb | am, pm, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 |\n * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 04/29/1453 | 7 |\n * | | PP | Apr 29, 1453 | 7 |\n * | | PPP | April 29th, 1453 | 7 |\n * | | PPPP | Friday, April 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 |\n * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | April 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear](https://date-fns.org/docs/getISOWeekYear)\n * and [getWeekYear](https://date-fns.org/docs/getWeekYear)).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n * so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n * @param format - The string of tokens\n * @param options - An object with options\n *\n * @returns The formatted date string\n *\n * @throws `date` must not be Invalid Date\n * @throws `options.locale` must contain `localize` property\n * @throws `options.locale` must contain `formatLong` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * const result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\nexport function format(date, formatStr, options) {\n const defaultOptions = getDefaultOptions();\n const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const originalDate = toDate(date);\n\n if (!isValid(originalDate)) {\n throw new RangeError(\"Invalid time value\");\n }\n\n let parts = formatStr\n .match(longFormattingTokensRegExp)\n .map((substring) => {\n const firstCharacter = substring[0];\n if (firstCharacter === \"p\" || firstCharacter === \"P\") {\n const longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n return substring;\n })\n .join(\"\")\n .match(formattingTokensRegExp)\n .map((substring) => {\n // Replace two single quote characters with one single quote character\n if (substring === \"''\") {\n return { isToken: false, value: \"'\" };\n }\n\n const firstCharacter = substring[0];\n if (firstCharacter === \"'\") {\n return { isToken: false, value: cleanEscapedString(substring) };\n }\n\n if (formatters[firstCharacter]) {\n return { isToken: true, value: substring };\n }\n\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError(\n \"Format string contains an unescaped latin alphabet character `\" +\n firstCharacter +\n \"`\",\n );\n }\n\n return { isToken: false, value: substring };\n });\n\n // invoke localize preprocessor (only for french locales at the moment)\n if (locale.localize.preprocessor) {\n parts = locale.localize.preprocessor(originalDate, parts);\n }\n\n const formatterOptions = {\n firstWeekContainsDate,\n weekStartsOn,\n locale,\n };\n\n return parts\n .map((part) => {\n if (!part.isToken) return part.value;\n\n const token = part.value;\n\n if (\n (!options?.useAdditionalWeekYearTokens &&\n isProtectedWeekYearToken(token)) ||\n (!options?.useAdditionalDayOfYearTokens &&\n isProtectedDayOfYearToken(token))\n ) {\n warnOrThrowProtectedError(token, formatStr, String(date));\n }\n\n const formatter = formatters[token[0]];\n return formatter(originalDate, token, locale.localize, formatterOptions);\n })\n .join(\"\");\n}\n\nfunction cleanEscapedString(input) {\n const matched = input.match(escapedStringRegExp);\n\n if (!matched) {\n return input;\n }\n\n return matched[1].replace(doubleQuoteRegExp, \"'\");\n}\n\n// Fallback for modularized imports:\nexport default format;\n","import { millisecondsInHour, millisecondsInMinute } from \"./constants.mjs\";\n\n/**\n * The {@link parseISO} function options.\n */\n\n/**\n * @name parseISO\n * @category Common Helpers\n * @summary Parse ISO string\n *\n * @description\n * Parse the given string in ISO 8601 format and return an instance of Date.\n *\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If the argument isn't a string, the function cannot parse the string or\n * the values are invalid, it returns Invalid Date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param argument - The value to convert\n * @param options - An object with options\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * const result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * const result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport function parseISO(argument, options) {\n const additionalDigits = options?.additionalDigits ?? 2;\n const dateStrings = splitDateString(argument);\n\n let date;\n if (dateStrings.date) {\n const parseYearResult = parseYear(dateStrings.date, additionalDigits);\n date = parseDate(parseYearResult.restDateString, parseYearResult.year);\n }\n\n if (!date || isNaN(date.getTime())) {\n return new Date(NaN);\n }\n\n const timestamp = date.getTime();\n let time = 0;\n let offset;\n\n if (dateStrings.time) {\n time = parseTime(dateStrings.time);\n if (isNaN(time)) {\n return new Date(NaN);\n }\n }\n\n if (dateStrings.timezone) {\n offset = parseTimezone(dateStrings.timezone);\n if (isNaN(offset)) {\n return new Date(NaN);\n }\n } else {\n const dirtyDate = new Date(timestamp + time);\n // JS parsed string assuming it's in UTC timezone\n // but we need it to be parsed in our timezone\n // so we use utc values to build date in our timezone.\n // Year values from 0 to 99 map to the years 1900 to 1999\n // so set year explicitly with setFullYear.\n const result = new Date(0);\n result.setFullYear(\n dirtyDate.getUTCFullYear(),\n dirtyDate.getUTCMonth(),\n dirtyDate.getUTCDate(),\n );\n result.setHours(\n dirtyDate.getUTCHours(),\n dirtyDate.getUTCMinutes(),\n dirtyDate.getUTCSeconds(),\n dirtyDate.getUTCMilliseconds(),\n );\n return result;\n }\n\n return new Date(timestamp + time + offset);\n}\n\nconst patterns = {\n dateTimeDelimiter: /[T ]/,\n timeZoneDelimiter: /[Z ]/i,\n timezone: /([Z+-].*)$/,\n};\n\nconst dateRegex =\n /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/;\nconst timeRegex =\n /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/;\nconst timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/;\n\nfunction splitDateString(dateString) {\n const dateStrings = {};\n const array = dateString.split(patterns.dateTimeDelimiter);\n let timeString;\n\n // The regex match should only return at maximum two array elements.\n // [date], [time], or [date, time].\n if (array.length > 2) {\n return dateStrings;\n }\n\n if (/:/.test(array[0])) {\n timeString = array[0];\n } else {\n dateStrings.date = array[0];\n timeString = array[1];\n if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0];\n timeString = dateString.substr(\n dateStrings.date.length,\n dateString.length,\n );\n }\n }\n\n if (timeString) {\n const token = patterns.timezone.exec(timeString);\n if (token) {\n dateStrings.time = timeString.replace(token[1], \"\");\n dateStrings.timezone = token[1];\n } else {\n dateStrings.time = timeString;\n }\n }\n\n return dateStrings;\n}\n\nfunction parseYear(dateString, additionalDigits) {\n const regex = new RegExp(\n \"^(?:(\\\\d{4}|[+-]\\\\d{\" +\n (4 + additionalDigits) +\n \"})|(\\\\d{2}|[+-]\\\\d{\" +\n (2 + additionalDigits) +\n \"})$)\",\n );\n\n const captures = dateString.match(regex);\n // Invalid ISO-formatted year\n if (!captures) return { year: NaN, restDateString: \"\" };\n\n const year = captures[1] ? parseInt(captures[1]) : null;\n const century = captures[2] ? parseInt(captures[2]) : null;\n\n // either year or century is null, not both\n return {\n year: century === null ? year : century * 100,\n restDateString: dateString.slice((captures[1] || captures[2]).length),\n };\n}\n\nfunction parseDate(dateString, year) {\n // Invalid ISO-formatted year\n if (year === null) return new Date(NaN);\n\n const captures = dateString.match(dateRegex);\n // Invalid ISO-formatted string\n if (!captures) return new Date(NaN);\n\n const isWeekDate = !!captures[4];\n const dayOfYear = parseDateUnit(captures[1]);\n const month = parseDateUnit(captures[2]) - 1;\n const day = parseDateUnit(captures[3]);\n const week = parseDateUnit(captures[4]);\n const dayOfWeek = parseDateUnit(captures[5]) - 1;\n\n if (isWeekDate) {\n if (!validateWeekDate(year, week, dayOfWeek)) {\n return new Date(NaN);\n }\n return dayOfISOWeekYear(year, week, dayOfWeek);\n } else {\n const date = new Date(0);\n if (\n !validateDate(year, month, day) ||\n !validateDayOfYearDate(year, dayOfYear)\n ) {\n return new Date(NaN);\n }\n date.setUTCFullYear(year, month, Math.max(dayOfYear, day));\n return date;\n }\n}\n\nfunction parseDateUnit(value) {\n return value ? parseInt(value) : 1;\n}\n\nfunction parseTime(timeString) {\n const captures = timeString.match(timeRegex);\n if (!captures) return NaN; // Invalid ISO-formatted time\n\n const hours = parseTimeUnit(captures[1]);\n const minutes = parseTimeUnit(captures[2]);\n const seconds = parseTimeUnit(captures[3]);\n\n if (!validateTime(hours, minutes, seconds)) {\n return NaN;\n }\n\n return (\n hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * 1000\n );\n}\n\nfunction parseTimeUnit(value) {\n return (value && parseFloat(value.replace(\",\", \".\"))) || 0;\n}\n\nfunction parseTimezone(timezoneString) {\n if (timezoneString === \"Z\") return 0;\n\n const captures = timezoneString.match(timezoneRegex);\n if (!captures) return 0;\n\n const sign = captures[1] === \"+\" ? -1 : 1;\n const hours = parseInt(captures[2]);\n const minutes = (captures[3] && parseInt(captures[3])) || 0;\n\n if (!validateTimezone(hours, minutes)) {\n return NaN;\n }\n\n return sign * (hours * millisecondsInHour + minutes * millisecondsInMinute);\n}\n\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n const date = new Date(0);\n date.setUTCFullYear(isoWeekYear, 0, 4);\n const fourthOfJanuaryDay = date.getUTCDay() || 7;\n const diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n}\n\n// Validation functions\n\n// February is null to handle the leap year (using ||)\nconst daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nfunction isLeapYearIndex(year) {\n return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\n\nfunction validateDate(year, month, date) {\n return (\n month >= 0 &&\n month <= 11 &&\n date >= 1 &&\n date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28))\n );\n}\n\nfunction validateDayOfYearDate(year, dayOfYear) {\n return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365);\n}\n\nfunction validateWeekDate(_year, week, day) {\n return week >= 1 && week <= 53 && day >= 0 && day <= 6;\n}\n\nfunction validateTime(hours, minutes, seconds) {\n if (hours === 24) {\n return minutes === 0 && seconds === 0;\n }\n\n return (\n seconds >= 0 &&\n seconds < 60 &&\n minutes >= 0 &&\n minutes < 60 &&\n hours >= 0 &&\n hours < 25\n );\n}\n\nfunction validateTimezone(_hours, minutes) {\n return minutes >= 0 && minutes <= 59;\n}\n\n// Fallback for modularized imports:\nexport default parseISO;\n","export function timeDifference(\n current: Date,\n previous: Date,\n t: (v: string) => string,\n): string {\n // Times are defined in milliseconds\n const msPerSecond = 1000;\n const msPerMinute = 60 * msPerSecond;\n const msPerHour = 60 * msPerMinute;\n const msPerDay = 24 * msPerHour;\n const msPerMonth = 30 * msPerDay;\n const msPerYear = 12 * msPerMonth;\n\n // Time ago thresholds\n const msJustNow = 5 * msPerSecond; // Up until 5 s\n const msMinutesAgo = 2 * msPerMinute; // Up until 2 minutes\n const msHoursAgo = 2 * msPerHour; // Up until 2 hours\n const msDaysAgo = 2 * msPerDay; // Up until 2 days\n const msMonthsAgo = 2 * msPerMonth; // Up until 2 months\n const msYearsAgo = 2 * msPerYear; // Up until 2 years\n\n const elapsed = current.getTime() - previous.getTime();\n\n if (elapsed < msJustNow) {\n return t('time_ago.just now');\n } else if (elapsed < msMinutesAgo) {\n return `${Math.round(elapsed / msPerSecond)} ${t('time_ago.seconds ago')}`;\n } else if (elapsed < msHoursAgo) {\n return `${Math.round(elapsed / msPerMinute)} ${t('time_ago.minutes_ago')}`;\n } else if (elapsed < msDaysAgo) {\n return `${Math.round(elapsed / msPerHour)} ${t('time_ago.hours_ago')}`;\n } else if (elapsed < msMonthsAgo) {\n return `${Math.round(elapsed / msPerDay)} ${t('time_ago.days_ago')}`;\n } else if (elapsed < msYearsAgo) {\n return `${Math.round(elapsed / msPerMonth)} ${t('time_ago.months_ago')}`;\n } else {\n return `${Math.round(elapsed / msPerYear)} ${t('time_ago.years_ago')}`;\n }\n}\n\nexport function colorFromString(value: string): string {\n const colors = [\n '#396ab1',\n '#da7c30',\n '#3e9651',\n '#cc2529',\n '#922428',\n '#6b4c9a',\n '#535154',\n ];\n\n let total = 0;\n for (let i = 0; i < value.length; i++) {\n total += value.charCodeAt(i);\n }\n return colors[total % colors.length];\n}\n","\n\n\n\n","\n\n\n","/* eslint-disable no-bitwise */\n\nconst decodeCache = {}\n\nfunction getDecodeCache (exclude) {\n let cache = decodeCache[exclude]\n if (cache) { return cache }\n\n cache = decodeCache[exclude] = []\n\n for (let i = 0; i < 128; i++) {\n const ch = String.fromCharCode(i)\n cache.push(ch)\n }\n\n for (let i = 0; i < exclude.length; i++) {\n const ch = exclude.charCodeAt(i)\n cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2)\n }\n\n return cache\n}\n\n// Decode percent-encoded string.\n//\nfunction decode (string, exclude) {\n if (typeof exclude !== 'string') {\n exclude = decode.defaultChars\n }\n\n const cache = getDecodeCache(exclude)\n\n return string.replace(/(%[a-f0-9]{2})+/gi, function (seq) {\n let result = ''\n\n for (let i = 0, l = seq.length; i < l; i += 3) {\n const b1 = parseInt(seq.slice(i + 1, i + 3), 16)\n\n if (b1 < 0x80) {\n result += cache[b1]\n continue\n }\n\n if ((b1 & 0xE0) === 0xC0 && (i + 3 < l)) {\n // 110xxxxx 10xxxxxx\n const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n\n if ((b2 & 0xC0) === 0x80) {\n const chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F)\n\n if (chr < 0x80) {\n result += '\\ufffd\\ufffd'\n } else {\n result += String.fromCharCode(chr)\n }\n\n i += 3\n continue\n }\n }\n\n if ((b1 & 0xF0) === 0xE0 && (i + 6 < l)) {\n // 1110xxxx 10xxxxxx 10xxxxxx\n const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n const b3 = parseInt(seq.slice(i + 7, i + 9), 16)\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n const chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F)\n\n if (chr < 0x800 || (chr >= 0xD800 && chr <= 0xDFFF)) {\n result += '\\ufffd\\ufffd\\ufffd'\n } else {\n result += String.fromCharCode(chr)\n }\n\n i += 6\n continue\n }\n }\n\n if ((b1 & 0xF8) === 0xF0 && (i + 9 < l)) {\n // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx\n const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n const b3 = parseInt(seq.slice(i + 7, i + 9), 16)\n const b4 = parseInt(seq.slice(i + 10, i + 12), 16)\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) {\n let chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F)\n\n if (chr < 0x10000 || chr > 0x10FFFF) {\n result += '\\ufffd\\ufffd\\ufffd\\ufffd'\n } else {\n chr -= 0x10000\n result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF))\n }\n\n i += 9\n continue\n }\n }\n\n result += '\\ufffd'\n }\n\n return result\n })\n}\n\ndecode.defaultChars = ';/?:@&=+$,#'\ndecode.componentChars = ''\n\nexport default decode\n","const encodeCache = {}\n\n// Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\nfunction getEncodeCache (exclude) {\n let cache = encodeCache[exclude]\n if (cache) { return cache }\n\n cache = encodeCache[exclude] = []\n\n for (let i = 0; i < 128; i++) {\n const ch = String.fromCharCode(i)\n\n if (/^[0-9a-z]$/i.test(ch)) {\n // always allow unencoded alphanumeric characters\n cache.push(ch)\n } else {\n cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2))\n }\n }\n\n for (let i = 0; i < exclude.length; i++) {\n cache[exclude.charCodeAt(i)] = exclude[i]\n }\n\n return cache\n}\n\n// Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n// - string - string to encode\n// - exclude - list of characters to ignore (in addition to a-zA-Z0-9)\n// - keepEscaped - don't encode '%' in a correct escape sequence (default: true)\n//\nfunction encode (string, exclude, keepEscaped) {\n if (typeof exclude !== 'string') {\n // encode(string, keepEscaped)\n keepEscaped = exclude\n exclude = encode.defaultChars\n }\n\n if (typeof keepEscaped === 'undefined') {\n keepEscaped = true\n }\n\n const cache = getEncodeCache(exclude)\n let result = ''\n\n for (let i = 0, l = string.length; i < l; i++) {\n const code = string.charCodeAt(i)\n\n if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {\n if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n result += string.slice(i, i + 3)\n i += 2\n continue\n }\n }\n\n if (code < 128) {\n result += cache[code]\n continue\n }\n\n if (code >= 0xD800 && code <= 0xDFFF) {\n if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n const nextCode = string.charCodeAt(i + 1)\n if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n result += encodeURIComponent(string[i] + string[i + 1])\n i++\n continue\n }\n }\n result += '%EF%BF%BD'\n continue\n }\n\n result += encodeURIComponent(string[i])\n }\n\n return result\n}\n\nencode.defaultChars = \";/?:@&=+$,-_.!~*'()#\"\nencode.componentChars = \"-_.!~*'()\"\n\nexport default encode\n","export default function format (url) {\n let result = ''\n\n result += url.protocol || ''\n result += url.slashes ? '//' : ''\n result += url.auth ? url.auth + '@' : ''\n\n if (url.hostname && url.hostname.indexOf(':') !== -1) {\n // ipv6 address\n result += '[' + url.hostname + ']'\n } else {\n result += url.hostname || ''\n }\n\n result += url.port ? ':' + url.port : ''\n result += url.pathname || ''\n result += url.search || ''\n result += url.hash || ''\n\n return result\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n//\n// Changes from joyent/node:\n//\n// 1. No leading slash in paths,\n// e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/`\n//\n// 2. Backslashes are not replaced with slashes,\n// so `http:\\\\example.org\\` is treated like a relative path\n//\n// 3. Trailing colon is treated like a part of the path,\n// i.e. in `http://example.org:foo` pathname is `:foo`\n//\n// 4. Nothing is URL-encoded in the resulting object,\n// (in joyent/node some chars in auth and paths are encoded)\n//\n// 5. `url.parse()` does not have `parseQueryString` argument\n//\n// 6. Removed extraneous result properties: `host`, `path`, `query`, etc.,\n// which can be constructed using other parts of the url.\n//\n\nfunction Url () {\n this.protocol = null\n this.slashes = null\n this.auth = null\n this.port = null\n this.hostname = null\n this.hash = null\n this.search = null\n this.pathname = null\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nconst protocolPattern = /^([a-z0-9.+-]+:)/i\nconst portPattern = /:[0-9]*$/\n\n// Special case for a simple path URL\n/* eslint-disable-next-line no-useless-escape */\nconst simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/\n\n// RFC 2396: characters reserved for delimiting URLs.\n// We actually just auto-escape these.\nconst delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t']\n\n// RFC 2396: characters not allowed for various reasons.\nconst unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims)\n\n// Allowed by RFCs, but cause of XSS attacks. Always escape these.\nconst autoEscape = ['\\''].concat(unwise)\n// Characters that are never ever allowed in a hostname.\n// Note that any invalid chars are also handled, but these\n// are the ones that are *expected* to be seen, so we fast-path\n// them.\nconst nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape)\nconst hostEndingChars = ['/', '?', '#']\nconst hostnameMaxLen = 255\nconst hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/\nconst hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/\n// protocols that can allow \"unsafe\" and \"unwise\" chars.\n// protocols that never have a hostname.\nconst hostlessProtocol = {\n javascript: true,\n 'javascript:': true\n}\n// protocols that always contain a // bit.\nconst slashedProtocol = {\n http: true,\n https: true,\n ftp: true,\n gopher: true,\n file: true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n}\n\nfunction urlParse (url, slashesDenoteHost) {\n if (url && url instanceof Url) return url\n\n const u = new Url()\n u.parse(url, slashesDenoteHost)\n return u\n}\n\nUrl.prototype.parse = function (url, slashesDenoteHost) {\n let lowerProto, hec, slashes\n let rest = url\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim()\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n const simplePath = simplePathPattern.exec(rest)\n if (simplePath) {\n this.pathname = simplePath[1]\n if (simplePath[2]) {\n this.search = simplePath[2]\n }\n return this\n }\n }\n\n let proto = protocolPattern.exec(rest)\n if (proto) {\n proto = proto[0]\n lowerProto = proto.toLowerCase()\n this.protocol = proto\n rest = rest.substr(proto.length)\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n /* eslint-disable-next-line no-useless-escape */\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n slashes = rest.substr(0, 2) === '//'\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2)\n this.slashes = true\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n let hostEnd = -1\n for (let i = 0; i < hostEndingChars.length; i++) {\n hec = rest.indexOf(hostEndingChars[i])\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec\n }\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n let auth, atSign\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@')\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd)\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign)\n rest = rest.slice(atSign + 1)\n this.auth = auth\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1\n for (let i = 0; i < nonHostChars.length; i++) {\n hec = rest.indexOf(nonHostChars[i])\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec\n }\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1) {\n hostEnd = rest.length\n }\n\n if (rest[hostEnd - 1] === ':') { hostEnd-- }\n const host = rest.slice(0, hostEnd)\n rest = rest.slice(hostEnd)\n\n // pull out port.\n this.parseHost(host)\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || ''\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n const ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']'\n\n // validate a little.\n if (!ipv6Hostname) {\n const hostparts = this.hostname.split(/\\./)\n for (let i = 0, l = hostparts.length; i < l; i++) {\n const part = hostparts[i]\n if (!part) { continue }\n if (!part.match(hostnamePartPattern)) {\n let newpart = ''\n for (let j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x'\n } else {\n newpart += part[j]\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n const validParts = hostparts.slice(0, i)\n const notHost = hostparts.slice(i + 1)\n const bit = part.match(hostnamePartStart)\n if (bit) {\n validParts.push(bit[1])\n notHost.unshift(bit[2])\n }\n if (notHost.length) {\n rest = notHost.join('.') + rest\n }\n this.hostname = validParts.join('.')\n break\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = ''\n }\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2)\n }\n }\n\n // chop off from the tail first.\n const hash = rest.indexOf('#')\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash)\n rest = rest.slice(0, hash)\n }\n const qm = rest.indexOf('?')\n if (qm !== -1) {\n this.search = rest.substr(qm)\n rest = rest.slice(0, qm)\n }\n if (rest) { this.pathname = rest }\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = ''\n }\n\n return this\n}\n\nUrl.prototype.parseHost = function (host) {\n let port = portPattern.exec(host)\n if (port) {\n port = port[0]\n if (port !== ':') {\n this.port = port.substr(1)\n }\n host = host.substr(0, host.length - port.length)\n }\n if (host) { this.hostname = host }\n}\n\nexport default urlParse\n","export default /[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/","export default /[\\0-\\x1F\\x7F-\\x9F]/","export default /[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u0890\\u0891\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD80D[\\uDC30-\\uDC3F]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/","export default /[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061D-\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C77\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1B7D\\u1B7E\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4F\\u2E52-\\u2E5D\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDEAD\\uDF55-\\uDF59\\uDF86-\\uDF89]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5A\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDEB9\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDD44-\\uDD46\\uDDE2\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2\\uDF00-\\uDF09]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8\\uDF43-\\uDF4F\\uDFFF]|\\uD809[\\uDC70-\\uDC74]|\\uD80B[\\uDFF1\\uDFF2]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A\\uDFE2]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/","export default /[\\$\\+<->\\^`\\|~\\xA2-\\xA6\\xA8\\xA9\\xAC\\xAE-\\xB1\\xB4\\xB8\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0384\\u0385\\u03F6\\u0482\\u058D-\\u058F\\u0606-\\u0608\\u060B\\u060E\\u060F\\u06DE\\u06E9\\u06FD\\u06FE\\u07F6\\u07FE\\u07FF\\u0888\\u09F2\\u09F3\\u09FA\\u09FB\\u0AF1\\u0B70\\u0BF3-\\u0BFA\\u0C7F\\u0D4F\\u0D79\\u0E3F\\u0F01-\\u0F03\\u0F13\\u0F15-\\u0F17\\u0F1A-\\u0F1F\\u0F34\\u0F36\\u0F38\\u0FBE-\\u0FC5\\u0FC7-\\u0FCC\\u0FCE\\u0FCF\\u0FD5-\\u0FD8\\u109E\\u109F\\u1390-\\u1399\\u166D\\u17DB\\u1940\\u19DE-\\u19FF\\u1B61-\\u1B6A\\u1B74-\\u1B7C\\u1FBD\\u1FBF-\\u1FC1\\u1FCD-\\u1FCF\\u1FDD-\\u1FDF\\u1FED-\\u1FEF\\u1FFD\\u1FFE\\u2044\\u2052\\u207A-\\u207C\\u208A-\\u208C\\u20A0-\\u20C0\\u2100\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F\\u218A\\u218B\\u2190-\\u2307\\u230C-\\u2328\\u232B-\\u2426\\u2440-\\u244A\\u249C-\\u24E9\\u2500-\\u2767\\u2794-\\u27C4\\u27C7-\\u27E5\\u27F0-\\u2982\\u2999-\\u29D7\\u29DC-\\u29FB\\u29FE-\\u2B73\\u2B76-\\u2B95\\u2B97-\\u2BFF\\u2CE5-\\u2CEA\\u2E50\\u2E51\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFF\\u3004\\u3012\\u3013\\u3020\\u3036\\u3037\\u303E\\u303F\\u309B\\u309C\\u3190\\u3191\\u3196-\\u319F\\u31C0-\\u31E3\\u31EF\\u3200-\\u321E\\u322A-\\u3247\\u3250\\u3260-\\u327F\\u328A-\\u32B0\\u32C0-\\u33FF\\u4DC0-\\u4DFF\\uA490-\\uA4C6\\uA700-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA828-\\uA82B\\uA836-\\uA839\\uAA77-\\uAA79\\uAB5B\\uAB6A\\uAB6B\\uFB29\\uFBB2-\\uFBC2\\uFD40-\\uFD4F\\uFDCF\\uFDFC-\\uFDFF\\uFE62\\uFE64-\\uFE66\\uFE69\\uFF04\\uFF0B\\uFF1C-\\uFF1E\\uFF3E\\uFF40\\uFF5C\\uFF5E\\uFFE0-\\uFFE6\\uFFE8-\\uFFEE\\uFFFC\\uFFFD]|\\uD800[\\uDD37-\\uDD3F\\uDD79-\\uDD89\\uDD8C-\\uDD8E\\uDD90-\\uDD9C\\uDDA0\\uDDD0-\\uDDFC]|\\uD802[\\uDC77\\uDC78\\uDEC8]|\\uD805\\uDF3F|\\uD807[\\uDFD5-\\uDFF1]|\\uD81A[\\uDF3C-\\uDF3F\\uDF45]|\\uD82F\\uDC9C|\\uD833[\\uDF50-\\uDFC3]|\\uD834[\\uDC00-\\uDCF5\\uDD00-\\uDD26\\uDD29-\\uDD64\\uDD6A-\\uDD6C\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDDEA\\uDE00-\\uDE41\\uDE45\\uDF00-\\uDF56]|\\uD835[\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85\\uDE86]|\\uD838[\\uDD4F\\uDEFF]|\\uD83B[\\uDCAC\\uDCB0\\uDD2E\\uDEF0\\uDEF1]|\\uD83C[\\uDC00-\\uDC2B\\uDC30-\\uDC93\\uDCA0-\\uDCAE\\uDCB1-\\uDCBF\\uDCC1-\\uDCCF\\uDCD1-\\uDCF5\\uDD0D-\\uDDAD\\uDDE6-\\uDE02\\uDE10-\\uDE3B\\uDE40-\\uDE48\\uDE50\\uDE51\\uDE60-\\uDE65\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDED7\\uDEDC-\\uDEEC\\uDEF0-\\uDEFC\\uDF00-\\uDF76\\uDF7B-\\uDFD9\\uDFE0-\\uDFEB\\uDFF0]|\\uD83E[\\uDC00-\\uDC0B\\uDC10-\\uDC47\\uDC50-\\uDC59\\uDC60-\\uDC87\\uDC90-\\uDCAD\\uDCB0\\uDCB1\\uDD00-\\uDE53\\uDE60-\\uDE6D\\uDE70-\\uDE7C\\uDE80-\\uDE88\\uDE90-\\uDEBD\\uDEBF-\\uDEC5\\uDECE-\\uDEDB\\uDEE0-\\uDEE8\\uDEF0-\\uDEF8\\uDF00-\\uDF92\\uDF94-\\uDFCA]/","export default /[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/","// Generated using scripts/write-decode-map.ts\nexport default new Uint16Array(\n// prettier-ignore\n\"\\u1d41<\\xd5\\u0131\\u028a\\u049d\\u057b\\u05d0\\u0675\\u06de\\u07a2\\u07d6\\u080f\\u0a4a\\u0a91\\u0da1\\u0e6d\\u0f09\\u0f26\\u10ca\\u1228\\u12e1\\u1415\\u149d\\u14c3\\u14df\\u1525\\0\\0\\0\\0\\0\\0\\u156b\\u16cd\\u198d\\u1c12\\u1ddd\\u1f7e\\u2060\\u21b0\\u228d\\u23c0\\u23fb\\u2442\\u2824\\u2912\\u2d08\\u2e48\\u2fce\\u3016\\u32ba\\u3639\\u37ac\\u38fe\\u3a28\\u3a71\\u3ae0\\u3b2e\\u0800EMabcfglmnoprstu\\\\bfms\\x7f\\x84\\x8b\\x90\\x95\\x98\\xa6\\xb3\\xb9\\xc8\\xcflig\\u803b\\xc6\\u40c6P\\u803b&\\u4026cute\\u803b\\xc1\\u40c1reve;\\u4102\\u0100iyx}rc\\u803b\\xc2\\u40c2;\\u4410r;\\uc000\\ud835\\udd04rave\\u803b\\xc0\\u40c0pha;\\u4391acr;\\u4100d;\\u6a53\\u0100gp\\x9d\\xa1on;\\u4104f;\\uc000\\ud835\\udd38plyFunction;\\u6061ing\\u803b\\xc5\\u40c5\\u0100cs\\xbe\\xc3r;\\uc000\\ud835\\udc9cign;\\u6254ilde\\u803b\\xc3\\u40c3ml\\u803b\\xc4\\u40c4\\u0400aceforsu\\xe5\\xfb\\xfe\\u0117\\u011c\\u0122\\u0127\\u012a\\u0100cr\\xea\\xf2kslash;\\u6216\\u0176\\xf6\\xf8;\\u6ae7ed;\\u6306y;\\u4411\\u0180crt\\u0105\\u010b\\u0114ause;\\u6235noullis;\\u612ca;\\u4392r;\\uc000\\ud835\\udd05pf;\\uc000\\ud835\\udd39eve;\\u42d8c\\xf2\\u0113mpeq;\\u624e\\u0700HOacdefhilorsu\\u014d\\u0151\\u0156\\u0180\\u019e\\u01a2\\u01b5\\u01b7\\u01ba\\u01dc\\u0215\\u0273\\u0278\\u027ecy;\\u4427PY\\u803b\\xa9\\u40a9\\u0180cpy\\u015d\\u0162\\u017aute;\\u4106\\u0100;i\\u0167\\u0168\\u62d2talDifferentialD;\\u6145leys;\\u612d\\u0200aeio\\u0189\\u018e\\u0194\\u0198ron;\\u410cdil\\u803b\\xc7\\u40c7rc;\\u4108nint;\\u6230ot;\\u410a\\u0100dn\\u01a7\\u01adilla;\\u40b8terDot;\\u40b7\\xf2\\u017fi;\\u43a7rcle\\u0200DMPT\\u01c7\\u01cb\\u01d1\\u01d6ot;\\u6299inus;\\u6296lus;\\u6295imes;\\u6297o\\u0100cs\\u01e2\\u01f8kwiseContourIntegral;\\u6232eCurly\\u0100DQ\\u0203\\u020foubleQuote;\\u601duote;\\u6019\\u0200lnpu\\u021e\\u0228\\u0247\\u0255on\\u0100;e\\u0225\\u0226\\u6237;\\u6a74\\u0180git\\u022f\\u0236\\u023aruent;\\u6261nt;\\u622fourIntegral;\\u622e\\u0100fr\\u024c\\u024e;\\u6102oduct;\\u6210nterClockwiseContourIntegral;\\u6233oss;\\u6a2fcr;\\uc000\\ud835\\udc9ep\\u0100;C\\u0284\\u0285\\u62d3ap;\\u624d\\u0580DJSZacefios\\u02a0\\u02ac\\u02b0\\u02b4\\u02b8\\u02cb\\u02d7\\u02e1\\u02e6\\u0333\\u048d\\u0100;o\\u0179\\u02a5trahd;\\u6911cy;\\u4402cy;\\u4405cy;\\u440f\\u0180grs\\u02bf\\u02c4\\u02c7ger;\\u6021r;\\u61a1hv;\\u6ae4\\u0100ay\\u02d0\\u02d5ron;\\u410e;\\u4414l\\u0100;t\\u02dd\\u02de\\u6207a;\\u4394r;\\uc000\\ud835\\udd07\\u0100af\\u02eb\\u0327\\u0100cm\\u02f0\\u0322ritical\\u0200ADGT\\u0300\\u0306\\u0316\\u031ccute;\\u40b4o\\u0174\\u030b\\u030d;\\u42d9bleAcute;\\u42ddrave;\\u4060ilde;\\u42dcond;\\u62c4ferentialD;\\u6146\\u0470\\u033d\\0\\0\\0\\u0342\\u0354\\0\\u0405f;\\uc000\\ud835\\udd3b\\u0180;DE\\u0348\\u0349\\u034d\\u40a8ot;\\u60dcqual;\\u6250ble\\u0300CDLRUV\\u0363\\u0372\\u0382\\u03cf\\u03e2\\u03f8ontourIntegra\\xec\\u0239o\\u0274\\u0379\\0\\0\\u037b\\xbb\\u0349nArrow;\\u61d3\\u0100eo\\u0387\\u03a4ft\\u0180ART\\u0390\\u0396\\u03a1rrow;\\u61d0ightArrow;\\u61d4e\\xe5\\u02cang\\u0100LR\\u03ab\\u03c4eft\\u0100AR\\u03b3\\u03b9rrow;\\u67f8ightArrow;\\u67faightArrow;\\u67f9ight\\u0100AT\\u03d8\\u03derrow;\\u61d2ee;\\u62a8p\\u0241\\u03e9\\0\\0\\u03efrrow;\\u61d1ownArrow;\\u61d5erticalBar;\\u6225n\\u0300ABLRTa\\u0412\\u042a\\u0430\\u045e\\u047f\\u037crrow\\u0180;BU\\u041d\\u041e\\u0422\\u6193ar;\\u6913pArrow;\\u61f5reve;\\u4311eft\\u02d2\\u043a\\0\\u0446\\0\\u0450ightVector;\\u6950eeVector;\\u695eector\\u0100;B\\u0459\\u045a\\u61bdar;\\u6956ight\\u01d4\\u0467\\0\\u0471eeVector;\\u695fector\\u0100;B\\u047a\\u047b\\u61c1ar;\\u6957ee\\u0100;A\\u0486\\u0487\\u62a4rrow;\\u61a7\\u0100ct\\u0492\\u0497r;\\uc000\\ud835\\udc9frok;\\u4110\\u0800NTacdfglmopqstux\\u04bd\\u04c0\\u04c4\\u04cb\\u04de\\u04e2\\u04e7\\u04ee\\u04f5\\u0521\\u052f\\u0536\\u0552\\u055d\\u0560\\u0565G;\\u414aH\\u803b\\xd0\\u40d0cute\\u803b\\xc9\\u40c9\\u0180aiy\\u04d2\\u04d7\\u04dcron;\\u411arc\\u803b\\xca\\u40ca;\\u442dot;\\u4116r;\\uc000\\ud835\\udd08rave\\u803b\\xc8\\u40c8ement;\\u6208\\u0100ap\\u04fa\\u04fecr;\\u4112ty\\u0253\\u0506\\0\\0\\u0512mallSquare;\\u65fberySmallSquare;\\u65ab\\u0100gp\\u0526\\u052aon;\\u4118f;\\uc000\\ud835\\udd3csilon;\\u4395u\\u0100ai\\u053c\\u0549l\\u0100;T\\u0542\\u0543\\u6a75ilde;\\u6242librium;\\u61cc\\u0100ci\\u0557\\u055ar;\\u6130m;\\u6a73a;\\u4397ml\\u803b\\xcb\\u40cb\\u0100ip\\u056a\\u056fsts;\\u6203onentialE;\\u6147\\u0280cfios\\u0585\\u0588\\u058d\\u05b2\\u05ccy;\\u4424r;\\uc000\\ud835\\udd09lled\\u0253\\u0597\\0\\0\\u05a3mallSquare;\\u65fcerySmallSquare;\\u65aa\\u0370\\u05ba\\0\\u05bf\\0\\0\\u05c4f;\\uc000\\ud835\\udd3dAll;\\u6200riertrf;\\u6131c\\xf2\\u05cb\\u0600JTabcdfgorst\\u05e8\\u05ec\\u05ef\\u05fa\\u0600\\u0612\\u0616\\u061b\\u061d\\u0623\\u066c\\u0672cy;\\u4403\\u803b>\\u403emma\\u0100;d\\u05f7\\u05f8\\u4393;\\u43dcreve;\\u411e\\u0180eiy\\u0607\\u060c\\u0610dil;\\u4122rc;\\u411c;\\u4413ot;\\u4120r;\\uc000\\ud835\\udd0a;\\u62d9pf;\\uc000\\ud835\\udd3eeater\\u0300EFGLST\\u0635\\u0644\\u064e\\u0656\\u065b\\u0666qual\\u0100;L\\u063e\\u063f\\u6265ess;\\u62dbullEqual;\\u6267reater;\\u6aa2ess;\\u6277lantEqual;\\u6a7eilde;\\u6273cr;\\uc000\\ud835\\udca2;\\u626b\\u0400Aacfiosu\\u0685\\u068b\\u0696\\u069b\\u069e\\u06aa\\u06be\\u06caRDcy;\\u442a\\u0100ct\\u0690\\u0694ek;\\u42c7;\\u405eirc;\\u4124r;\\u610clbertSpace;\\u610b\\u01f0\\u06af\\0\\u06b2f;\\u610dizontalLine;\\u6500\\u0100ct\\u06c3\\u06c5\\xf2\\u06a9rok;\\u4126mp\\u0144\\u06d0\\u06d8ownHum\\xf0\\u012fqual;\\u624f\\u0700EJOacdfgmnostu\\u06fa\\u06fe\\u0703\\u0707\\u070e\\u071a\\u071e\\u0721\\u0728\\u0744\\u0778\\u078b\\u078f\\u0795cy;\\u4415lig;\\u4132cy;\\u4401cute\\u803b\\xcd\\u40cd\\u0100iy\\u0713\\u0718rc\\u803b\\xce\\u40ce;\\u4418ot;\\u4130r;\\u6111rave\\u803b\\xcc\\u40cc\\u0180;ap\\u0720\\u072f\\u073f\\u0100cg\\u0734\\u0737r;\\u412ainaryI;\\u6148lie\\xf3\\u03dd\\u01f4\\u0749\\0\\u0762\\u0100;e\\u074d\\u074e\\u622c\\u0100gr\\u0753\\u0758ral;\\u622bsection;\\u62c2isible\\u0100CT\\u076c\\u0772omma;\\u6063imes;\\u6062\\u0180gpt\\u077f\\u0783\\u0788on;\\u412ef;\\uc000\\ud835\\udd40a;\\u4399cr;\\u6110ilde;\\u4128\\u01eb\\u079a\\0\\u079ecy;\\u4406l\\u803b\\xcf\\u40cf\\u0280cfosu\\u07ac\\u07b7\\u07bc\\u07c2\\u07d0\\u0100iy\\u07b1\\u07b5rc;\\u4134;\\u4419r;\\uc000\\ud835\\udd0dpf;\\uc000\\ud835\\udd41\\u01e3\\u07c7\\0\\u07ccr;\\uc000\\ud835\\udca5rcy;\\u4408kcy;\\u4404\\u0380HJacfos\\u07e4\\u07e8\\u07ec\\u07f1\\u07fd\\u0802\\u0808cy;\\u4425cy;\\u440cppa;\\u439a\\u0100ey\\u07f6\\u07fbdil;\\u4136;\\u441ar;\\uc000\\ud835\\udd0epf;\\uc000\\ud835\\udd42cr;\\uc000\\ud835\\udca6\\u0580JTaceflmost\\u0825\\u0829\\u082c\\u0850\\u0863\\u09b3\\u09b8\\u09c7\\u09cd\\u0a37\\u0a47cy;\\u4409\\u803b<\\u403c\\u0280cmnpr\\u0837\\u083c\\u0841\\u0844\\u084dute;\\u4139bda;\\u439bg;\\u67ealacetrf;\\u6112r;\\u619e\\u0180aey\\u0857\\u085c\\u0861ron;\\u413ddil;\\u413b;\\u441b\\u0100fs\\u0868\\u0970t\\u0500ACDFRTUVar\\u087e\\u08a9\\u08b1\\u08e0\\u08e6\\u08fc\\u092f\\u095b\\u0390\\u096a\\u0100nr\\u0883\\u088fgleBracket;\\u67e8row\\u0180;BR\\u0899\\u089a\\u089e\\u6190ar;\\u61e4ightArrow;\\u61c6eiling;\\u6308o\\u01f5\\u08b7\\0\\u08c3bleBracket;\\u67e6n\\u01d4\\u08c8\\0\\u08d2eeVector;\\u6961ector\\u0100;B\\u08db\\u08dc\\u61c3ar;\\u6959loor;\\u630aight\\u0100AV\\u08ef\\u08f5rrow;\\u6194ector;\\u694e\\u0100er\\u0901\\u0917e\\u0180;AV\\u0909\\u090a\\u0910\\u62a3rrow;\\u61a4ector;\\u695aiangle\\u0180;BE\\u0924\\u0925\\u0929\\u62b2ar;\\u69cfqual;\\u62b4p\\u0180DTV\\u0937\\u0942\\u094cownVector;\\u6951eeVector;\\u6960ector\\u0100;B\\u0956\\u0957\\u61bfar;\\u6958ector\\u0100;B\\u0965\\u0966\\u61bcar;\\u6952ight\\xe1\\u039cs\\u0300EFGLST\\u097e\\u098b\\u0995\\u099d\\u09a2\\u09adqualGreater;\\u62daullEqual;\\u6266reater;\\u6276ess;\\u6aa1lantEqual;\\u6a7dilde;\\u6272r;\\uc000\\ud835\\udd0f\\u0100;e\\u09bd\\u09be\\u62d8ftarrow;\\u61daidot;\\u413f\\u0180npw\\u09d4\\u0a16\\u0a1bg\\u0200LRlr\\u09de\\u09f7\\u0a02\\u0a10eft\\u0100AR\\u09e6\\u09ecrrow;\\u67f5ightArrow;\\u67f7ightArrow;\\u67f6eft\\u0100ar\\u03b3\\u0a0aight\\xe1\\u03bfight\\xe1\\u03caf;\\uc000\\ud835\\udd43er\\u0100LR\\u0a22\\u0a2ceftArrow;\\u6199ightArrow;\\u6198\\u0180cht\\u0a3e\\u0a40\\u0a42\\xf2\\u084c;\\u61b0rok;\\u4141;\\u626a\\u0400acefiosu\\u0a5a\\u0a5d\\u0a60\\u0a77\\u0a7c\\u0a85\\u0a8b\\u0a8ep;\\u6905y;\\u441c\\u0100dl\\u0a65\\u0a6fiumSpace;\\u605flintrf;\\u6133r;\\uc000\\ud835\\udd10nusPlus;\\u6213pf;\\uc000\\ud835\\udd44c\\xf2\\u0a76;\\u439c\\u0480Jacefostu\\u0aa3\\u0aa7\\u0aad\\u0ac0\\u0b14\\u0b19\\u0d91\\u0d97\\u0d9ecy;\\u440acute;\\u4143\\u0180aey\\u0ab4\\u0ab9\\u0aberon;\\u4147dil;\\u4145;\\u441d\\u0180gsw\\u0ac7\\u0af0\\u0b0eative\\u0180MTV\\u0ad3\\u0adf\\u0ae8ediumSpace;\\u600bhi\\u0100cn\\u0ae6\\u0ad8\\xeb\\u0ad9eryThi\\xee\\u0ad9ted\\u0100GL\\u0af8\\u0b06reaterGreate\\xf2\\u0673essLes\\xf3\\u0a48Line;\\u400ar;\\uc000\\ud835\\udd11\\u0200Bnpt\\u0b22\\u0b28\\u0b37\\u0b3areak;\\u6060BreakingSpace;\\u40a0f;\\u6115\\u0680;CDEGHLNPRSTV\\u0b55\\u0b56\\u0b6a\\u0b7c\\u0ba1\\u0beb\\u0c04\\u0c5e\\u0c84\\u0ca6\\u0cd8\\u0d61\\u0d85\\u6aec\\u0100ou\\u0b5b\\u0b64ngruent;\\u6262pCap;\\u626doubleVerticalBar;\\u6226\\u0180lqx\\u0b83\\u0b8a\\u0b9bement;\\u6209ual\\u0100;T\\u0b92\\u0b93\\u6260ilde;\\uc000\\u2242\\u0338ists;\\u6204reater\\u0380;EFGLST\\u0bb6\\u0bb7\\u0bbd\\u0bc9\\u0bd3\\u0bd8\\u0be5\\u626fqual;\\u6271ullEqual;\\uc000\\u2267\\u0338reater;\\uc000\\u226b\\u0338ess;\\u6279lantEqual;\\uc000\\u2a7e\\u0338ilde;\\u6275ump\\u0144\\u0bf2\\u0bfdownHump;\\uc000\\u224e\\u0338qual;\\uc000\\u224f\\u0338e\\u0100fs\\u0c0a\\u0c27tTriangle\\u0180;BE\\u0c1a\\u0c1b\\u0c21\\u62eaar;\\uc000\\u29cf\\u0338qual;\\u62ecs\\u0300;EGLST\\u0c35\\u0c36\\u0c3c\\u0c44\\u0c4b\\u0c58\\u626equal;\\u6270reater;\\u6278ess;\\uc000\\u226a\\u0338lantEqual;\\uc000\\u2a7d\\u0338ilde;\\u6274ested\\u0100GL\\u0c68\\u0c79reaterGreater;\\uc000\\u2aa2\\u0338essLess;\\uc000\\u2aa1\\u0338recedes\\u0180;ES\\u0c92\\u0c93\\u0c9b\\u6280qual;\\uc000\\u2aaf\\u0338lantEqual;\\u62e0\\u0100ei\\u0cab\\u0cb9verseElement;\\u620cghtTriangle\\u0180;BE\\u0ccb\\u0ccc\\u0cd2\\u62ebar;\\uc000\\u29d0\\u0338qual;\\u62ed\\u0100qu\\u0cdd\\u0d0cuareSu\\u0100bp\\u0ce8\\u0cf9set\\u0100;E\\u0cf0\\u0cf3\\uc000\\u228f\\u0338qual;\\u62e2erset\\u0100;E\\u0d03\\u0d06\\uc000\\u2290\\u0338qual;\\u62e3\\u0180bcp\\u0d13\\u0d24\\u0d4eset\\u0100;E\\u0d1b\\u0d1e\\uc000\\u2282\\u20d2qual;\\u6288ceeds\\u0200;EST\\u0d32\\u0d33\\u0d3b\\u0d46\\u6281qual;\\uc000\\u2ab0\\u0338lantEqual;\\u62e1ilde;\\uc000\\u227f\\u0338erset\\u0100;E\\u0d58\\u0d5b\\uc000\\u2283\\u20d2qual;\\u6289ilde\\u0200;EFT\\u0d6e\\u0d6f\\u0d75\\u0d7f\\u6241qual;\\u6244ullEqual;\\u6247ilde;\\u6249erticalBar;\\u6224cr;\\uc000\\ud835\\udca9ilde\\u803b\\xd1\\u40d1;\\u439d\\u0700Eacdfgmoprstuv\\u0dbd\\u0dc2\\u0dc9\\u0dd5\\u0ddb\\u0de0\\u0de7\\u0dfc\\u0e02\\u0e20\\u0e22\\u0e32\\u0e3f\\u0e44lig;\\u4152cute\\u803b\\xd3\\u40d3\\u0100iy\\u0dce\\u0dd3rc\\u803b\\xd4\\u40d4;\\u441eblac;\\u4150r;\\uc000\\ud835\\udd12rave\\u803b\\xd2\\u40d2\\u0180aei\\u0dee\\u0df2\\u0df6cr;\\u414cga;\\u43a9cron;\\u439fpf;\\uc000\\ud835\\udd46enCurly\\u0100DQ\\u0e0e\\u0e1aoubleQuote;\\u601cuote;\\u6018;\\u6a54\\u0100cl\\u0e27\\u0e2cr;\\uc000\\ud835\\udcaaash\\u803b\\xd8\\u40d8i\\u016c\\u0e37\\u0e3cde\\u803b\\xd5\\u40d5es;\\u6a37ml\\u803b\\xd6\\u40d6er\\u0100BP\\u0e4b\\u0e60\\u0100ar\\u0e50\\u0e53r;\\u603eac\\u0100ek\\u0e5a\\u0e5c;\\u63deet;\\u63b4arenthesis;\\u63dc\\u0480acfhilors\\u0e7f\\u0e87\\u0e8a\\u0e8f\\u0e92\\u0e94\\u0e9d\\u0eb0\\u0efcrtialD;\\u6202y;\\u441fr;\\uc000\\ud835\\udd13i;\\u43a6;\\u43a0usMinus;\\u40b1\\u0100ip\\u0ea2\\u0eadncareplan\\xe5\\u069df;\\u6119\\u0200;eio\\u0eb9\\u0eba\\u0ee0\\u0ee4\\u6abbcedes\\u0200;EST\\u0ec8\\u0ec9\\u0ecf\\u0eda\\u627aqual;\\u6aaflantEqual;\\u627cilde;\\u627eme;\\u6033\\u0100dp\\u0ee9\\u0eeeuct;\\u620fortion\\u0100;a\\u0225\\u0ef9l;\\u621d\\u0100ci\\u0f01\\u0f06r;\\uc000\\ud835\\udcab;\\u43a8\\u0200Ufos\\u0f11\\u0f16\\u0f1b\\u0f1fOT\\u803b\\\"\\u4022r;\\uc000\\ud835\\udd14pf;\\u611acr;\\uc000\\ud835\\udcac\\u0600BEacefhiorsu\\u0f3e\\u0f43\\u0f47\\u0f60\\u0f73\\u0fa7\\u0faa\\u0fad\\u1096\\u10a9\\u10b4\\u10bearr;\\u6910G\\u803b\\xae\\u40ae\\u0180cnr\\u0f4e\\u0f53\\u0f56ute;\\u4154g;\\u67ebr\\u0100;t\\u0f5c\\u0f5d\\u61a0l;\\u6916\\u0180aey\\u0f67\\u0f6c\\u0f71ron;\\u4158dil;\\u4156;\\u4420\\u0100;v\\u0f78\\u0f79\\u611cerse\\u0100EU\\u0f82\\u0f99\\u0100lq\\u0f87\\u0f8eement;\\u620builibrium;\\u61cbpEquilibrium;\\u696fr\\xbb\\u0f79o;\\u43a1ght\\u0400ACDFTUVa\\u0fc1\\u0feb\\u0ff3\\u1022\\u1028\\u105b\\u1087\\u03d8\\u0100nr\\u0fc6\\u0fd2gleBracket;\\u67e9row\\u0180;BL\\u0fdc\\u0fdd\\u0fe1\\u6192ar;\\u61e5eftArrow;\\u61c4eiling;\\u6309o\\u01f5\\u0ff9\\0\\u1005bleBracket;\\u67e7n\\u01d4\\u100a\\0\\u1014eeVector;\\u695dector\\u0100;B\\u101d\\u101e\\u61c2ar;\\u6955loor;\\u630b\\u0100er\\u102d\\u1043e\\u0180;AV\\u1035\\u1036\\u103c\\u62a2rrow;\\u61a6ector;\\u695biangle\\u0180;BE\\u1050\\u1051\\u1055\\u62b3ar;\\u69d0qual;\\u62b5p\\u0180DTV\\u1063\\u106e\\u1078ownVector;\\u694feeVector;\\u695cector\\u0100;B\\u1082\\u1083\\u61bear;\\u6954ector\\u0100;B\\u1091\\u1092\\u61c0ar;\\u6953\\u0100pu\\u109b\\u109ef;\\u611dndImplies;\\u6970ightarrow;\\u61db\\u0100ch\\u10b9\\u10bcr;\\u611b;\\u61b1leDelayed;\\u69f4\\u0680HOacfhimoqstu\\u10e4\\u10f1\\u10f7\\u10fd\\u1119\\u111e\\u1151\\u1156\\u1161\\u1167\\u11b5\\u11bb\\u11bf\\u0100Cc\\u10e9\\u10eeHcy;\\u4429y;\\u4428FTcy;\\u442ccute;\\u415a\\u0280;aeiy\\u1108\\u1109\\u110e\\u1113\\u1117\\u6abcron;\\u4160dil;\\u415erc;\\u415c;\\u4421r;\\uc000\\ud835\\udd16ort\\u0200DLRU\\u112a\\u1134\\u113e\\u1149ownArrow\\xbb\\u041eeftArrow\\xbb\\u089aightArrow\\xbb\\u0fddpArrow;\\u6191gma;\\u43a3allCircle;\\u6218pf;\\uc000\\ud835\\udd4a\\u0272\\u116d\\0\\0\\u1170t;\\u621aare\\u0200;ISU\\u117b\\u117c\\u1189\\u11af\\u65a1ntersection;\\u6293u\\u0100bp\\u118f\\u119eset\\u0100;E\\u1197\\u1198\\u628fqual;\\u6291erset\\u0100;E\\u11a8\\u11a9\\u6290qual;\\u6292nion;\\u6294cr;\\uc000\\ud835\\udcaear;\\u62c6\\u0200bcmp\\u11c8\\u11db\\u1209\\u120b\\u0100;s\\u11cd\\u11ce\\u62d0et\\u0100;E\\u11cd\\u11d5qual;\\u6286\\u0100ch\\u11e0\\u1205eeds\\u0200;EST\\u11ed\\u11ee\\u11f4\\u11ff\\u627bqual;\\u6ab0lantEqual;\\u627dilde;\\u627fTh\\xe1\\u0f8c;\\u6211\\u0180;es\\u1212\\u1213\\u1223\\u62d1rset\\u0100;E\\u121c\\u121d\\u6283qual;\\u6287et\\xbb\\u1213\\u0580HRSacfhiors\\u123e\\u1244\\u1249\\u1255\\u125e\\u1271\\u1276\\u129f\\u12c2\\u12c8\\u12d1ORN\\u803b\\xde\\u40deADE;\\u6122\\u0100Hc\\u124e\\u1252cy;\\u440by;\\u4426\\u0100bu\\u125a\\u125c;\\u4009;\\u43a4\\u0180aey\\u1265\\u126a\\u126fron;\\u4164dil;\\u4162;\\u4422r;\\uc000\\ud835\\udd17\\u0100ei\\u127b\\u1289\\u01f2\\u1280\\0\\u1287efore;\\u6234a;\\u4398\\u0100cn\\u128e\\u1298kSpace;\\uc000\\u205f\\u200aSpace;\\u6009lde\\u0200;EFT\\u12ab\\u12ac\\u12b2\\u12bc\\u623cqual;\\u6243ullEqual;\\u6245ilde;\\u6248pf;\\uc000\\ud835\\udd4bipleDot;\\u60db\\u0100ct\\u12d6\\u12dbr;\\uc000\\ud835\\udcafrok;\\u4166\\u0ae1\\u12f7\\u130e\\u131a\\u1326\\0\\u132c\\u1331\\0\\0\\0\\0\\0\\u1338\\u133d\\u1377\\u1385\\0\\u13ff\\u1404\\u140a\\u1410\\u0100cr\\u12fb\\u1301ute\\u803b\\xda\\u40dar\\u0100;o\\u1307\\u1308\\u619fcir;\\u6949r\\u01e3\\u1313\\0\\u1316y;\\u440eve;\\u416c\\u0100iy\\u131e\\u1323rc\\u803b\\xdb\\u40db;\\u4423blac;\\u4170r;\\uc000\\ud835\\udd18rave\\u803b\\xd9\\u40d9acr;\\u416a\\u0100di\\u1341\\u1369er\\u0100BP\\u1348\\u135d\\u0100ar\\u134d\\u1350r;\\u405fac\\u0100ek\\u1357\\u1359;\\u63dfet;\\u63b5arenthesis;\\u63ddon\\u0100;P\\u1370\\u1371\\u62c3lus;\\u628e\\u0100gp\\u137b\\u137fon;\\u4172f;\\uc000\\ud835\\udd4c\\u0400ADETadps\\u1395\\u13ae\\u13b8\\u13c4\\u03e8\\u13d2\\u13d7\\u13f3rrow\\u0180;BD\\u1150\\u13a0\\u13a4ar;\\u6912ownArrow;\\u61c5ownArrow;\\u6195quilibrium;\\u696eee\\u0100;A\\u13cb\\u13cc\\u62a5rrow;\\u61a5own\\xe1\\u03f3er\\u0100LR\\u13de\\u13e8eftArrow;\\u6196ightArrow;\\u6197i\\u0100;l\\u13f9\\u13fa\\u43d2on;\\u43a5ing;\\u416ecr;\\uc000\\ud835\\udcb0ilde;\\u4168ml\\u803b\\xdc\\u40dc\\u0480Dbcdefosv\\u1427\\u142c\\u1430\\u1433\\u143e\\u1485\\u148a\\u1490\\u1496ash;\\u62abar;\\u6aeby;\\u4412ash\\u0100;l\\u143b\\u143c\\u62a9;\\u6ae6\\u0100er\\u1443\\u1445;\\u62c1\\u0180bty\\u144c\\u1450\\u147aar;\\u6016\\u0100;i\\u144f\\u1455cal\\u0200BLST\\u1461\\u1465\\u146a\\u1474ar;\\u6223ine;\\u407ceparator;\\u6758ilde;\\u6240ThinSpace;\\u600ar;\\uc000\\ud835\\udd19pf;\\uc000\\ud835\\udd4dcr;\\uc000\\ud835\\udcb1dash;\\u62aa\\u0280cefos\\u14a7\\u14ac\\u14b1\\u14b6\\u14bcirc;\\u4174dge;\\u62c0r;\\uc000\\ud835\\udd1apf;\\uc000\\ud835\\udd4ecr;\\uc000\\ud835\\udcb2\\u0200fios\\u14cb\\u14d0\\u14d2\\u14d8r;\\uc000\\ud835\\udd1b;\\u439epf;\\uc000\\ud835\\udd4fcr;\\uc000\\ud835\\udcb3\\u0480AIUacfosu\\u14f1\\u14f5\\u14f9\\u14fd\\u1504\\u150f\\u1514\\u151a\\u1520cy;\\u442fcy;\\u4407cy;\\u442ecute\\u803b\\xdd\\u40dd\\u0100iy\\u1509\\u150drc;\\u4176;\\u442br;\\uc000\\ud835\\udd1cpf;\\uc000\\ud835\\udd50cr;\\uc000\\ud835\\udcb4ml;\\u4178\\u0400Hacdefos\\u1535\\u1539\\u153f\\u154b\\u154f\\u155d\\u1560\\u1564cy;\\u4416cute;\\u4179\\u0100ay\\u1544\\u1549ron;\\u417d;\\u4417ot;\\u417b\\u01f2\\u1554\\0\\u155boWidt\\xe8\\u0ad9a;\\u4396r;\\u6128pf;\\u6124cr;\\uc000\\ud835\\udcb5\\u0be1\\u1583\\u158a\\u1590\\0\\u15b0\\u15b6\\u15bf\\0\\0\\0\\0\\u15c6\\u15db\\u15eb\\u165f\\u166d\\0\\u1695\\u169b\\u16b2\\u16b9\\0\\u16becute\\u803b\\xe1\\u40e1reve;\\u4103\\u0300;Ediuy\\u159c\\u159d\\u15a1\\u15a3\\u15a8\\u15ad\\u623e;\\uc000\\u223e\\u0333;\\u623frc\\u803b\\xe2\\u40e2te\\u80bb\\xb4\\u0306;\\u4430lig\\u803b\\xe6\\u40e6\\u0100;r\\xb2\\u15ba;\\uc000\\ud835\\udd1erave\\u803b\\xe0\\u40e0\\u0100ep\\u15ca\\u15d6\\u0100fp\\u15cf\\u15d4sym;\\u6135\\xe8\\u15d3ha;\\u43b1\\u0100ap\\u15dfc\\u0100cl\\u15e4\\u15e7r;\\u4101g;\\u6a3f\\u0264\\u15f0\\0\\0\\u160a\\u0280;adsv\\u15fa\\u15fb\\u15ff\\u1601\\u1607\\u6227nd;\\u6a55;\\u6a5clope;\\u6a58;\\u6a5a\\u0380;elmrsz\\u1618\\u1619\\u161b\\u161e\\u163f\\u164f\\u1659\\u6220;\\u69a4e\\xbb\\u1619sd\\u0100;a\\u1625\\u1626\\u6221\\u0461\\u1630\\u1632\\u1634\\u1636\\u1638\\u163a\\u163c\\u163e;\\u69a8;\\u69a9;\\u69aa;\\u69ab;\\u69ac;\\u69ad;\\u69ae;\\u69aft\\u0100;v\\u1645\\u1646\\u621fb\\u0100;d\\u164c\\u164d\\u62be;\\u699d\\u0100pt\\u1654\\u1657h;\\u6222\\xbb\\xb9arr;\\u637c\\u0100gp\\u1663\\u1667on;\\u4105f;\\uc000\\ud835\\udd52\\u0380;Eaeiop\\u12c1\\u167b\\u167d\\u1682\\u1684\\u1687\\u168a;\\u6a70cir;\\u6a6f;\\u624ad;\\u624bs;\\u4027rox\\u0100;e\\u12c1\\u1692\\xf1\\u1683ing\\u803b\\xe5\\u40e5\\u0180cty\\u16a1\\u16a6\\u16a8r;\\uc000\\ud835\\udcb6;\\u402amp\\u0100;e\\u12c1\\u16af\\xf1\\u0288ilde\\u803b\\xe3\\u40e3ml\\u803b\\xe4\\u40e4\\u0100ci\\u16c2\\u16c8onin\\xf4\\u0272nt;\\u6a11\\u0800Nabcdefiklnoprsu\\u16ed\\u16f1\\u1730\\u173c\\u1743\\u1748\\u1778\\u177d\\u17e0\\u17e6\\u1839\\u1850\\u170d\\u193d\\u1948\\u1970ot;\\u6aed\\u0100cr\\u16f6\\u171ek\\u0200ceps\\u1700\\u1705\\u170d\\u1713ong;\\u624cpsilon;\\u43f6rime;\\u6035im\\u0100;e\\u171a\\u171b\\u623dq;\\u62cd\\u0176\\u1722\\u1726ee;\\u62bded\\u0100;g\\u172c\\u172d\\u6305e\\xbb\\u172drk\\u0100;t\\u135c\\u1737brk;\\u63b6\\u0100oy\\u1701\\u1741;\\u4431quo;\\u601e\\u0280cmprt\\u1753\\u175b\\u1761\\u1764\\u1768aus\\u0100;e\\u010a\\u0109ptyv;\\u69b0s\\xe9\\u170cno\\xf5\\u0113\\u0180ahw\\u176f\\u1771\\u1773;\\u43b2;\\u6136een;\\u626cr;\\uc000\\ud835\\udd1fg\\u0380costuvw\\u178d\\u179d\\u17b3\\u17c1\\u17d5\\u17db\\u17de\\u0180aiu\\u1794\\u1796\\u179a\\xf0\\u0760rc;\\u65efp\\xbb\\u1371\\u0180dpt\\u17a4\\u17a8\\u17adot;\\u6a00lus;\\u6a01imes;\\u6a02\\u0271\\u17b9\\0\\0\\u17becup;\\u6a06ar;\\u6605riangle\\u0100du\\u17cd\\u17d2own;\\u65bdp;\\u65b3plus;\\u6a04e\\xe5\\u1444\\xe5\\u14adarow;\\u690d\\u0180ako\\u17ed\\u1826\\u1835\\u0100cn\\u17f2\\u1823k\\u0180lst\\u17fa\\u05ab\\u1802ozenge;\\u69ebriangle\\u0200;dlr\\u1812\\u1813\\u1818\\u181d\\u65b4own;\\u65beeft;\\u65c2ight;\\u65b8k;\\u6423\\u01b1\\u182b\\0\\u1833\\u01b2\\u182f\\0\\u1831;\\u6592;\\u65914;\\u6593ck;\\u6588\\u0100eo\\u183e\\u184d\\u0100;q\\u1843\\u1846\\uc000=\\u20e5uiv;\\uc000\\u2261\\u20e5t;\\u6310\\u0200ptwx\\u1859\\u185e\\u1867\\u186cf;\\uc000\\ud835\\udd53\\u0100;t\\u13cb\\u1863om\\xbb\\u13cctie;\\u62c8\\u0600DHUVbdhmptuv\\u1885\\u1896\\u18aa\\u18bb\\u18d7\\u18db\\u18ec\\u18ff\\u1905\\u190a\\u1910\\u1921\\u0200LRlr\\u188e\\u1890\\u1892\\u1894;\\u6557;\\u6554;\\u6556;\\u6553\\u0280;DUdu\\u18a1\\u18a2\\u18a4\\u18a6\\u18a8\\u6550;\\u6566;\\u6569;\\u6564;\\u6567\\u0200LRlr\\u18b3\\u18b5\\u18b7\\u18b9;\\u655d;\\u655a;\\u655c;\\u6559\\u0380;HLRhlr\\u18ca\\u18cb\\u18cd\\u18cf\\u18d1\\u18d3\\u18d5\\u6551;\\u656c;\\u6563;\\u6560;\\u656b;\\u6562;\\u655fox;\\u69c9\\u0200LRlr\\u18e4\\u18e6\\u18e8\\u18ea;\\u6555;\\u6552;\\u6510;\\u650c\\u0280;DUdu\\u06bd\\u18f7\\u18f9\\u18fb\\u18fd;\\u6565;\\u6568;\\u652c;\\u6534inus;\\u629flus;\\u629eimes;\\u62a0\\u0200LRlr\\u1919\\u191b\\u191d\\u191f;\\u655b;\\u6558;\\u6518;\\u6514\\u0380;HLRhlr\\u1930\\u1931\\u1933\\u1935\\u1937\\u1939\\u193b\\u6502;\\u656a;\\u6561;\\u655e;\\u653c;\\u6524;\\u651c\\u0100ev\\u0123\\u1942bar\\u803b\\xa6\\u40a6\\u0200ceio\\u1951\\u1956\\u195a\\u1960r;\\uc000\\ud835\\udcb7mi;\\u604fm\\u0100;e\\u171a\\u171cl\\u0180;bh\\u1968\\u1969\\u196b\\u405c;\\u69c5sub;\\u67c8\\u016c\\u1974\\u197el\\u0100;e\\u1979\\u197a\\u6022t\\xbb\\u197ap\\u0180;Ee\\u012f\\u1985\\u1987;\\u6aae\\u0100;q\\u06dc\\u06db\\u0ce1\\u19a7\\0\\u19e8\\u1a11\\u1a15\\u1a32\\0\\u1a37\\u1a50\\0\\0\\u1ab4\\0\\0\\u1ac1\\0\\0\\u1b21\\u1b2e\\u1b4d\\u1b52\\0\\u1bfd\\0\\u1c0c\\u0180cpr\\u19ad\\u19b2\\u19ddute;\\u4107\\u0300;abcds\\u19bf\\u19c0\\u19c4\\u19ca\\u19d5\\u19d9\\u6229nd;\\u6a44rcup;\\u6a49\\u0100au\\u19cf\\u19d2p;\\u6a4bp;\\u6a47ot;\\u6a40;\\uc000\\u2229\\ufe00\\u0100eo\\u19e2\\u19e5t;\\u6041\\xee\\u0693\\u0200aeiu\\u19f0\\u19fb\\u1a01\\u1a05\\u01f0\\u19f5\\0\\u19f8s;\\u6a4don;\\u410ddil\\u803b\\xe7\\u40e7rc;\\u4109ps\\u0100;s\\u1a0c\\u1a0d\\u6a4cm;\\u6a50ot;\\u410b\\u0180dmn\\u1a1b\\u1a20\\u1a26il\\u80bb\\xb8\\u01adptyv;\\u69b2t\\u8100\\xa2;e\\u1a2d\\u1a2e\\u40a2r\\xe4\\u01b2r;\\uc000\\ud835\\udd20\\u0180cei\\u1a3d\\u1a40\\u1a4dy;\\u4447ck\\u0100;m\\u1a47\\u1a48\\u6713ark\\xbb\\u1a48;\\u43c7r\\u0380;Ecefms\\u1a5f\\u1a60\\u1a62\\u1a6b\\u1aa4\\u1aaa\\u1aae\\u65cb;\\u69c3\\u0180;el\\u1a69\\u1a6a\\u1a6d\\u42c6q;\\u6257e\\u0261\\u1a74\\0\\0\\u1a88rrow\\u0100lr\\u1a7c\\u1a81eft;\\u61baight;\\u61bb\\u0280RSacd\\u1a92\\u1a94\\u1a96\\u1a9a\\u1a9f\\xbb\\u0f47;\\u64c8st;\\u629birc;\\u629aash;\\u629dnint;\\u6a10id;\\u6aefcir;\\u69c2ubs\\u0100;u\\u1abb\\u1abc\\u6663it\\xbb\\u1abc\\u02ec\\u1ac7\\u1ad4\\u1afa\\0\\u1b0aon\\u0100;e\\u1acd\\u1ace\\u403a\\u0100;q\\xc7\\xc6\\u026d\\u1ad9\\0\\0\\u1ae2a\\u0100;t\\u1ade\\u1adf\\u402c;\\u4040\\u0180;fl\\u1ae8\\u1ae9\\u1aeb\\u6201\\xee\\u1160e\\u0100mx\\u1af1\\u1af6ent\\xbb\\u1ae9e\\xf3\\u024d\\u01e7\\u1afe\\0\\u1b07\\u0100;d\\u12bb\\u1b02ot;\\u6a6dn\\xf4\\u0246\\u0180fry\\u1b10\\u1b14\\u1b17;\\uc000\\ud835\\udd54o\\xe4\\u0254\\u8100\\xa9;s\\u0155\\u1b1dr;\\u6117\\u0100ao\\u1b25\\u1b29rr;\\u61b5ss;\\u6717\\u0100cu\\u1b32\\u1b37r;\\uc000\\ud835\\udcb8\\u0100bp\\u1b3c\\u1b44\\u0100;e\\u1b41\\u1b42\\u6acf;\\u6ad1\\u0100;e\\u1b49\\u1b4a\\u6ad0;\\u6ad2dot;\\u62ef\\u0380delprvw\\u1b60\\u1b6c\\u1b77\\u1b82\\u1bac\\u1bd4\\u1bf9arr\\u0100lr\\u1b68\\u1b6a;\\u6938;\\u6935\\u0270\\u1b72\\0\\0\\u1b75r;\\u62dec;\\u62dfarr\\u0100;p\\u1b7f\\u1b80\\u61b6;\\u693d\\u0300;bcdos\\u1b8f\\u1b90\\u1b96\\u1ba1\\u1ba5\\u1ba8\\u622arcap;\\u6a48\\u0100au\\u1b9b\\u1b9ep;\\u6a46p;\\u6a4aot;\\u628dr;\\u6a45;\\uc000\\u222a\\ufe00\\u0200alrv\\u1bb5\\u1bbf\\u1bde\\u1be3rr\\u0100;m\\u1bbc\\u1bbd\\u61b7;\\u693cy\\u0180evw\\u1bc7\\u1bd4\\u1bd8q\\u0270\\u1bce\\0\\0\\u1bd2re\\xe3\\u1b73u\\xe3\\u1b75ee;\\u62ceedge;\\u62cfen\\u803b\\xa4\\u40a4earrow\\u0100lr\\u1bee\\u1bf3eft\\xbb\\u1b80ight\\xbb\\u1bbde\\xe4\\u1bdd\\u0100ci\\u1c01\\u1c07onin\\xf4\\u01f7nt;\\u6231lcty;\\u632d\\u0980AHabcdefhijlorstuwz\\u1c38\\u1c3b\\u1c3f\\u1c5d\\u1c69\\u1c75\\u1c8a\\u1c9e\\u1cac\\u1cb7\\u1cfb\\u1cff\\u1d0d\\u1d7b\\u1d91\\u1dab\\u1dbb\\u1dc6\\u1dcdr\\xf2\\u0381ar;\\u6965\\u0200glrs\\u1c48\\u1c4d\\u1c52\\u1c54ger;\\u6020eth;\\u6138\\xf2\\u1133h\\u0100;v\\u1c5a\\u1c5b\\u6010\\xbb\\u090a\\u016b\\u1c61\\u1c67arow;\\u690fa\\xe3\\u0315\\u0100ay\\u1c6e\\u1c73ron;\\u410f;\\u4434\\u0180;ao\\u0332\\u1c7c\\u1c84\\u0100gr\\u02bf\\u1c81r;\\u61catseq;\\u6a77\\u0180glm\\u1c91\\u1c94\\u1c98\\u803b\\xb0\\u40b0ta;\\u43b4ptyv;\\u69b1\\u0100ir\\u1ca3\\u1ca8sht;\\u697f;\\uc000\\ud835\\udd21ar\\u0100lr\\u1cb3\\u1cb5\\xbb\\u08dc\\xbb\\u101e\\u0280aegsv\\u1cc2\\u0378\\u1cd6\\u1cdc\\u1ce0m\\u0180;os\\u0326\\u1cca\\u1cd4nd\\u0100;s\\u0326\\u1cd1uit;\\u6666amma;\\u43ddin;\\u62f2\\u0180;io\\u1ce7\\u1ce8\\u1cf8\\u40f7de\\u8100\\xf7;o\\u1ce7\\u1cf0ntimes;\\u62c7n\\xf8\\u1cf7cy;\\u4452c\\u026f\\u1d06\\0\\0\\u1d0arn;\\u631eop;\\u630d\\u0280lptuw\\u1d18\\u1d1d\\u1d22\\u1d49\\u1d55lar;\\u4024f;\\uc000\\ud835\\udd55\\u0280;emps\\u030b\\u1d2d\\u1d37\\u1d3d\\u1d42q\\u0100;d\\u0352\\u1d33ot;\\u6251inus;\\u6238lus;\\u6214quare;\\u62a1blebarwedg\\xe5\\xfan\\u0180adh\\u112e\\u1d5d\\u1d67ownarrow\\xf3\\u1c83arpoon\\u0100lr\\u1d72\\u1d76ef\\xf4\\u1cb4igh\\xf4\\u1cb6\\u0162\\u1d7f\\u1d85karo\\xf7\\u0f42\\u026f\\u1d8a\\0\\0\\u1d8ern;\\u631fop;\\u630c\\u0180cot\\u1d98\\u1da3\\u1da6\\u0100ry\\u1d9d\\u1da1;\\uc000\\ud835\\udcb9;\\u4455l;\\u69f6rok;\\u4111\\u0100dr\\u1db0\\u1db4ot;\\u62f1i\\u0100;f\\u1dba\\u1816\\u65bf\\u0100ah\\u1dc0\\u1dc3r\\xf2\\u0429a\\xf2\\u0fa6angle;\\u69a6\\u0100ci\\u1dd2\\u1dd5y;\\u445fgrarr;\\u67ff\\u0900Dacdefglmnopqrstux\\u1e01\\u1e09\\u1e19\\u1e38\\u0578\\u1e3c\\u1e49\\u1e61\\u1e7e\\u1ea5\\u1eaf\\u1ebd\\u1ee1\\u1f2a\\u1f37\\u1f44\\u1f4e\\u1f5a\\u0100Do\\u1e06\\u1d34o\\xf4\\u1c89\\u0100cs\\u1e0e\\u1e14ute\\u803b\\xe9\\u40e9ter;\\u6a6e\\u0200aioy\\u1e22\\u1e27\\u1e31\\u1e36ron;\\u411br\\u0100;c\\u1e2d\\u1e2e\\u6256\\u803b\\xea\\u40ealon;\\u6255;\\u444dot;\\u4117\\u0100Dr\\u1e41\\u1e45ot;\\u6252;\\uc000\\ud835\\udd22\\u0180;rs\\u1e50\\u1e51\\u1e57\\u6a9aave\\u803b\\xe8\\u40e8\\u0100;d\\u1e5c\\u1e5d\\u6a96ot;\\u6a98\\u0200;ils\\u1e6a\\u1e6b\\u1e72\\u1e74\\u6a99nters;\\u63e7;\\u6113\\u0100;d\\u1e79\\u1e7a\\u6a95ot;\\u6a97\\u0180aps\\u1e85\\u1e89\\u1e97cr;\\u4113ty\\u0180;sv\\u1e92\\u1e93\\u1e95\\u6205et\\xbb\\u1e93p\\u01001;\\u1e9d\\u1ea4\\u0133\\u1ea1\\u1ea3;\\u6004;\\u6005\\u6003\\u0100gs\\u1eaa\\u1eac;\\u414bp;\\u6002\\u0100gp\\u1eb4\\u1eb8on;\\u4119f;\\uc000\\ud835\\udd56\\u0180als\\u1ec4\\u1ece\\u1ed2r\\u0100;s\\u1eca\\u1ecb\\u62d5l;\\u69e3us;\\u6a71i\\u0180;lv\\u1eda\\u1edb\\u1edf\\u43b5on\\xbb\\u1edb;\\u43f5\\u0200csuv\\u1eea\\u1ef3\\u1f0b\\u1f23\\u0100io\\u1eef\\u1e31rc\\xbb\\u1e2e\\u0269\\u1ef9\\0\\0\\u1efb\\xed\\u0548ant\\u0100gl\\u1f02\\u1f06tr\\xbb\\u1e5dess\\xbb\\u1e7a\\u0180aei\\u1f12\\u1f16\\u1f1als;\\u403dst;\\u625fv\\u0100;D\\u0235\\u1f20D;\\u6a78parsl;\\u69e5\\u0100Da\\u1f2f\\u1f33ot;\\u6253rr;\\u6971\\u0180cdi\\u1f3e\\u1f41\\u1ef8r;\\u612fo\\xf4\\u0352\\u0100ah\\u1f49\\u1f4b;\\u43b7\\u803b\\xf0\\u40f0\\u0100mr\\u1f53\\u1f57l\\u803b\\xeb\\u40ebo;\\u60ac\\u0180cip\\u1f61\\u1f64\\u1f67l;\\u4021s\\xf4\\u056e\\u0100eo\\u1f6c\\u1f74ctatio\\xee\\u0559nential\\xe5\\u0579\\u09e1\\u1f92\\0\\u1f9e\\0\\u1fa1\\u1fa7\\0\\0\\u1fc6\\u1fcc\\0\\u1fd3\\0\\u1fe6\\u1fea\\u2000\\0\\u2008\\u205allingdotse\\xf1\\u1e44y;\\u4444male;\\u6640\\u0180ilr\\u1fad\\u1fb3\\u1fc1lig;\\u8000\\ufb03\\u0269\\u1fb9\\0\\0\\u1fbdg;\\u8000\\ufb00ig;\\u8000\\ufb04;\\uc000\\ud835\\udd23lig;\\u8000\\ufb01lig;\\uc000fj\\u0180alt\\u1fd9\\u1fdc\\u1fe1t;\\u666dig;\\u8000\\ufb02ns;\\u65b1of;\\u4192\\u01f0\\u1fee\\0\\u1ff3f;\\uc000\\ud835\\udd57\\u0100ak\\u05bf\\u1ff7\\u0100;v\\u1ffc\\u1ffd\\u62d4;\\u6ad9artint;\\u6a0d\\u0100ao\\u200c\\u2055\\u0100cs\\u2011\\u2052\\u03b1\\u201a\\u2030\\u2038\\u2045\\u2048\\0\\u2050\\u03b2\\u2022\\u2025\\u2027\\u202a\\u202c\\0\\u202e\\u803b\\xbd\\u40bd;\\u6153\\u803b\\xbc\\u40bc;\\u6155;\\u6159;\\u615b\\u01b3\\u2034\\0\\u2036;\\u6154;\\u6156\\u02b4\\u203e\\u2041\\0\\0\\u2043\\u803b\\xbe\\u40be;\\u6157;\\u615c5;\\u6158\\u01b6\\u204c\\0\\u204e;\\u615a;\\u615d8;\\u615el;\\u6044wn;\\u6322cr;\\uc000\\ud835\\udcbb\\u0880Eabcdefgijlnorstv\\u2082\\u2089\\u209f\\u20a5\\u20b0\\u20b4\\u20f0\\u20f5\\u20fa\\u20ff\\u2103\\u2112\\u2138\\u0317\\u213e\\u2152\\u219e\\u0100;l\\u064d\\u2087;\\u6a8c\\u0180cmp\\u2090\\u2095\\u209dute;\\u41f5ma\\u0100;d\\u209c\\u1cda\\u43b3;\\u6a86reve;\\u411f\\u0100iy\\u20aa\\u20aerc;\\u411d;\\u4433ot;\\u4121\\u0200;lqs\\u063e\\u0642\\u20bd\\u20c9\\u0180;qs\\u063e\\u064c\\u20c4lan\\xf4\\u0665\\u0200;cdl\\u0665\\u20d2\\u20d5\\u20e5c;\\u6aa9ot\\u0100;o\\u20dc\\u20dd\\u6a80\\u0100;l\\u20e2\\u20e3\\u6a82;\\u6a84\\u0100;e\\u20ea\\u20ed\\uc000\\u22db\\ufe00s;\\u6a94r;\\uc000\\ud835\\udd24\\u0100;g\\u0673\\u061bmel;\\u6137cy;\\u4453\\u0200;Eaj\\u065a\\u210c\\u210e\\u2110;\\u6a92;\\u6aa5;\\u6aa4\\u0200Eaes\\u211b\\u211d\\u2129\\u2134;\\u6269p\\u0100;p\\u2123\\u2124\\u6a8arox\\xbb\\u2124\\u0100;q\\u212e\\u212f\\u6a88\\u0100;q\\u212e\\u211bim;\\u62e7pf;\\uc000\\ud835\\udd58\\u0100ci\\u2143\\u2146r;\\u610am\\u0180;el\\u066b\\u214e\\u2150;\\u6a8e;\\u6a90\\u8300>;cdlqr\\u05ee\\u2160\\u216a\\u216e\\u2173\\u2179\\u0100ci\\u2165\\u2167;\\u6aa7r;\\u6a7aot;\\u62d7Par;\\u6995uest;\\u6a7c\\u0280adels\\u2184\\u216a\\u2190\\u0656\\u219b\\u01f0\\u2189\\0\\u218epro\\xf8\\u209er;\\u6978q\\u0100lq\\u063f\\u2196les\\xf3\\u2088i\\xed\\u066b\\u0100en\\u21a3\\u21adrtneqq;\\uc000\\u2269\\ufe00\\xc5\\u21aa\\u0500Aabcefkosy\\u21c4\\u21c7\\u21f1\\u21f5\\u21fa\\u2218\\u221d\\u222f\\u2268\\u227dr\\xf2\\u03a0\\u0200ilmr\\u21d0\\u21d4\\u21d7\\u21dbrs\\xf0\\u1484f\\xbb\\u2024il\\xf4\\u06a9\\u0100dr\\u21e0\\u21e4cy;\\u444a\\u0180;cw\\u08f4\\u21eb\\u21efir;\\u6948;\\u61adar;\\u610firc;\\u4125\\u0180alr\\u2201\\u220e\\u2213rts\\u0100;u\\u2209\\u220a\\u6665it\\xbb\\u220alip;\\u6026con;\\u62b9r;\\uc000\\ud835\\udd25s\\u0100ew\\u2223\\u2229arow;\\u6925arow;\\u6926\\u0280amopr\\u223a\\u223e\\u2243\\u225e\\u2263rr;\\u61fftht;\\u623bk\\u0100lr\\u2249\\u2253eftarrow;\\u61a9ightarrow;\\u61aaf;\\uc000\\ud835\\udd59bar;\\u6015\\u0180clt\\u226f\\u2274\\u2278r;\\uc000\\ud835\\udcbdas\\xe8\\u21f4rok;\\u4127\\u0100bp\\u2282\\u2287ull;\\u6043hen\\xbb\\u1c5b\\u0ae1\\u22a3\\0\\u22aa\\0\\u22b8\\u22c5\\u22ce\\0\\u22d5\\u22f3\\0\\0\\u22f8\\u2322\\u2367\\u2362\\u237f\\0\\u2386\\u23aa\\u23b4cute\\u803b\\xed\\u40ed\\u0180;iy\\u0771\\u22b0\\u22b5rc\\u803b\\xee\\u40ee;\\u4438\\u0100cx\\u22bc\\u22bfy;\\u4435cl\\u803b\\xa1\\u40a1\\u0100fr\\u039f\\u22c9;\\uc000\\ud835\\udd26rave\\u803b\\xec\\u40ec\\u0200;ino\\u073e\\u22dd\\u22e9\\u22ee\\u0100in\\u22e2\\u22e6nt;\\u6a0ct;\\u622dfin;\\u69dcta;\\u6129lig;\\u4133\\u0180aop\\u22fe\\u231a\\u231d\\u0180cgt\\u2305\\u2308\\u2317r;\\u412b\\u0180elp\\u071f\\u230f\\u2313in\\xe5\\u078ear\\xf4\\u0720h;\\u4131f;\\u62b7ed;\\u41b5\\u0280;cfot\\u04f4\\u232c\\u2331\\u233d\\u2341are;\\u6105in\\u0100;t\\u2338\\u2339\\u621eie;\\u69dddo\\xf4\\u2319\\u0280;celp\\u0757\\u234c\\u2350\\u235b\\u2361al;\\u62ba\\u0100gr\\u2355\\u2359er\\xf3\\u1563\\xe3\\u234darhk;\\u6a17rod;\\u6a3c\\u0200cgpt\\u236f\\u2372\\u2376\\u237by;\\u4451on;\\u412ff;\\uc000\\ud835\\udd5aa;\\u43b9uest\\u803b\\xbf\\u40bf\\u0100ci\\u238a\\u238fr;\\uc000\\ud835\\udcben\\u0280;Edsv\\u04f4\\u239b\\u239d\\u23a1\\u04f3;\\u62f9ot;\\u62f5\\u0100;v\\u23a6\\u23a7\\u62f4;\\u62f3\\u0100;i\\u0777\\u23aelde;\\u4129\\u01eb\\u23b8\\0\\u23bccy;\\u4456l\\u803b\\xef\\u40ef\\u0300cfmosu\\u23cc\\u23d7\\u23dc\\u23e1\\u23e7\\u23f5\\u0100iy\\u23d1\\u23d5rc;\\u4135;\\u4439r;\\uc000\\ud835\\udd27ath;\\u4237pf;\\uc000\\ud835\\udd5b\\u01e3\\u23ec\\0\\u23f1r;\\uc000\\ud835\\udcbfrcy;\\u4458kcy;\\u4454\\u0400acfghjos\\u240b\\u2416\\u2422\\u2427\\u242d\\u2431\\u2435\\u243bppa\\u0100;v\\u2413\\u2414\\u43ba;\\u43f0\\u0100ey\\u241b\\u2420dil;\\u4137;\\u443ar;\\uc000\\ud835\\udd28reen;\\u4138cy;\\u4445cy;\\u445cpf;\\uc000\\ud835\\udd5ccr;\\uc000\\ud835\\udcc0\\u0b80ABEHabcdefghjlmnoprstuv\\u2470\\u2481\\u2486\\u248d\\u2491\\u250e\\u253d\\u255a\\u2580\\u264e\\u265e\\u2665\\u2679\\u267d\\u269a\\u26b2\\u26d8\\u275d\\u2768\\u278b\\u27c0\\u2801\\u2812\\u0180art\\u2477\\u247a\\u247cr\\xf2\\u09c6\\xf2\\u0395ail;\\u691barr;\\u690e\\u0100;g\\u0994\\u248b;\\u6a8bar;\\u6962\\u0963\\u24a5\\0\\u24aa\\0\\u24b1\\0\\0\\0\\0\\0\\u24b5\\u24ba\\0\\u24c6\\u24c8\\u24cd\\0\\u24f9ute;\\u413amptyv;\\u69b4ra\\xee\\u084cbda;\\u43bbg\\u0180;dl\\u088e\\u24c1\\u24c3;\\u6991\\xe5\\u088e;\\u6a85uo\\u803b\\xab\\u40abr\\u0400;bfhlpst\\u0899\\u24de\\u24e6\\u24e9\\u24eb\\u24ee\\u24f1\\u24f5\\u0100;f\\u089d\\u24e3s;\\u691fs;\\u691d\\xeb\\u2252p;\\u61abl;\\u6939im;\\u6973l;\\u61a2\\u0180;ae\\u24ff\\u2500\\u2504\\u6aabil;\\u6919\\u0100;s\\u2509\\u250a\\u6aad;\\uc000\\u2aad\\ufe00\\u0180abr\\u2515\\u2519\\u251drr;\\u690crk;\\u6772\\u0100ak\\u2522\\u252cc\\u0100ek\\u2528\\u252a;\\u407b;\\u405b\\u0100es\\u2531\\u2533;\\u698bl\\u0100du\\u2539\\u253b;\\u698f;\\u698d\\u0200aeuy\\u2546\\u254b\\u2556\\u2558ron;\\u413e\\u0100di\\u2550\\u2554il;\\u413c\\xec\\u08b0\\xe2\\u2529;\\u443b\\u0200cqrs\\u2563\\u2566\\u256d\\u257da;\\u6936uo\\u0100;r\\u0e19\\u1746\\u0100du\\u2572\\u2577har;\\u6967shar;\\u694bh;\\u61b2\\u0280;fgqs\\u258b\\u258c\\u0989\\u25f3\\u25ff\\u6264t\\u0280ahlrt\\u2598\\u25a4\\u25b7\\u25c2\\u25e8rrow\\u0100;t\\u0899\\u25a1a\\xe9\\u24f6arpoon\\u0100du\\u25af\\u25b4own\\xbb\\u045ap\\xbb\\u0966eftarrows;\\u61c7ight\\u0180ahs\\u25cd\\u25d6\\u25derrow\\u0100;s\\u08f4\\u08a7arpoon\\xf3\\u0f98quigarro\\xf7\\u21f0hreetimes;\\u62cb\\u0180;qs\\u258b\\u0993\\u25falan\\xf4\\u09ac\\u0280;cdgs\\u09ac\\u260a\\u260d\\u261d\\u2628c;\\u6aa8ot\\u0100;o\\u2614\\u2615\\u6a7f\\u0100;r\\u261a\\u261b\\u6a81;\\u6a83\\u0100;e\\u2622\\u2625\\uc000\\u22da\\ufe00s;\\u6a93\\u0280adegs\\u2633\\u2639\\u263d\\u2649\\u264bppro\\xf8\\u24c6ot;\\u62d6q\\u0100gq\\u2643\\u2645\\xf4\\u0989gt\\xf2\\u248c\\xf4\\u099bi\\xed\\u09b2\\u0180ilr\\u2655\\u08e1\\u265asht;\\u697c;\\uc000\\ud835\\udd29\\u0100;E\\u099c\\u2663;\\u6a91\\u0161\\u2669\\u2676r\\u0100du\\u25b2\\u266e\\u0100;l\\u0965\\u2673;\\u696alk;\\u6584cy;\\u4459\\u0280;acht\\u0a48\\u2688\\u268b\\u2691\\u2696r\\xf2\\u25c1orne\\xf2\\u1d08ard;\\u696bri;\\u65fa\\u0100io\\u269f\\u26a4dot;\\u4140ust\\u0100;a\\u26ac\\u26ad\\u63b0che\\xbb\\u26ad\\u0200Eaes\\u26bb\\u26bd\\u26c9\\u26d4;\\u6268p\\u0100;p\\u26c3\\u26c4\\u6a89rox\\xbb\\u26c4\\u0100;q\\u26ce\\u26cf\\u6a87\\u0100;q\\u26ce\\u26bbim;\\u62e6\\u0400abnoptwz\\u26e9\\u26f4\\u26f7\\u271a\\u272f\\u2741\\u2747\\u2750\\u0100nr\\u26ee\\u26f1g;\\u67ecr;\\u61fdr\\xeb\\u08c1g\\u0180lmr\\u26ff\\u270d\\u2714eft\\u0100ar\\u09e6\\u2707ight\\xe1\\u09f2apsto;\\u67fcight\\xe1\\u09fdparrow\\u0100lr\\u2725\\u2729ef\\xf4\\u24edight;\\u61ac\\u0180afl\\u2736\\u2739\\u273dr;\\u6985;\\uc000\\ud835\\udd5dus;\\u6a2dimes;\\u6a34\\u0161\\u274b\\u274fst;\\u6217\\xe1\\u134e\\u0180;ef\\u2757\\u2758\\u1800\\u65cange\\xbb\\u2758ar\\u0100;l\\u2764\\u2765\\u4028t;\\u6993\\u0280achmt\\u2773\\u2776\\u277c\\u2785\\u2787r\\xf2\\u08a8orne\\xf2\\u1d8car\\u0100;d\\u0f98\\u2783;\\u696d;\\u600eri;\\u62bf\\u0300achiqt\\u2798\\u279d\\u0a40\\u27a2\\u27ae\\u27bbquo;\\u6039r;\\uc000\\ud835\\udcc1m\\u0180;eg\\u09b2\\u27aa\\u27ac;\\u6a8d;\\u6a8f\\u0100bu\\u252a\\u27b3o\\u0100;r\\u0e1f\\u27b9;\\u601arok;\\u4142\\u8400<;cdhilqr\\u082b\\u27d2\\u2639\\u27dc\\u27e0\\u27e5\\u27ea\\u27f0\\u0100ci\\u27d7\\u27d9;\\u6aa6r;\\u6a79re\\xe5\\u25f2mes;\\u62c9arr;\\u6976uest;\\u6a7b\\u0100Pi\\u27f5\\u27f9ar;\\u6996\\u0180;ef\\u2800\\u092d\\u181b\\u65c3r\\u0100du\\u2807\\u280dshar;\\u694ahar;\\u6966\\u0100en\\u2817\\u2821rtneqq;\\uc000\\u2268\\ufe00\\xc5\\u281e\\u0700Dacdefhilnopsu\\u2840\\u2845\\u2882\\u288e\\u2893\\u28a0\\u28a5\\u28a8\\u28da\\u28e2\\u28e4\\u0a83\\u28f3\\u2902Dot;\\u623a\\u0200clpr\\u284e\\u2852\\u2863\\u287dr\\u803b\\xaf\\u40af\\u0100et\\u2857\\u2859;\\u6642\\u0100;e\\u285e\\u285f\\u6720se\\xbb\\u285f\\u0100;s\\u103b\\u2868to\\u0200;dlu\\u103b\\u2873\\u2877\\u287bow\\xee\\u048cef\\xf4\\u090f\\xf0\\u13d1ker;\\u65ae\\u0100oy\\u2887\\u288cmma;\\u6a29;\\u443cash;\\u6014asuredangle\\xbb\\u1626r;\\uc000\\ud835\\udd2ao;\\u6127\\u0180cdn\\u28af\\u28b4\\u28c9ro\\u803b\\xb5\\u40b5\\u0200;acd\\u1464\\u28bd\\u28c0\\u28c4s\\xf4\\u16a7ir;\\u6af0ot\\u80bb\\xb7\\u01b5us\\u0180;bd\\u28d2\\u1903\\u28d3\\u6212\\u0100;u\\u1d3c\\u28d8;\\u6a2a\\u0163\\u28de\\u28e1p;\\u6adb\\xf2\\u2212\\xf0\\u0a81\\u0100dp\\u28e9\\u28eeels;\\u62a7f;\\uc000\\ud835\\udd5e\\u0100ct\\u28f8\\u28fdr;\\uc000\\ud835\\udcc2pos\\xbb\\u159d\\u0180;lm\\u2909\\u290a\\u290d\\u43bctimap;\\u62b8\\u0c00GLRVabcdefghijlmoprstuvw\\u2942\\u2953\\u297e\\u2989\\u2998\\u29da\\u29e9\\u2a15\\u2a1a\\u2a58\\u2a5d\\u2a83\\u2a95\\u2aa4\\u2aa8\\u2b04\\u2b07\\u2b44\\u2b7f\\u2bae\\u2c34\\u2c67\\u2c7c\\u2ce9\\u0100gt\\u2947\\u294b;\\uc000\\u22d9\\u0338\\u0100;v\\u2950\\u0bcf\\uc000\\u226b\\u20d2\\u0180elt\\u295a\\u2972\\u2976ft\\u0100ar\\u2961\\u2967rrow;\\u61cdightarrow;\\u61ce;\\uc000\\u22d8\\u0338\\u0100;v\\u297b\\u0c47\\uc000\\u226a\\u20d2ightarrow;\\u61cf\\u0100Dd\\u298e\\u2993ash;\\u62afash;\\u62ae\\u0280bcnpt\\u29a3\\u29a7\\u29ac\\u29b1\\u29ccla\\xbb\\u02deute;\\u4144g;\\uc000\\u2220\\u20d2\\u0280;Eiop\\u0d84\\u29bc\\u29c0\\u29c5\\u29c8;\\uc000\\u2a70\\u0338d;\\uc000\\u224b\\u0338s;\\u4149ro\\xf8\\u0d84ur\\u0100;a\\u29d3\\u29d4\\u666el\\u0100;s\\u29d3\\u0b38\\u01f3\\u29df\\0\\u29e3p\\u80bb\\xa0\\u0b37mp\\u0100;e\\u0bf9\\u0c00\\u0280aeouy\\u29f4\\u29fe\\u2a03\\u2a10\\u2a13\\u01f0\\u29f9\\0\\u29fb;\\u6a43on;\\u4148dil;\\u4146ng\\u0100;d\\u0d7e\\u2a0aot;\\uc000\\u2a6d\\u0338p;\\u6a42;\\u443dash;\\u6013\\u0380;Aadqsx\\u0b92\\u2a29\\u2a2d\\u2a3b\\u2a41\\u2a45\\u2a50rr;\\u61d7r\\u0100hr\\u2a33\\u2a36k;\\u6924\\u0100;o\\u13f2\\u13f0ot;\\uc000\\u2250\\u0338ui\\xf6\\u0b63\\u0100ei\\u2a4a\\u2a4ear;\\u6928\\xed\\u0b98ist\\u0100;s\\u0ba0\\u0b9fr;\\uc000\\ud835\\udd2b\\u0200Eest\\u0bc5\\u2a66\\u2a79\\u2a7c\\u0180;qs\\u0bbc\\u2a6d\\u0be1\\u0180;qs\\u0bbc\\u0bc5\\u2a74lan\\xf4\\u0be2i\\xed\\u0bea\\u0100;r\\u0bb6\\u2a81\\xbb\\u0bb7\\u0180Aap\\u2a8a\\u2a8d\\u2a91r\\xf2\\u2971rr;\\u61aear;\\u6af2\\u0180;sv\\u0f8d\\u2a9c\\u0f8c\\u0100;d\\u2aa1\\u2aa2\\u62fc;\\u62facy;\\u445a\\u0380AEadest\\u2ab7\\u2aba\\u2abe\\u2ac2\\u2ac5\\u2af6\\u2af9r\\xf2\\u2966;\\uc000\\u2266\\u0338rr;\\u619ar;\\u6025\\u0200;fqs\\u0c3b\\u2ace\\u2ae3\\u2aeft\\u0100ar\\u2ad4\\u2ad9rro\\xf7\\u2ac1ightarro\\xf7\\u2a90\\u0180;qs\\u0c3b\\u2aba\\u2aealan\\xf4\\u0c55\\u0100;s\\u0c55\\u2af4\\xbb\\u0c36i\\xed\\u0c5d\\u0100;r\\u0c35\\u2afei\\u0100;e\\u0c1a\\u0c25i\\xe4\\u0d90\\u0100pt\\u2b0c\\u2b11f;\\uc000\\ud835\\udd5f\\u8180\\xac;in\\u2b19\\u2b1a\\u2b36\\u40acn\\u0200;Edv\\u0b89\\u2b24\\u2b28\\u2b2e;\\uc000\\u22f9\\u0338ot;\\uc000\\u22f5\\u0338\\u01e1\\u0b89\\u2b33\\u2b35;\\u62f7;\\u62f6i\\u0100;v\\u0cb8\\u2b3c\\u01e1\\u0cb8\\u2b41\\u2b43;\\u62fe;\\u62fd\\u0180aor\\u2b4b\\u2b63\\u2b69r\\u0200;ast\\u0b7b\\u2b55\\u2b5a\\u2b5flle\\xec\\u0b7bl;\\uc000\\u2afd\\u20e5;\\uc000\\u2202\\u0338lint;\\u6a14\\u0180;ce\\u0c92\\u2b70\\u2b73u\\xe5\\u0ca5\\u0100;c\\u0c98\\u2b78\\u0100;e\\u0c92\\u2b7d\\xf1\\u0c98\\u0200Aait\\u2b88\\u2b8b\\u2b9d\\u2ba7r\\xf2\\u2988rr\\u0180;cw\\u2b94\\u2b95\\u2b99\\u619b;\\uc000\\u2933\\u0338;\\uc000\\u219d\\u0338ghtarrow\\xbb\\u2b95ri\\u0100;e\\u0ccb\\u0cd6\\u0380chimpqu\\u2bbd\\u2bcd\\u2bd9\\u2b04\\u0b78\\u2be4\\u2bef\\u0200;cer\\u0d32\\u2bc6\\u0d37\\u2bc9u\\xe5\\u0d45;\\uc000\\ud835\\udcc3ort\\u026d\\u2b05\\0\\0\\u2bd6ar\\xe1\\u2b56m\\u0100;e\\u0d6e\\u2bdf\\u0100;q\\u0d74\\u0d73su\\u0100bp\\u2beb\\u2bed\\xe5\\u0cf8\\xe5\\u0d0b\\u0180bcp\\u2bf6\\u2c11\\u2c19\\u0200;Ees\\u2bff\\u2c00\\u0d22\\u2c04\\u6284;\\uc000\\u2ac5\\u0338et\\u0100;e\\u0d1b\\u2c0bq\\u0100;q\\u0d23\\u2c00c\\u0100;e\\u0d32\\u2c17\\xf1\\u0d38\\u0200;Ees\\u2c22\\u2c23\\u0d5f\\u2c27\\u6285;\\uc000\\u2ac6\\u0338et\\u0100;e\\u0d58\\u2c2eq\\u0100;q\\u0d60\\u2c23\\u0200gilr\\u2c3d\\u2c3f\\u2c45\\u2c47\\xec\\u0bd7lde\\u803b\\xf1\\u40f1\\xe7\\u0c43iangle\\u0100lr\\u2c52\\u2c5ceft\\u0100;e\\u0c1a\\u2c5a\\xf1\\u0c26ight\\u0100;e\\u0ccb\\u2c65\\xf1\\u0cd7\\u0100;m\\u2c6c\\u2c6d\\u43bd\\u0180;es\\u2c74\\u2c75\\u2c79\\u4023ro;\\u6116p;\\u6007\\u0480DHadgilrs\\u2c8f\\u2c94\\u2c99\\u2c9e\\u2ca3\\u2cb0\\u2cb6\\u2cd3\\u2ce3ash;\\u62adarr;\\u6904p;\\uc000\\u224d\\u20d2ash;\\u62ac\\u0100et\\u2ca8\\u2cac;\\uc000\\u2265\\u20d2;\\uc000>\\u20d2nfin;\\u69de\\u0180Aet\\u2cbd\\u2cc1\\u2cc5rr;\\u6902;\\uc000\\u2264\\u20d2\\u0100;r\\u2cca\\u2ccd\\uc000<\\u20d2ie;\\uc000\\u22b4\\u20d2\\u0100At\\u2cd8\\u2cdcrr;\\u6903rie;\\uc000\\u22b5\\u20d2im;\\uc000\\u223c\\u20d2\\u0180Aan\\u2cf0\\u2cf4\\u2d02rr;\\u61d6r\\u0100hr\\u2cfa\\u2cfdk;\\u6923\\u0100;o\\u13e7\\u13e5ear;\\u6927\\u1253\\u1a95\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\u2d2d\\0\\u2d38\\u2d48\\u2d60\\u2d65\\u2d72\\u2d84\\u1b07\\0\\0\\u2d8d\\u2dab\\0\\u2dc8\\u2dce\\0\\u2ddc\\u2e19\\u2e2b\\u2e3e\\u2e43\\u0100cs\\u2d31\\u1a97ute\\u803b\\xf3\\u40f3\\u0100iy\\u2d3c\\u2d45r\\u0100;c\\u1a9e\\u2d42\\u803b\\xf4\\u40f4;\\u443e\\u0280abios\\u1aa0\\u2d52\\u2d57\\u01c8\\u2d5alac;\\u4151v;\\u6a38old;\\u69bclig;\\u4153\\u0100cr\\u2d69\\u2d6dir;\\u69bf;\\uc000\\ud835\\udd2c\\u036f\\u2d79\\0\\0\\u2d7c\\0\\u2d82n;\\u42dbave\\u803b\\xf2\\u40f2;\\u69c1\\u0100bm\\u2d88\\u0df4ar;\\u69b5\\u0200acit\\u2d95\\u2d98\\u2da5\\u2da8r\\xf2\\u1a80\\u0100ir\\u2d9d\\u2da0r;\\u69beoss;\\u69bbn\\xe5\\u0e52;\\u69c0\\u0180aei\\u2db1\\u2db5\\u2db9cr;\\u414dga;\\u43c9\\u0180cdn\\u2dc0\\u2dc5\\u01cdron;\\u43bf;\\u69b6pf;\\uc000\\ud835\\udd60\\u0180ael\\u2dd4\\u2dd7\\u01d2r;\\u69b7rp;\\u69b9\\u0380;adiosv\\u2dea\\u2deb\\u2dee\\u2e08\\u2e0d\\u2e10\\u2e16\\u6228r\\xf2\\u1a86\\u0200;efm\\u2df7\\u2df8\\u2e02\\u2e05\\u6a5dr\\u0100;o\\u2dfe\\u2dff\\u6134f\\xbb\\u2dff\\u803b\\xaa\\u40aa\\u803b\\xba\\u40bagof;\\u62b6r;\\u6a56lope;\\u6a57;\\u6a5b\\u0180clo\\u2e1f\\u2e21\\u2e27\\xf2\\u2e01ash\\u803b\\xf8\\u40f8l;\\u6298i\\u016c\\u2e2f\\u2e34de\\u803b\\xf5\\u40f5es\\u0100;a\\u01db\\u2e3as;\\u6a36ml\\u803b\\xf6\\u40f6bar;\\u633d\\u0ae1\\u2e5e\\0\\u2e7d\\0\\u2e80\\u2e9d\\0\\u2ea2\\u2eb9\\0\\0\\u2ecb\\u0e9c\\0\\u2f13\\0\\0\\u2f2b\\u2fbc\\0\\u2fc8r\\u0200;ast\\u0403\\u2e67\\u2e72\\u0e85\\u8100\\xb6;l\\u2e6d\\u2e6e\\u40b6le\\xec\\u0403\\u0269\\u2e78\\0\\0\\u2e7bm;\\u6af3;\\u6afdy;\\u443fr\\u0280cimpt\\u2e8b\\u2e8f\\u2e93\\u1865\\u2e97nt;\\u4025od;\\u402eil;\\u6030enk;\\u6031r;\\uc000\\ud835\\udd2d\\u0180imo\\u2ea8\\u2eb0\\u2eb4\\u0100;v\\u2ead\\u2eae\\u43c6;\\u43d5ma\\xf4\\u0a76ne;\\u660e\\u0180;tv\\u2ebf\\u2ec0\\u2ec8\\u43c0chfork\\xbb\\u1ffd;\\u43d6\\u0100au\\u2ecf\\u2edfn\\u0100ck\\u2ed5\\u2eddk\\u0100;h\\u21f4\\u2edb;\\u610e\\xf6\\u21f4s\\u0480;abcdemst\\u2ef3\\u2ef4\\u1908\\u2ef9\\u2efd\\u2f04\\u2f06\\u2f0a\\u2f0e\\u402bcir;\\u6a23ir;\\u6a22\\u0100ou\\u1d40\\u2f02;\\u6a25;\\u6a72n\\u80bb\\xb1\\u0e9dim;\\u6a26wo;\\u6a27\\u0180ipu\\u2f19\\u2f20\\u2f25ntint;\\u6a15f;\\uc000\\ud835\\udd61nd\\u803b\\xa3\\u40a3\\u0500;Eaceinosu\\u0ec8\\u2f3f\\u2f41\\u2f44\\u2f47\\u2f81\\u2f89\\u2f92\\u2f7e\\u2fb6;\\u6ab3p;\\u6ab7u\\xe5\\u0ed9\\u0100;c\\u0ece\\u2f4c\\u0300;acens\\u0ec8\\u2f59\\u2f5f\\u2f66\\u2f68\\u2f7eppro\\xf8\\u2f43urlye\\xf1\\u0ed9\\xf1\\u0ece\\u0180aes\\u2f6f\\u2f76\\u2f7approx;\\u6ab9qq;\\u6ab5im;\\u62e8i\\xed\\u0edfme\\u0100;s\\u2f88\\u0eae\\u6032\\u0180Eas\\u2f78\\u2f90\\u2f7a\\xf0\\u2f75\\u0180dfp\\u0eec\\u2f99\\u2faf\\u0180als\\u2fa0\\u2fa5\\u2faalar;\\u632eine;\\u6312urf;\\u6313\\u0100;t\\u0efb\\u2fb4\\xef\\u0efbrel;\\u62b0\\u0100ci\\u2fc0\\u2fc5r;\\uc000\\ud835\\udcc5;\\u43c8ncsp;\\u6008\\u0300fiopsu\\u2fda\\u22e2\\u2fdf\\u2fe5\\u2feb\\u2ff1r;\\uc000\\ud835\\udd2epf;\\uc000\\ud835\\udd62rime;\\u6057cr;\\uc000\\ud835\\udcc6\\u0180aeo\\u2ff8\\u3009\\u3013t\\u0100ei\\u2ffe\\u3005rnion\\xf3\\u06b0nt;\\u6a16st\\u0100;e\\u3010\\u3011\\u403f\\xf1\\u1f19\\xf4\\u0f14\\u0a80ABHabcdefhilmnoprstux\\u3040\\u3051\\u3055\\u3059\\u30e0\\u310e\\u312b\\u3147\\u3162\\u3172\\u318e\\u3206\\u3215\\u3224\\u3229\\u3258\\u326e\\u3272\\u3290\\u32b0\\u32b7\\u0180art\\u3047\\u304a\\u304cr\\xf2\\u10b3\\xf2\\u03ddail;\\u691car\\xf2\\u1c65ar;\\u6964\\u0380cdenqrt\\u3068\\u3075\\u3078\\u307f\\u308f\\u3094\\u30cc\\u0100eu\\u306d\\u3071;\\uc000\\u223d\\u0331te;\\u4155i\\xe3\\u116emptyv;\\u69b3g\\u0200;del\\u0fd1\\u3089\\u308b\\u308d;\\u6992;\\u69a5\\xe5\\u0fd1uo\\u803b\\xbb\\u40bbr\\u0580;abcfhlpstw\\u0fdc\\u30ac\\u30af\\u30b7\\u30b9\\u30bc\\u30be\\u30c0\\u30c3\\u30c7\\u30cap;\\u6975\\u0100;f\\u0fe0\\u30b4s;\\u6920;\\u6933s;\\u691e\\xeb\\u225d\\xf0\\u272el;\\u6945im;\\u6974l;\\u61a3;\\u619d\\u0100ai\\u30d1\\u30d5il;\\u691ao\\u0100;n\\u30db\\u30dc\\u6236al\\xf3\\u0f1e\\u0180abr\\u30e7\\u30ea\\u30eer\\xf2\\u17e5rk;\\u6773\\u0100ak\\u30f3\\u30fdc\\u0100ek\\u30f9\\u30fb;\\u407d;\\u405d\\u0100es\\u3102\\u3104;\\u698cl\\u0100du\\u310a\\u310c;\\u698e;\\u6990\\u0200aeuy\\u3117\\u311c\\u3127\\u3129ron;\\u4159\\u0100di\\u3121\\u3125il;\\u4157\\xec\\u0ff2\\xe2\\u30fa;\\u4440\\u0200clqs\\u3134\\u3137\\u313d\\u3144a;\\u6937dhar;\\u6969uo\\u0100;r\\u020e\\u020dh;\\u61b3\\u0180acg\\u314e\\u315f\\u0f44l\\u0200;ips\\u0f78\\u3158\\u315b\\u109cn\\xe5\\u10bbar\\xf4\\u0fa9t;\\u65ad\\u0180ilr\\u3169\\u1023\\u316esht;\\u697d;\\uc000\\ud835\\udd2f\\u0100ao\\u3177\\u3186r\\u0100du\\u317d\\u317f\\xbb\\u047b\\u0100;l\\u1091\\u3184;\\u696c\\u0100;v\\u318b\\u318c\\u43c1;\\u43f1\\u0180gns\\u3195\\u31f9\\u31fcht\\u0300ahlrst\\u31a4\\u31b0\\u31c2\\u31d8\\u31e4\\u31eerrow\\u0100;t\\u0fdc\\u31ada\\xe9\\u30c8arpoon\\u0100du\\u31bb\\u31bfow\\xee\\u317ep\\xbb\\u1092eft\\u0100ah\\u31ca\\u31d0rrow\\xf3\\u0feaarpoon\\xf3\\u0551ightarrows;\\u61c9quigarro\\xf7\\u30cbhreetimes;\\u62ccg;\\u42daingdotse\\xf1\\u1f32\\u0180ahm\\u320d\\u3210\\u3213r\\xf2\\u0feaa\\xf2\\u0551;\\u600foust\\u0100;a\\u321e\\u321f\\u63b1che\\xbb\\u321fmid;\\u6aee\\u0200abpt\\u3232\\u323d\\u3240\\u3252\\u0100nr\\u3237\\u323ag;\\u67edr;\\u61fer\\xeb\\u1003\\u0180afl\\u3247\\u324a\\u324er;\\u6986;\\uc000\\ud835\\udd63us;\\u6a2eimes;\\u6a35\\u0100ap\\u325d\\u3267r\\u0100;g\\u3263\\u3264\\u4029t;\\u6994olint;\\u6a12ar\\xf2\\u31e3\\u0200achq\\u327b\\u3280\\u10bc\\u3285quo;\\u603ar;\\uc000\\ud835\\udcc7\\u0100bu\\u30fb\\u328ao\\u0100;r\\u0214\\u0213\\u0180hir\\u3297\\u329b\\u32a0re\\xe5\\u31f8mes;\\u62cai\\u0200;efl\\u32aa\\u1059\\u1821\\u32ab\\u65b9tri;\\u69celuhar;\\u6968;\\u611e\\u0d61\\u32d5\\u32db\\u32df\\u332c\\u3338\\u3371\\0\\u337a\\u33a4\\0\\0\\u33ec\\u33f0\\0\\u3428\\u3448\\u345a\\u34ad\\u34b1\\u34ca\\u34f1\\0\\u3616\\0\\0\\u3633cute;\\u415bqu\\xef\\u27ba\\u0500;Eaceinpsy\\u11ed\\u32f3\\u32f5\\u32ff\\u3302\\u330b\\u330f\\u331f\\u3326\\u3329;\\u6ab4\\u01f0\\u32fa\\0\\u32fc;\\u6ab8on;\\u4161u\\xe5\\u11fe\\u0100;d\\u11f3\\u3307il;\\u415frc;\\u415d\\u0180Eas\\u3316\\u3318\\u331b;\\u6ab6p;\\u6abaim;\\u62e9olint;\\u6a13i\\xed\\u1204;\\u4441ot\\u0180;be\\u3334\\u1d47\\u3335\\u62c5;\\u6a66\\u0380Aacmstx\\u3346\\u334a\\u3357\\u335b\\u335e\\u3363\\u336drr;\\u61d8r\\u0100hr\\u3350\\u3352\\xeb\\u2228\\u0100;o\\u0a36\\u0a34t\\u803b\\xa7\\u40a7i;\\u403bwar;\\u6929m\\u0100in\\u3369\\xf0nu\\xf3\\xf1t;\\u6736r\\u0100;o\\u3376\\u2055\\uc000\\ud835\\udd30\\u0200acoy\\u3382\\u3386\\u3391\\u33a0rp;\\u666f\\u0100hy\\u338b\\u338fcy;\\u4449;\\u4448rt\\u026d\\u3399\\0\\0\\u339ci\\xe4\\u1464ara\\xec\\u2e6f\\u803b\\xad\\u40ad\\u0100gm\\u33a8\\u33b4ma\\u0180;fv\\u33b1\\u33b2\\u33b2\\u43c3;\\u43c2\\u0400;deglnpr\\u12ab\\u33c5\\u33c9\\u33ce\\u33d6\\u33de\\u33e1\\u33e6ot;\\u6a6a\\u0100;q\\u12b1\\u12b0\\u0100;E\\u33d3\\u33d4\\u6a9e;\\u6aa0\\u0100;E\\u33db\\u33dc\\u6a9d;\\u6a9fe;\\u6246lus;\\u6a24arr;\\u6972ar\\xf2\\u113d\\u0200aeit\\u33f8\\u3408\\u340f\\u3417\\u0100ls\\u33fd\\u3404lsetm\\xe9\\u336ahp;\\u6a33parsl;\\u69e4\\u0100dl\\u1463\\u3414e;\\u6323\\u0100;e\\u341c\\u341d\\u6aaa\\u0100;s\\u3422\\u3423\\u6aac;\\uc000\\u2aac\\ufe00\\u0180flp\\u342e\\u3433\\u3442tcy;\\u444c\\u0100;b\\u3438\\u3439\\u402f\\u0100;a\\u343e\\u343f\\u69c4r;\\u633ff;\\uc000\\ud835\\udd64a\\u0100dr\\u344d\\u0402es\\u0100;u\\u3454\\u3455\\u6660it\\xbb\\u3455\\u0180csu\\u3460\\u3479\\u349f\\u0100au\\u3465\\u346fp\\u0100;s\\u1188\\u346b;\\uc000\\u2293\\ufe00p\\u0100;s\\u11b4\\u3475;\\uc000\\u2294\\ufe00u\\u0100bp\\u347f\\u348f\\u0180;es\\u1197\\u119c\\u3486et\\u0100;e\\u1197\\u348d\\xf1\\u119d\\u0180;es\\u11a8\\u11ad\\u3496et\\u0100;e\\u11a8\\u349d\\xf1\\u11ae\\u0180;af\\u117b\\u34a6\\u05b0r\\u0165\\u34ab\\u05b1\\xbb\\u117car\\xf2\\u1148\\u0200cemt\\u34b9\\u34be\\u34c2\\u34c5r;\\uc000\\ud835\\udcc8tm\\xee\\xf1i\\xec\\u3415ar\\xe6\\u11be\\u0100ar\\u34ce\\u34d5r\\u0100;f\\u34d4\\u17bf\\u6606\\u0100an\\u34da\\u34edight\\u0100ep\\u34e3\\u34eapsilo\\xee\\u1ee0h\\xe9\\u2eafs\\xbb\\u2852\\u0280bcmnp\\u34fb\\u355e\\u1209\\u358b\\u358e\\u0480;Edemnprs\\u350e\\u350f\\u3511\\u3515\\u351e\\u3523\\u352c\\u3531\\u3536\\u6282;\\u6ac5ot;\\u6abd\\u0100;d\\u11da\\u351aot;\\u6ac3ult;\\u6ac1\\u0100Ee\\u3528\\u352a;\\u6acb;\\u628alus;\\u6abfarr;\\u6979\\u0180eiu\\u353d\\u3552\\u3555t\\u0180;en\\u350e\\u3545\\u354bq\\u0100;q\\u11da\\u350feq\\u0100;q\\u352b\\u3528m;\\u6ac7\\u0100bp\\u355a\\u355c;\\u6ad5;\\u6ad3c\\u0300;acens\\u11ed\\u356c\\u3572\\u3579\\u357b\\u3326ppro\\xf8\\u32faurlye\\xf1\\u11fe\\xf1\\u11f3\\u0180aes\\u3582\\u3588\\u331bppro\\xf8\\u331aq\\xf1\\u3317g;\\u666a\\u0680123;Edehlmnps\\u35a9\\u35ac\\u35af\\u121c\\u35b2\\u35b4\\u35c0\\u35c9\\u35d5\\u35da\\u35df\\u35e8\\u35ed\\u803b\\xb9\\u40b9\\u803b\\xb2\\u40b2\\u803b\\xb3\\u40b3;\\u6ac6\\u0100os\\u35b9\\u35bct;\\u6abeub;\\u6ad8\\u0100;d\\u1222\\u35c5ot;\\u6ac4s\\u0100ou\\u35cf\\u35d2l;\\u67c9b;\\u6ad7arr;\\u697bult;\\u6ac2\\u0100Ee\\u35e4\\u35e6;\\u6acc;\\u628blus;\\u6ac0\\u0180eiu\\u35f4\\u3609\\u360ct\\u0180;en\\u121c\\u35fc\\u3602q\\u0100;q\\u1222\\u35b2eq\\u0100;q\\u35e7\\u35e4m;\\u6ac8\\u0100bp\\u3611\\u3613;\\u6ad4;\\u6ad6\\u0180Aan\\u361c\\u3620\\u362drr;\\u61d9r\\u0100hr\\u3626\\u3628\\xeb\\u222e\\u0100;o\\u0a2b\\u0a29war;\\u692alig\\u803b\\xdf\\u40df\\u0be1\\u3651\\u365d\\u3660\\u12ce\\u3673\\u3679\\0\\u367e\\u36c2\\0\\0\\0\\0\\0\\u36db\\u3703\\0\\u3709\\u376c\\0\\0\\0\\u3787\\u0272\\u3656\\0\\0\\u365bget;\\u6316;\\u43c4r\\xeb\\u0e5f\\u0180aey\\u3666\\u366b\\u3670ron;\\u4165dil;\\u4163;\\u4442lrec;\\u6315r;\\uc000\\ud835\\udd31\\u0200eiko\\u3686\\u369d\\u36b5\\u36bc\\u01f2\\u368b\\0\\u3691e\\u01004f\\u1284\\u1281a\\u0180;sv\\u3698\\u3699\\u369b\\u43b8ym;\\u43d1\\u0100cn\\u36a2\\u36b2k\\u0100as\\u36a8\\u36aeppro\\xf8\\u12c1im\\xbb\\u12acs\\xf0\\u129e\\u0100as\\u36ba\\u36ae\\xf0\\u12c1rn\\u803b\\xfe\\u40fe\\u01ec\\u031f\\u36c6\\u22e7es\\u8180\\xd7;bd\\u36cf\\u36d0\\u36d8\\u40d7\\u0100;a\\u190f\\u36d5r;\\u6a31;\\u6a30\\u0180eps\\u36e1\\u36e3\\u3700\\xe1\\u2a4d\\u0200;bcf\\u0486\\u36ec\\u36f0\\u36f4ot;\\u6336ir;\\u6af1\\u0100;o\\u36f9\\u36fc\\uc000\\ud835\\udd65rk;\\u6ada\\xe1\\u3362rime;\\u6034\\u0180aip\\u370f\\u3712\\u3764d\\xe5\\u1248\\u0380adempst\\u3721\\u374d\\u3740\\u3751\\u3757\\u375c\\u375fngle\\u0280;dlqr\\u3730\\u3731\\u3736\\u3740\\u3742\\u65b5own\\xbb\\u1dbbeft\\u0100;e\\u2800\\u373e\\xf1\\u092e;\\u625cight\\u0100;e\\u32aa\\u374b\\xf1\\u105aot;\\u65ecinus;\\u6a3alus;\\u6a39b;\\u69cdime;\\u6a3bezium;\\u63e2\\u0180cht\\u3772\\u377d\\u3781\\u0100ry\\u3777\\u377b;\\uc000\\ud835\\udcc9;\\u4446cy;\\u445brok;\\u4167\\u0100io\\u378b\\u378ex\\xf4\\u1777head\\u0100lr\\u3797\\u37a0eftarro\\xf7\\u084fightarrow\\xbb\\u0f5d\\u0900AHabcdfghlmoprstuw\\u37d0\\u37d3\\u37d7\\u37e4\\u37f0\\u37fc\\u380e\\u381c\\u3823\\u3834\\u3851\\u385d\\u386b\\u38a9\\u38cc\\u38d2\\u38ea\\u38f6r\\xf2\\u03edar;\\u6963\\u0100cr\\u37dc\\u37e2ute\\u803b\\xfa\\u40fa\\xf2\\u1150r\\u01e3\\u37ea\\0\\u37edy;\\u445eve;\\u416d\\u0100iy\\u37f5\\u37farc\\u803b\\xfb\\u40fb;\\u4443\\u0180abh\\u3803\\u3806\\u380br\\xf2\\u13adlac;\\u4171a\\xf2\\u13c3\\u0100ir\\u3813\\u3818sht;\\u697e;\\uc000\\ud835\\udd32rave\\u803b\\xf9\\u40f9\\u0161\\u3827\\u3831r\\u0100lr\\u382c\\u382e\\xbb\\u0957\\xbb\\u1083lk;\\u6580\\u0100ct\\u3839\\u384d\\u026f\\u383f\\0\\0\\u384arn\\u0100;e\\u3845\\u3846\\u631cr\\xbb\\u3846op;\\u630fri;\\u65f8\\u0100al\\u3856\\u385acr;\\u416b\\u80bb\\xa8\\u0349\\u0100gp\\u3862\\u3866on;\\u4173f;\\uc000\\ud835\\udd66\\u0300adhlsu\\u114b\\u3878\\u387d\\u1372\\u3891\\u38a0own\\xe1\\u13b3arpoon\\u0100lr\\u3888\\u388cef\\xf4\\u382digh\\xf4\\u382fi\\u0180;hl\\u3899\\u389a\\u389c\\u43c5\\xbb\\u13faon\\xbb\\u389aparrows;\\u61c8\\u0180cit\\u38b0\\u38c4\\u38c8\\u026f\\u38b6\\0\\0\\u38c1rn\\u0100;e\\u38bc\\u38bd\\u631dr\\xbb\\u38bdop;\\u630eng;\\u416fri;\\u65f9cr;\\uc000\\ud835\\udcca\\u0180dir\\u38d9\\u38dd\\u38e2ot;\\u62f0lde;\\u4169i\\u0100;f\\u3730\\u38e8\\xbb\\u1813\\u0100am\\u38ef\\u38f2r\\xf2\\u38a8l\\u803b\\xfc\\u40fcangle;\\u69a7\\u0780ABDacdeflnoprsz\\u391c\\u391f\\u3929\\u392d\\u39b5\\u39b8\\u39bd\\u39df\\u39e4\\u39e8\\u39f3\\u39f9\\u39fd\\u3a01\\u3a20r\\xf2\\u03f7ar\\u0100;v\\u3926\\u3927\\u6ae8;\\u6ae9as\\xe8\\u03e1\\u0100nr\\u3932\\u3937grt;\\u699c\\u0380eknprst\\u34e3\\u3946\\u394b\\u3952\\u395d\\u3964\\u3996app\\xe1\\u2415othin\\xe7\\u1e96\\u0180hir\\u34eb\\u2ec8\\u3959op\\xf4\\u2fb5\\u0100;h\\u13b7\\u3962\\xef\\u318d\\u0100iu\\u3969\\u396dgm\\xe1\\u33b3\\u0100bp\\u3972\\u3984setneq\\u0100;q\\u397d\\u3980\\uc000\\u228a\\ufe00;\\uc000\\u2acb\\ufe00setneq\\u0100;q\\u398f\\u3992\\uc000\\u228b\\ufe00;\\uc000\\u2acc\\ufe00\\u0100hr\\u399b\\u399fet\\xe1\\u369ciangle\\u0100lr\\u39aa\\u39afeft\\xbb\\u0925ight\\xbb\\u1051y;\\u4432ash\\xbb\\u1036\\u0180elr\\u39c4\\u39d2\\u39d7\\u0180;be\\u2dea\\u39cb\\u39cfar;\\u62bbq;\\u625alip;\\u62ee\\u0100bt\\u39dc\\u1468a\\xf2\\u1469r;\\uc000\\ud835\\udd33tr\\xe9\\u39aesu\\u0100bp\\u39ef\\u39f1\\xbb\\u0d1c\\xbb\\u0d59pf;\\uc000\\ud835\\udd67ro\\xf0\\u0efbtr\\xe9\\u39b4\\u0100cu\\u3a06\\u3a0br;\\uc000\\ud835\\udccb\\u0100bp\\u3a10\\u3a18n\\u0100Ee\\u3980\\u3a16\\xbb\\u397en\\u0100Ee\\u3992\\u3a1e\\xbb\\u3990igzag;\\u699a\\u0380cefoprs\\u3a36\\u3a3b\\u3a56\\u3a5b\\u3a54\\u3a61\\u3a6airc;\\u4175\\u0100di\\u3a40\\u3a51\\u0100bg\\u3a45\\u3a49ar;\\u6a5fe\\u0100;q\\u15fa\\u3a4f;\\u6259erp;\\u6118r;\\uc000\\ud835\\udd34pf;\\uc000\\ud835\\udd68\\u0100;e\\u1479\\u3a66at\\xe8\\u1479cr;\\uc000\\ud835\\udccc\\u0ae3\\u178e\\u3a87\\0\\u3a8b\\0\\u3a90\\u3a9b\\0\\0\\u3a9d\\u3aa8\\u3aab\\u3aaf\\0\\0\\u3ac3\\u3ace\\0\\u3ad8\\u17dc\\u17dftr\\xe9\\u17d1r;\\uc000\\ud835\\udd35\\u0100Aa\\u3a94\\u3a97r\\xf2\\u03c3r\\xf2\\u09f6;\\u43be\\u0100Aa\\u3aa1\\u3aa4r\\xf2\\u03b8r\\xf2\\u09eba\\xf0\\u2713is;\\u62fb\\u0180dpt\\u17a4\\u3ab5\\u3abe\\u0100fl\\u3aba\\u17a9;\\uc000\\ud835\\udd69im\\xe5\\u17b2\\u0100Aa\\u3ac7\\u3acar\\xf2\\u03cer\\xf2\\u0a01\\u0100cq\\u3ad2\\u17b8r;\\uc000\\ud835\\udccd\\u0100pt\\u17d6\\u3adcr\\xe9\\u17d4\\u0400acefiosu\\u3af0\\u3afd\\u3b08\\u3b0c\\u3b11\\u3b15\\u3b1b\\u3b21c\\u0100uy\\u3af6\\u3afbte\\u803b\\xfd\\u40fd;\\u444f\\u0100iy\\u3b02\\u3b06rc;\\u4177;\\u444bn\\u803b\\xa5\\u40a5r;\\uc000\\ud835\\udd36cy;\\u4457pf;\\uc000\\ud835\\udd6acr;\\uc000\\ud835\\udcce\\u0100cm\\u3b26\\u3b29y;\\u444el\\u803b\\xff\\u40ff\\u0500acdefhiosw\\u3b42\\u3b48\\u3b54\\u3b58\\u3b64\\u3b69\\u3b6d\\u3b74\\u3b7a\\u3b80cute;\\u417a\\u0100ay\\u3b4d\\u3b52ron;\\u417e;\\u4437ot;\\u417c\\u0100et\\u3b5d\\u3b61tr\\xe6\\u155fa;\\u43b6r;\\uc000\\ud835\\udd37cy;\\u4436grarr;\\u61ddpf;\\uc000\\ud835\\udd6bcr;\\uc000\\ud835\\udccf\\u0100jn\\u3b85\\u3b87;\\u600dj;\\u600c\"\n .split(\"\")\n .map((c) => c.charCodeAt(0)));\n//# sourceMappingURL=decode-data-html.js.map","// Generated using scripts/write-decode-map.ts\nexport default new Uint16Array(\n// prettier-ignore\n\"\\u0200aglq\\t\\x15\\x18\\x1b\\u026d\\x0f\\0\\0\\x12p;\\u4026os;\\u4027t;\\u403et;\\u403cuot;\\u4022\"\n .split(\"\")\n .map((c) => c.charCodeAt(0)));\n//# sourceMappingURL=decode-data-xml.js.map","// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\nvar _a;\nconst decodeMap = new Map([\n [0, 65533],\n // C1 Unicode control character reference replacements\n [128, 8364],\n [130, 8218],\n [131, 402],\n [132, 8222],\n [133, 8230],\n [134, 8224],\n [135, 8225],\n [136, 710],\n [137, 8240],\n [138, 352],\n [139, 8249],\n [140, 338],\n [142, 381],\n [145, 8216],\n [146, 8217],\n [147, 8220],\n [148, 8221],\n [149, 8226],\n [150, 8211],\n [151, 8212],\n [152, 732],\n [153, 8482],\n [154, 353],\n [155, 8250],\n [156, 339],\n [158, 382],\n [159, 376],\n]);\n/**\n * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.\n */\nexport const fromCodePoint = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins\n(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function (codePoint) {\n let output = \"\";\n if (codePoint > 0xffff) {\n codePoint -= 0x10000;\n output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800);\n codePoint = 0xdc00 | (codePoint & 0x3ff);\n }\n output += String.fromCharCode(codePoint);\n return output;\n};\n/**\n * Replace the given code point with a replacement character if it is a\n * surrogate or is outside the valid range. Otherwise return the code\n * point unchanged.\n */\nexport function replaceCodePoint(codePoint) {\n var _a;\n if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {\n return 0xfffd;\n }\n return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;\n}\n/**\n * Replace the code point if relevant, then convert it to a string.\n *\n * @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead.\n * @param codePoint The code point to decode.\n * @returns The decoded code point.\n */\nexport default function decodeCodePoint(codePoint) {\n return fromCodePoint(replaceCodePoint(codePoint));\n}\n//# sourceMappingURL=decode_codepoint.js.map","import htmlDecodeTree from \"./generated/decode-data-html.js\";\nimport xmlDecodeTree from \"./generated/decode-data-xml.js\";\nimport decodeCodePoint, { replaceCodePoint, fromCodePoint, } from \"./decode_codepoint.js\";\n// Re-export for use by eg. htmlparser2\nexport { htmlDecodeTree, xmlDecodeTree, decodeCodePoint };\nexport { replaceCodePoint, fromCodePoint } from \"./decode_codepoint.js\";\nvar CharCodes;\n(function (CharCodes) {\n CharCodes[CharCodes[\"NUM\"] = 35] = \"NUM\";\n CharCodes[CharCodes[\"SEMI\"] = 59] = \"SEMI\";\n CharCodes[CharCodes[\"EQUALS\"] = 61] = \"EQUALS\";\n CharCodes[CharCodes[\"ZERO\"] = 48] = \"ZERO\";\n CharCodes[CharCodes[\"NINE\"] = 57] = \"NINE\";\n CharCodes[CharCodes[\"LOWER_A\"] = 97] = \"LOWER_A\";\n CharCodes[CharCodes[\"LOWER_F\"] = 102] = \"LOWER_F\";\n CharCodes[CharCodes[\"LOWER_X\"] = 120] = \"LOWER_X\";\n CharCodes[CharCodes[\"LOWER_Z\"] = 122] = \"LOWER_Z\";\n CharCodes[CharCodes[\"UPPER_A\"] = 65] = \"UPPER_A\";\n CharCodes[CharCodes[\"UPPER_F\"] = 70] = \"UPPER_F\";\n CharCodes[CharCodes[\"UPPER_Z\"] = 90] = \"UPPER_Z\";\n})(CharCodes || (CharCodes = {}));\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nconst TO_LOWER_BIT = 0b100000;\nexport var BinTrieFlags;\n(function (BinTrieFlags) {\n BinTrieFlags[BinTrieFlags[\"VALUE_LENGTH\"] = 49152] = \"VALUE_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"BRANCH_LENGTH\"] = 16256] = \"BRANCH_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"JUMP_TABLE\"] = 127] = \"JUMP_TABLE\";\n})(BinTrieFlags || (BinTrieFlags = {}));\nfunction isNumber(code) {\n return code >= CharCodes.ZERO && code <= CharCodes.NINE;\n}\nfunction isHexadecimalCharacter(code) {\n return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F));\n}\nfunction isAsciiAlphaNumeric(code) {\n return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||\n isNumber(code));\n}\n/**\n * Checks if the given character is a valid end character for an entity in an attribute.\n *\n * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n */\nfunction isEntityInAttributeInvalidEnd(code) {\n return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);\n}\nvar EntityDecoderState;\n(function (EntityDecoderState) {\n EntityDecoderState[EntityDecoderState[\"EntityStart\"] = 0] = \"EntityStart\";\n EntityDecoderState[EntityDecoderState[\"NumericStart\"] = 1] = \"NumericStart\";\n EntityDecoderState[EntityDecoderState[\"NumericDecimal\"] = 2] = \"NumericDecimal\";\n EntityDecoderState[EntityDecoderState[\"NumericHex\"] = 3] = \"NumericHex\";\n EntityDecoderState[EntityDecoderState[\"NamedEntity\"] = 4] = \"NamedEntity\";\n})(EntityDecoderState || (EntityDecoderState = {}));\nexport var DecodingMode;\n(function (DecodingMode) {\n /** Entities in text nodes that can end with any character. */\n DecodingMode[DecodingMode[\"Legacy\"] = 0] = \"Legacy\";\n /** Only allow entities terminated with a semicolon. */\n DecodingMode[DecodingMode[\"Strict\"] = 1] = \"Strict\";\n /** Entities in attributes have limitations on ending characters. */\n DecodingMode[DecodingMode[\"Attribute\"] = 2] = \"Attribute\";\n})(DecodingMode || (DecodingMode = {}));\n/**\n * Token decoder with support of writing partial entities.\n */\nexport class EntityDecoder {\n constructor(\n /** The tree used to decode entities. */\n decodeTree, \n /**\n * The function that is called when a codepoint is decoded.\n *\n * For multi-byte named entities, this will be called multiple times,\n * with the second codepoint, and the same `consumed` value.\n *\n * @param codepoint The decoded codepoint.\n * @param consumed The number of bytes consumed by the decoder.\n */\n emitCodePoint, \n /** An object that is used to produce errors. */\n errors) {\n this.decodeTree = decodeTree;\n this.emitCodePoint = emitCodePoint;\n this.errors = errors;\n /** The current state of the decoder. */\n this.state = EntityDecoderState.EntityStart;\n /** Characters that were consumed while parsing an entity. */\n this.consumed = 1;\n /**\n * The result of the entity.\n *\n * Either the result index of a numeric entity, or the codepoint of a\n * numeric entity.\n */\n this.result = 0;\n /** The current index in the decode tree. */\n this.treeIndex = 0;\n /** The number of characters that were consumed in excess. */\n this.excess = 1;\n /** The mode in which the decoder is operating. */\n this.decodeMode = DecodingMode.Strict;\n }\n /** Resets the instance to make it reusable. */\n startEntity(decodeMode) {\n this.decodeMode = decodeMode;\n this.state = EntityDecoderState.EntityStart;\n this.result = 0;\n this.treeIndex = 0;\n this.excess = 1;\n this.consumed = 1;\n }\n /**\n * Write an entity to the decoder. This can be called multiple times with partial entities.\n * If the entity is incomplete, the decoder will return -1.\n *\n * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n * entity is incomplete, and resume when the next string is written.\n *\n * @param string The string containing the entity (or a continuation of the entity).\n * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n write(str, offset) {\n switch (this.state) {\n case EntityDecoderState.EntityStart: {\n if (str.charCodeAt(offset) === CharCodes.NUM) {\n this.state = EntityDecoderState.NumericStart;\n this.consumed += 1;\n return this.stateNumericStart(str, offset + 1);\n }\n this.state = EntityDecoderState.NamedEntity;\n return this.stateNamedEntity(str, offset);\n }\n case EntityDecoderState.NumericStart: {\n return this.stateNumericStart(str, offset);\n }\n case EntityDecoderState.NumericDecimal: {\n return this.stateNumericDecimal(str, offset);\n }\n case EntityDecoderState.NumericHex: {\n return this.stateNumericHex(str, offset);\n }\n case EntityDecoderState.NamedEntity: {\n return this.stateNamedEntity(str, offset);\n }\n }\n }\n /**\n * Switches between the numeric decimal and hexadecimal states.\n *\n * Equivalent to the `Numeric character reference state` in the HTML spec.\n *\n * @param str The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericStart(str, offset) {\n if (offset >= str.length) {\n return -1;\n }\n if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n this.state = EntityDecoderState.NumericHex;\n this.consumed += 1;\n return this.stateNumericHex(str, offset + 1);\n }\n this.state = EntityDecoderState.NumericDecimal;\n return this.stateNumericDecimal(str, offset);\n }\n addToNumericResult(str, start, end, base) {\n if (start !== end) {\n const digitCount = end - start;\n this.result =\n this.result * Math.pow(base, digitCount) +\n parseInt(str.substr(start, digitCount), base);\n this.consumed += digitCount;\n }\n }\n /**\n * Parses a hexadecimal numeric entity.\n *\n * Equivalent to the `Hexademical character reference state` in the HTML spec.\n *\n * @param str The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericHex(str, offset) {\n const startIdx = offset;\n while (offset < str.length) {\n const char = str.charCodeAt(offset);\n if (isNumber(char) || isHexadecimalCharacter(char)) {\n offset += 1;\n }\n else {\n this.addToNumericResult(str, startIdx, offset, 16);\n return this.emitNumericEntity(char, 3);\n }\n }\n this.addToNumericResult(str, startIdx, offset, 16);\n return -1;\n }\n /**\n * Parses a decimal numeric entity.\n *\n * Equivalent to the `Decimal character reference state` in the HTML spec.\n *\n * @param str The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericDecimal(str, offset) {\n const startIdx = offset;\n while (offset < str.length) {\n const char = str.charCodeAt(offset);\n if (isNumber(char)) {\n offset += 1;\n }\n else {\n this.addToNumericResult(str, startIdx, offset, 10);\n return this.emitNumericEntity(char, 2);\n }\n }\n this.addToNumericResult(str, startIdx, offset, 10);\n return -1;\n }\n /**\n * Validate and emit a numeric entity.\n *\n * Implements the logic from the `Hexademical character reference start\n * state` and `Numeric character reference end state` in the HTML spec.\n *\n * @param lastCp The last code point of the entity. Used to see if the\n * entity was terminated with a semicolon.\n * @param expectedLength The minimum number of characters that should be\n * consumed. Used to validate that at least one digit\n * was consumed.\n * @returns The number of characters that were consumed.\n */\n emitNumericEntity(lastCp, expectedLength) {\n var _a;\n // Ensure we consumed at least one digit.\n if (this.consumed <= expectedLength) {\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n return 0;\n }\n // Figure out if this is a legit end of the entity\n if (lastCp === CharCodes.SEMI) {\n this.consumed += 1;\n }\n else if (this.decodeMode === DecodingMode.Strict) {\n return 0;\n }\n this.emitCodePoint(replaceCodePoint(this.result), this.consumed);\n if (this.errors) {\n if (lastCp !== CharCodes.SEMI) {\n this.errors.missingSemicolonAfterCharacterReference();\n }\n this.errors.validateNumericCharacterReference(this.result);\n }\n return this.consumed;\n }\n /**\n * Parses a named entity.\n *\n * Equivalent to the `Named character reference state` in the HTML spec.\n *\n * @param str The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNamedEntity(str, offset) {\n const { decodeTree } = this;\n let current = decodeTree[this.treeIndex];\n // The mask is the number of bytes of the value, including the current byte.\n let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n for (; offset < str.length; offset++, this.excess++) {\n const char = str.charCodeAt(offset);\n this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);\n if (this.treeIndex < 0) {\n return this.result === 0 ||\n // If we are parsing an attribute\n (this.decodeMode === DecodingMode.Attribute &&\n // We shouldn't have consumed any characters after the entity,\n (valueLength === 0 ||\n // And there should be no invalid characters.\n isEntityInAttributeInvalidEnd(char)))\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n current = decodeTree[this.treeIndex];\n valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n // If the branch is a value, store it and continue\n if (valueLength !== 0) {\n // If the entity is terminated by a semicolon, we are done.\n if (char === CharCodes.SEMI) {\n return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);\n }\n // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.\n if (this.decodeMode !== DecodingMode.Strict) {\n this.result = this.treeIndex;\n this.consumed += this.excess;\n this.excess = 0;\n }\n }\n }\n return -1;\n }\n /**\n * Emit a named entity that was not terminated with a semicolon.\n *\n * @returns The number of characters consumed.\n */\n emitNotTerminatedNamedEntity() {\n var _a;\n const { result, decodeTree } = this;\n const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n this.emitNamedEntityData(result, valueLength, this.consumed);\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.missingSemicolonAfterCharacterReference();\n return this.consumed;\n }\n /**\n * Emit a named entity.\n *\n * @param result The index of the entity in the decode tree.\n * @param valueLength The number of bytes in the entity.\n * @param consumed The number of characters consumed.\n *\n * @returns The number of characters consumed.\n */\n emitNamedEntityData(result, valueLength, consumed) {\n const { decodeTree } = this;\n this.emitCodePoint(valueLength === 1\n ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH\n : decodeTree[result + 1], consumed);\n if (valueLength === 3) {\n // For multi-byte values, we need to emit the second byte.\n this.emitCodePoint(decodeTree[result + 2], consumed);\n }\n return consumed;\n }\n /**\n * Signal to the parser that the end of the input was reached.\n *\n * Remaining data will be emitted and relevant errors will be produced.\n *\n * @returns The number of characters consumed.\n */\n end() {\n var _a;\n switch (this.state) {\n case EntityDecoderState.NamedEntity: {\n // Emit a named entity if we have one.\n return this.result !== 0 &&\n (this.decodeMode !== DecodingMode.Attribute ||\n this.result === this.treeIndex)\n ? this.emitNotTerminatedNamedEntity()\n : 0;\n }\n // Otherwise, emit a numeric entity if we have one.\n case EntityDecoderState.NumericDecimal: {\n return this.emitNumericEntity(0, 2);\n }\n case EntityDecoderState.NumericHex: {\n return this.emitNumericEntity(0, 3);\n }\n case EntityDecoderState.NumericStart: {\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n return 0;\n }\n case EntityDecoderState.EntityStart: {\n // Return 0 if we have no entity.\n return 0;\n }\n }\n }\n}\n/**\n * Creates a function that decodes entities in a string.\n *\n * @param decodeTree The decode tree.\n * @returns A function that decodes entities in a string.\n */\nfunction getDecoder(decodeTree) {\n let ret = \"\";\n const decoder = new EntityDecoder(decodeTree, (str) => (ret += fromCodePoint(str)));\n return function decodeWithTrie(str, decodeMode) {\n let lastIndex = 0;\n let offset = 0;\n while ((offset = str.indexOf(\"&\", offset)) >= 0) {\n ret += str.slice(lastIndex, offset);\n decoder.startEntity(decodeMode);\n const len = decoder.write(str, \n // Skip the \"&\"\n offset + 1);\n if (len < 0) {\n lastIndex = offset + decoder.end();\n break;\n }\n lastIndex = offset + len;\n // If `len` is 0, skip the current `&` and continue.\n offset = len === 0 ? lastIndex + 1 : lastIndex;\n }\n const result = ret + str.slice(lastIndex);\n // Make sure we don't keep a reference to the final string.\n ret = \"\";\n return result;\n };\n}\n/**\n * Determines the branch of the current node that is taken given the current\n * character. This function is used to traverse the trie.\n *\n * @param decodeTree The trie.\n * @param current The current node.\n * @param nodeIdx The index right after the current node and its value.\n * @param char The current character.\n * @returns The index of the next node, or -1 if no branch is taken.\n */\nexport function determineBranch(decodeTree, current, nodeIdx, char) {\n const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n // Case 1: Single branch encoded in jump offset\n if (branchCount === 0) {\n return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;\n }\n // Case 2: Multiple branches encoded in jump table\n if (jumpOffset) {\n const value = char - jumpOffset;\n return value < 0 || value >= branchCount\n ? -1\n : decodeTree[nodeIdx + value] - 1;\n }\n // Case 3: Multiple branches encoded in dictionary\n // Binary search for the character.\n let lo = nodeIdx;\n let hi = lo + branchCount - 1;\n while (lo <= hi) {\n const mid = (lo + hi) >>> 1;\n const midVal = decodeTree[mid];\n if (midVal < char) {\n lo = mid + 1;\n }\n else if (midVal > char) {\n hi = mid - 1;\n }\n else {\n return decodeTree[mid + branchCount];\n }\n }\n return -1;\n}\nconst htmlDecoder = getDecoder(htmlDecodeTree);\nconst xmlDecoder = getDecoder(xmlDecodeTree);\n/**\n * Decodes an HTML string.\n *\n * @param str The string to decode.\n * @param mode The decoding mode.\n * @returns The decoded string.\n */\nexport function decodeHTML(str, mode = DecodingMode.Legacy) {\n return htmlDecoder(str, mode);\n}\n/**\n * Decodes an HTML string in an attribute.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLAttribute(str) {\n return htmlDecoder(str, DecodingMode.Attribute);\n}\n/**\n * Decodes an HTML string, requiring all entities to be terminated by a semicolon.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLStrict(str) {\n return htmlDecoder(str, DecodingMode.Strict);\n}\n/**\n * Decodes an XML string, requiring all entities to be terminated by a semicolon.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nexport function decodeXML(str) {\n return xmlDecoder(str, DecodingMode.Strict);\n}\n//# sourceMappingURL=decode.js.map","// Utilities\n//\n\nimport * as mdurl from 'mdurl'\nimport * as ucmicro from 'uc.micro'\nimport { decodeHTML } from 'entities'\n\nfunction _class (obj) { return Object.prototype.toString.call(obj) }\n\nfunction isString (obj) { return _class(obj) === '[object String]' }\n\nconst _hasOwnProperty = Object.prototype.hasOwnProperty\n\nfunction has (object, key) {\n return _hasOwnProperty.call(object, key)\n}\n\n// Merge objects\n//\nfunction assign (obj /* from1, from2, from3, ... */) {\n const sources = Array.prototype.slice.call(arguments, 1)\n\n sources.forEach(function (source) {\n if (!source) { return }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be object')\n }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key]\n })\n })\n\n return obj\n}\n\n// Remove element from array and put another array at those position.\n// Useful for some operations with tokens\nfunction arrayReplaceAt (src, pos, newElements) {\n return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1))\n}\n\nfunction isValidEntityCode (c) {\n /* eslint no-bitwise:0 */\n // broken sequence\n if (c >= 0xD800 && c <= 0xDFFF) { return false }\n // never used\n if (c >= 0xFDD0 && c <= 0xFDEF) { return false }\n if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) { return false }\n // control codes\n if (c >= 0x00 && c <= 0x08) { return false }\n if (c === 0x0B) { return false }\n if (c >= 0x0E && c <= 0x1F) { return false }\n if (c >= 0x7F && c <= 0x9F) { return false }\n // out of range\n if (c > 0x10FFFF) { return false }\n return true\n}\n\nfunction fromCodePoint (c) {\n /* eslint no-bitwise:0 */\n if (c > 0xffff) {\n c -= 0x10000\n const surrogate1 = 0xd800 + (c >> 10)\n const surrogate2 = 0xdc00 + (c & 0x3ff)\n\n return String.fromCharCode(surrogate1, surrogate2)\n }\n return String.fromCharCode(c)\n}\n\nconst UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_`{|}~])/g\nconst ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi\nconst UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi')\n\nconst DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i\n\nfunction replaceEntityPattern (match, name) {\n if (name.charCodeAt(0) === 0x23/* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) {\n const code = name[1].toLowerCase() === 'x'\n ? parseInt(name.slice(2), 16)\n : parseInt(name.slice(1), 10)\n\n if (isValidEntityCode(code)) {\n return fromCodePoint(code)\n }\n\n return match\n }\n\n const decoded = decodeHTML(match)\n if (decoded !== match) {\n return decoded\n }\n\n return match\n}\n\n/* function replaceEntities(str) {\n if (str.indexOf('&') < 0) { return str; }\n\n return str.replace(ENTITY_RE, replaceEntityPattern);\n} */\n\nfunction unescapeMd (str) {\n if (str.indexOf('\\\\') < 0) { return str }\n return str.replace(UNESCAPE_MD_RE, '$1')\n}\n\nfunction unescapeAll (str) {\n if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) { return str }\n\n return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) {\n if (escaped) { return escaped }\n return replaceEntityPattern(match, entity)\n })\n}\n\nconst HTML_ESCAPE_TEST_RE = /[&<>\"]/\nconst HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g\nconst HTML_REPLACEMENTS = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"'\n}\n\nfunction replaceUnsafeChar (ch) {\n return HTML_REPLACEMENTS[ch]\n}\n\nfunction escapeHtml (str) {\n if (HTML_ESCAPE_TEST_RE.test(str)) {\n return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar)\n }\n return str\n}\n\nconst REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g\n\nfunction escapeRE (str) {\n return str.replace(REGEXP_ESCAPE_RE, '\\\\$&')\n}\n\nfunction isSpace (code) {\n switch (code) {\n case 0x09:\n case 0x20:\n return true\n }\n return false\n}\n\n// Zs (unicode class) || [\\t\\f\\v\\r\\n]\nfunction isWhiteSpace (code) {\n if (code >= 0x2000 && code <= 0x200A) { return true }\n switch (code) {\n case 0x09: // \\t\n case 0x0A: // \\n\n case 0x0B: // \\v\n case 0x0C: // \\f\n case 0x0D: // \\r\n case 0x20:\n case 0xA0:\n case 0x1680:\n case 0x202F:\n case 0x205F:\n case 0x3000:\n return true\n }\n return false\n}\n\n/* eslint-disable max-len */\n\n// Currently without astral characters support.\nfunction isPunctChar (ch) {\n return ucmicro.P.test(ch) || ucmicro.S.test(ch)\n}\n\n// Markdown ASCII punctuation characters.\n//\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\n//\n// Don't confuse with unicode punctuation !!! It lacks some chars in ascii range.\n//\nfunction isMdAsciiPunct (ch) {\n switch (ch) {\n case 0x21/* ! */:\n case 0x22/* \" */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x27/* ' */:\n case 0x28/* ( */:\n case 0x29/* ) */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2C/* , */:\n case 0x2D/* - */:\n case 0x2E/* . */:\n case 0x2F/* / */:\n case 0x3A/* : */:\n case 0x3B/* ; */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x3F/* ? */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7C/* | */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true\n default:\n return false\n }\n}\n\n// Hepler to unify [reference labels].\n//\nfunction normalizeReference (str) {\n // Trim and collapse whitespace\n //\n str = str.trim().replace(/\\s+/g, ' ')\n\n // In node v10 'ẞ'.toLowerCase() === 'Ṿ', which is presumed to be a bug\n // fixed in v12 (couldn't find any details).\n //\n // So treat this one as a special case\n // (remove this when node v10 is no longer supported).\n //\n if ('ẞ'.toLowerCase() === 'Ṿ') {\n str = str.replace(/ẞ/g, 'ß')\n }\n\n // .toLowerCase().toUpperCase() should get rid of all differences\n // between letter variants.\n //\n // Simple .toLowerCase() doesn't normalize 125 code points correctly,\n // and .toUpperCase doesn't normalize 6 of them (list of exceptions:\n // İ, ϴ, ẞ, Ω, K, Å - those are already uppercased, but have differently\n // uppercased versions).\n //\n // Here's an example showing how it happens. Lets take greek letter omega:\n // uppercase U+0398 (Θ), U+03f4 (ϴ) and lowercase U+03b8 (θ), U+03d1 (ϑ)\n //\n // Unicode entries:\n // 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;\n // 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398\n // 03D1;GREEK THETA SYMBOL;Ll;0;L; 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398\n // 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L; 0398;;;;N;;;;03B8;\n //\n // Case-insensitive comparison should treat all of them as equivalent.\n //\n // But .toLowerCase() doesn't change ϑ (it's already lowercase),\n // and .toUpperCase() doesn't change ϴ (already uppercase).\n //\n // Applying first lower then upper case normalizes any character:\n // '\\u0398\\u03f4\\u03b8\\u03d1'.toLowerCase().toUpperCase() === '\\u0398\\u0398\\u0398\\u0398'\n //\n // Note: this is equivalent to unicode case folding; unicode normalization\n // is a different step that is not required here.\n //\n // Final result should be uppercased, because it's later stored in an object\n // (this avoid a conflict with Object.prototype members,\n // most notably, `__proto__`)\n //\n return str.toLowerCase().toUpperCase()\n}\n\n// Re-export libraries commonly used in both markdown-it and its plugins,\n// so plugins won't have to depend on them explicitly, which reduces their\n// bundled size (e.g. a browser build).\n//\nconst lib = { mdurl, ucmicro }\n\nexport {\n lib,\n assign,\n isString,\n has,\n unescapeMd,\n unescapeAll,\n isValidEntityCode,\n fromCodePoint,\n escapeHtml,\n arrayReplaceAt,\n isSpace,\n isWhiteSpace,\n isMdAsciiPunct,\n isPunctChar,\n escapeRE,\n normalizeReference\n}\n","// Parse link label\n//\n// this function assumes that first character (\"[\") already matches;\n// returns the end of the label\n//\n\nexport default function parseLinkLabel (state, start, disableNested) {\n let level, found, marker, prevPos\n\n const max = state.posMax\n const oldPos = state.pos\n\n state.pos = start + 1\n level = 1\n\n while (state.pos < max) {\n marker = state.src.charCodeAt(state.pos)\n if (marker === 0x5D /* ] */) {\n level--\n if (level === 0) {\n found = true\n break\n }\n }\n\n prevPos = state.pos\n state.md.inline.skipToken(state)\n if (marker === 0x5B /* [ */) {\n if (prevPos === state.pos - 1) {\n // increase level if we find text `[`, which is not a part of any token\n level++\n } else if (disableNested) {\n state.pos = oldPos\n return -1\n }\n }\n }\n\n let labelEnd = -1\n\n if (found) {\n labelEnd = state.pos\n }\n\n // restore old state\n state.pos = oldPos\n\n return labelEnd\n}\n","// Parse link destination\n//\n\nimport { unescapeAll } from '../common/utils.mjs'\n\nexport default function parseLinkDestination (str, start, max) {\n let code\n let pos = start\n\n const result = {\n ok: false,\n pos: 0,\n str: ''\n }\n\n if (str.charCodeAt(pos) === 0x3C /* < */) {\n pos++\n while (pos < max) {\n code = str.charCodeAt(pos)\n if (code === 0x0A /* \\n */) { return result }\n if (code === 0x3C /* < */) { return result }\n if (code === 0x3E /* > */) {\n result.pos = pos + 1\n result.str = unescapeAll(str.slice(start + 1, pos))\n result.ok = true\n return result\n }\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos += 2\n continue\n }\n\n pos++\n }\n\n // no closing '>'\n return result\n }\n\n // this should be ... } else { ... branch\n\n let level = 0\n while (pos < max) {\n code = str.charCodeAt(pos)\n\n if (code === 0x20) { break }\n\n // ascii control characters\n if (code < 0x20 || code === 0x7F) { break }\n\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n if (str.charCodeAt(pos + 1) === 0x20) { break }\n pos += 2\n continue\n }\n\n if (code === 0x28 /* ( */) {\n level++\n if (level > 32) { return result }\n }\n\n if (code === 0x29 /* ) */) {\n if (level === 0) { break }\n level--\n }\n\n pos++\n }\n\n if (start === pos) { return result }\n if (level !== 0) { return result }\n\n result.str = unescapeAll(str.slice(start, pos))\n result.pos = pos\n result.ok = true\n return result\n}\n","// Parse link title\n//\n\nimport { unescapeAll } from '../common/utils.mjs'\n\n// Parse link title within `str` in [start, max] range,\n// or continue previous parsing if `prev_state` is defined (equal to result of last execution).\n//\nexport default function parseLinkTitle (str, start, max, prev_state) {\n let code\n let pos = start\n\n const state = {\n // if `true`, this is a valid link title\n ok: false,\n // if `true`, this link can be continued on the next line\n can_continue: false,\n // if `ok`, it's the position of the first character after the closing marker\n pos: 0,\n // if `ok`, it's the unescaped title\n str: '',\n // expected closing marker character code\n marker: 0\n }\n\n if (prev_state) {\n // this is a continuation of a previous parseLinkTitle call on the next line,\n // used in reference links only\n state.str = prev_state.str\n state.marker = prev_state.marker\n } else {\n if (pos >= max) { return state }\n\n let marker = str.charCodeAt(pos)\n if (marker !== 0x22 /* \" */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { return state }\n\n start++\n pos++\n\n // if opening marker is \"(\", switch it to closing marker \")\"\n if (marker === 0x28) { marker = 0x29 }\n\n state.marker = marker\n }\n\n while (pos < max) {\n code = str.charCodeAt(pos)\n if (code === state.marker) {\n state.pos = pos + 1\n state.str += unescapeAll(str.slice(start, pos))\n state.ok = true\n return state\n } else if (code === 0x28 /* ( */ && state.marker === 0x29 /* ) */) {\n return state\n } else if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos++\n }\n\n pos++\n }\n\n // no closing marker found, but this link title may continue on the next line (for references)\n state.can_continue = true\n state.str += unescapeAll(str.slice(start, pos))\n return state\n}\n","/**\n * class Renderer\n *\n * Generates HTML from parsed token stream. Each instance has independent\n * copy of rules. Those can be rewritten with ease. Also, you can add new\n * rules if you create plugin and adds new token types.\n **/\n\nimport { assign, unescapeAll, escapeHtml } from './common/utils.mjs'\n\nconst default_rules = {}\n\ndefault_rules.code_inline = function (tokens, idx, options, env, slf) {\n const token = tokens[idx]\n\n return '' +\n escapeHtml(token.content) +\n ''\n}\n\ndefault_rules.code_block = function (tokens, idx, options, env, slf) {\n const token = tokens[idx]\n\n return '' +\n escapeHtml(tokens[idx].content) +\n '\\n'\n}\n\ndefault_rules.fence = function (tokens, idx, options, env, slf) {\n const token = tokens[idx]\n const info = token.info ? unescapeAll(token.info).trim() : ''\n let langName = ''\n let langAttrs = ''\n\n if (info) {\n const arr = info.split(/(\\s+)/g)\n langName = arr[0]\n langAttrs = arr.slice(2).join('')\n }\n\n let highlighted\n if (options.highlight) {\n highlighted = options.highlight(token.content, langName, langAttrs) || escapeHtml(token.content)\n } else {\n highlighted = escapeHtml(token.content)\n }\n\n if (highlighted.indexOf('${highlighted}\\n`\n }\n\n return `
${highlighted}
\\n`\n}\n\ndefault_rules.image = function (tokens, idx, options, env, slf) {\n const token = tokens[idx]\n\n // \"alt\" attr MUST be set, even if empty. Because it's mandatory and\n // should be placed on proper position for tests.\n //\n // Replace content with actual value\n\n token.attrs[token.attrIndex('alt')][1] =\n slf.renderInlineAsText(token.children, options, env)\n\n return slf.renderToken(tokens, idx, options)\n}\n\ndefault_rules.hardbreak = function (tokens, idx, options /*, env */) {\n return options.xhtmlOut ? '
\\n' : '
\\n'\n}\ndefault_rules.softbreak = function (tokens, idx, options /*, env */) {\n return options.breaks ? (options.xhtmlOut ? '
\\n' : '
\\n') : '\\n'\n}\n\ndefault_rules.text = function (tokens, idx /*, options, env */) {\n return escapeHtml(tokens[idx].content)\n}\n\ndefault_rules.html_block = function (tokens, idx /*, options, env */) {\n return tokens[idx].content\n}\ndefault_rules.html_inline = function (tokens, idx /*, options, env */) {\n return tokens[idx].content\n}\n\n/**\n * new Renderer()\n *\n * Creates new [[Renderer]] instance and fill [[Renderer#rules]] with defaults.\n **/\nfunction Renderer () {\n /**\n * Renderer#rules -> Object\n *\n * Contains render rules for tokens. Can be updated and extended.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.renderer.rules.strong_open = function () { return ''; };\n * md.renderer.rules.strong_close = function () { return ''; };\n *\n * var result = md.renderInline(...);\n * ```\n *\n * Each rule is called as independent static function with fixed signature:\n *\n * ```javascript\n * function my_token_render(tokens, idx, options, env, renderer) {\n * // ...\n * return renderedHTML;\n * }\n * ```\n *\n * See [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.mjs)\n * for more details and examples.\n **/\n this.rules = assign({}, default_rules)\n}\n\n/**\n * Renderer.renderAttrs(token) -> String\n *\n * Render token attributes to string.\n **/\nRenderer.prototype.renderAttrs = function renderAttrs (token) {\n let i, l, result\n\n if (!token.attrs) { return '' }\n\n result = ''\n\n for (i = 0, l = token.attrs.length; i < l; i++) {\n result += ' ' + escapeHtml(token.attrs[i][0]) + '=\"' + escapeHtml(token.attrs[i][1]) + '\"'\n }\n\n return result\n}\n\n/**\n * Renderer.renderToken(tokens, idx, options) -> String\n * - tokens (Array): list of tokens\n * - idx (Numbed): token index to render\n * - options (Object): params of parser instance\n *\n * Default token renderer. Can be overriden by custom function\n * in [[Renderer#rules]].\n **/\nRenderer.prototype.renderToken = function renderToken (tokens, idx, options) {\n const token = tokens[idx]\n let result = ''\n\n // Tight list paragraphs\n if (token.hidden) {\n return ''\n }\n\n // Insert a newline between hidden paragraph and subsequent opening\n // block-level tag.\n //\n // For example, here we should insert a newline before blockquote:\n // - a\n // >\n //\n if (token.block && token.nesting !== -1 && idx && tokens[idx - 1].hidden) {\n result += '\\n'\n }\n\n // Add token name, e.g. ``.\n //\n needLf = false\n }\n }\n }\n }\n\n result += needLf ? '>\\n' : '>'\n\n return result\n}\n\n/**\n * Renderer.renderInline(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * The same as [[Renderer.render]], but for single token of `inline` type.\n **/\nRenderer.prototype.renderInline = function (tokens, options, env) {\n let result = ''\n const rules = this.rules\n\n for (let i = 0, len = tokens.length; i < len; i++) {\n const type = tokens[i].type\n\n if (typeof rules[type] !== 'undefined') {\n result += rules[type](tokens, i, options, env, this)\n } else {\n result += this.renderToken(tokens, i, options)\n }\n }\n\n return result\n}\n\n/** internal\n * Renderer.renderInlineAsText(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Special kludge for image `alt` attributes to conform CommonMark spec.\n * Don't try to use it! Spec requires to show `alt` content with stripped markup,\n * instead of simple escaping.\n **/\nRenderer.prototype.renderInlineAsText = function (tokens, options, env) {\n let result = ''\n\n for (let i = 0, len = tokens.length; i < len; i++) {\n switch (tokens[i].type) {\n case 'text':\n result += tokens[i].content\n break\n case 'image':\n result += this.renderInlineAsText(tokens[i].children, options, env)\n break\n case 'html_inline':\n case 'html_block':\n result += tokens[i].content\n break\n case 'softbreak':\n case 'hardbreak':\n result += '\\n'\n break\n default:\n // all other tokens are skipped\n }\n }\n\n return result\n}\n\n/**\n * Renderer.render(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Takes token stream and generates HTML. Probably, you will never need to call\n * this method directly.\n **/\nRenderer.prototype.render = function (tokens, options, env) {\n let result = ''\n const rules = this.rules\n\n for (let i = 0, len = tokens.length; i < len; i++) {\n const type = tokens[i].type\n\n if (type === 'inline') {\n result += this.renderInline(tokens[i].children, options, env)\n } else if (typeof rules[type] !== 'undefined') {\n result += rules[type](tokens, i, options, env, this)\n } else {\n result += this.renderToken(tokens, i, options, env)\n }\n }\n\n return result\n}\n\nexport default Renderer\n","/**\n * class Ruler\n *\n * Helper class, used by [[MarkdownIt#core]], [[MarkdownIt#block]] and\n * [[MarkdownIt#inline]] to manage sequences of functions (rules):\n *\n * - keep rules in defined order\n * - assign the name to each rule\n * - enable/disable rules\n * - add/replace rules\n * - allow assign rules to additional named chains (in the same)\n * - cacheing lists of active rules\n *\n * You will not need use this class directly until write plugins. For simple\n * rules control use [[MarkdownIt.disable]], [[MarkdownIt.enable]] and\n * [[MarkdownIt.use]].\n **/\n\n/**\n * new Ruler()\n **/\nfunction Ruler () {\n // List of added rules. Each element is:\n //\n // {\n // name: XXX,\n // enabled: Boolean,\n // fn: Function(),\n // alt: [ name2, name3 ]\n // }\n //\n this.__rules__ = []\n\n // Cached rule chains.\n //\n // First level - chain name, '' for default.\n // Second level - diginal anchor for fast filtering by charcodes.\n //\n this.__cache__ = null\n}\n\n// Helper methods, should not be used directly\n\n// Find rule index by name\n//\nRuler.prototype.__find__ = function (name) {\n for (let i = 0; i < this.__rules__.length; i++) {\n if (this.__rules__[i].name === name) {\n return i\n }\n }\n return -1\n}\n\n// Build rules lookup cache\n//\nRuler.prototype.__compile__ = function () {\n const self = this\n const chains = ['']\n\n // collect unique names\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return }\n\n rule.alt.forEach(function (altName) {\n if (chains.indexOf(altName) < 0) {\n chains.push(altName)\n }\n })\n })\n\n self.__cache__ = {}\n\n chains.forEach(function (chain) {\n self.__cache__[chain] = []\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return }\n\n if (chain && rule.alt.indexOf(chain) < 0) { return }\n\n self.__cache__[chain].push(rule.fn)\n })\n })\n}\n\n/**\n * Ruler.at(name, fn [, options])\n * - name (String): rule name to replace.\n * - fn (Function): new rule function.\n * - options (Object): new rule options (not mandatory).\n *\n * Replace rule by name with new function & options. Throws error if name not\n * found.\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * Replace existing typographer replacement rule with new one:\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.at('replacements', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.at = function (name, fn, options) {\n const index = this.__find__(name)\n const opt = options || {}\n\n if (index === -1) { throw new Error('Parser rule not found: ' + name) }\n\n this.__rules__[index].fn = fn\n this.__rules__[index].alt = opt.alt || []\n this.__cache__ = null\n}\n\n/**\n * Ruler.before(beforeName, ruleName, fn [, options])\n * - beforeName (String): new rule will be added before this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain before one with given name. See also\n * [[Ruler.after]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.block.ruler.before('paragraph', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.before = function (beforeName, ruleName, fn, options) {\n const index = this.__find__(beforeName)\n const opt = options || {}\n\n if (index === -1) { throw new Error('Parser rule not found: ' + beforeName) }\n\n this.__rules__.splice(index, 0, {\n name: ruleName,\n enabled: true,\n fn,\n alt: opt.alt || []\n })\n\n this.__cache__ = null\n}\n\n/**\n * Ruler.after(afterName, ruleName, fn [, options])\n * - afterName (String): new rule will be added after this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain after one with given name. See also\n * [[Ruler.before]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.inline.ruler.after('text', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.after = function (afterName, ruleName, fn, options) {\n const index = this.__find__(afterName)\n const opt = options || {}\n\n if (index === -1) { throw new Error('Parser rule not found: ' + afterName) }\n\n this.__rules__.splice(index + 1, 0, {\n name: ruleName,\n enabled: true,\n fn,\n alt: opt.alt || []\n })\n\n this.__cache__ = null\n}\n\n/**\n * Ruler.push(ruleName, fn [, options])\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Push new rule to the end of chain. See also\n * [[Ruler.before]], [[Ruler.after]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.push('my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.push = function (ruleName, fn, options) {\n const opt = options || {}\n\n this.__rules__.push({\n name: ruleName,\n enabled: true,\n fn,\n alt: opt.alt || []\n })\n\n this.__cache__ = null\n}\n\n/**\n * Ruler.enable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to enable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.disable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.enable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [list] }\n\n const result = []\n\n // Search by name and enable\n list.forEach(function (name) {\n const idx = this.__find__(name)\n\n if (idx < 0) {\n if (ignoreInvalid) { return }\n throw new Error('Rules manager: invalid rule name ' + name)\n }\n this.__rules__[idx].enabled = true\n result.push(name)\n }, this)\n\n this.__cache__ = null\n return result\n}\n\n/**\n * Ruler.enableOnly(list [, ignoreInvalid])\n * - list (String|Array): list of rule names to enable (whitelist).\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names, and disable everything else. If any rule name\n * not found - throw Error. Errors can be disabled by second param.\n *\n * See also [[Ruler.disable]], [[Ruler.enable]].\n **/\nRuler.prototype.enableOnly = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [list] }\n\n this.__rules__.forEach(function (rule) { rule.enabled = false })\n\n this.enable(list, ignoreInvalid)\n}\n\n/**\n * Ruler.disable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Disable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.enable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.disable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [list] }\n\n const result = []\n\n // Search by name and disable\n list.forEach(function (name) {\n const idx = this.__find__(name)\n\n if (idx < 0) {\n if (ignoreInvalid) { return }\n throw new Error('Rules manager: invalid rule name ' + name)\n }\n this.__rules__[idx].enabled = false\n result.push(name)\n }, this)\n\n this.__cache__ = null\n return result\n}\n\n/**\n * Ruler.getRules(chainName) -> Array\n *\n * Return array of active functions (rules) for given chain name. It analyzes\n * rules configuration, compiles caches if not exists and returns result.\n *\n * Default chain name is `''` (empty string). It can't be skipped. That's\n * done intentionally, to keep signature monomorphic for high speed.\n **/\nRuler.prototype.getRules = function (chainName) {\n if (this.__cache__ === null) {\n this.__compile__()\n }\n\n // Chain can be empty, if rules disabled. But we still have to return Array.\n return this.__cache__[chainName] || []\n}\n\nexport default Ruler\n","// Token class\n\n/**\n * class Token\n **/\n\n/**\n * new Token(type, tag, nesting)\n *\n * Create new token and fill passed properties.\n **/\nfunction Token (type, tag, nesting) {\n /**\n * Token#type -> String\n *\n * Type of the token (string, e.g. \"paragraph_open\")\n **/\n this.type = type\n\n /**\n * Token#tag -> String\n *\n * html tag name, e.g. \"p\"\n **/\n this.tag = tag\n\n /**\n * Token#attrs -> Array\n *\n * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]`\n **/\n this.attrs = null\n\n /**\n * Token#map -> Array\n *\n * Source map info. Format: `[ line_begin, line_end ]`\n **/\n this.map = null\n\n /**\n * Token#nesting -> Number\n *\n * Level change (number in {-1, 0, 1} set), where:\n *\n * - `1` means the tag is opening\n * - `0` means the tag is self-closing\n * - `-1` means the tag is closing\n **/\n this.nesting = nesting\n\n /**\n * Token#level -> Number\n *\n * nesting level, the same as `state.level`\n **/\n this.level = 0\n\n /**\n * Token#children -> Array\n *\n * An array of child nodes (inline and img tokens)\n **/\n this.children = null\n\n /**\n * Token#content -> String\n *\n * In a case of self-closing tag (code, html, fence, etc.),\n * it has contents of this tag.\n **/\n this.content = ''\n\n /**\n * Token#markup -> String\n *\n * '*' or '_' for emphasis, fence string for fence, etc.\n **/\n this.markup = ''\n\n /**\n * Token#info -> String\n *\n * Additional information:\n *\n * - Info string for \"fence\" tokens\n * - The value \"auto\" for autolink \"link_open\" and \"link_close\" tokens\n * - The string value of the item marker for ordered-list \"list_item_open\" tokens\n **/\n this.info = ''\n\n /**\n * Token#meta -> Object\n *\n * A place for plugins to store an arbitrary data\n **/\n this.meta = null\n\n /**\n * Token#block -> Boolean\n *\n * True for block-level tokens, false for inline tokens.\n * Used in renderer to calculate line breaks\n **/\n this.block = false\n\n /**\n * Token#hidden -> Boolean\n *\n * If it's true, ignore this element when rendering. Used for tight lists\n * to hide paragraphs.\n **/\n this.hidden = false\n}\n\n/**\n * Token.attrIndex(name) -> Number\n *\n * Search attribute index by name.\n **/\nToken.prototype.attrIndex = function attrIndex (name) {\n if (!this.attrs) { return -1 }\n\n const attrs = this.attrs\n\n for (let i = 0, len = attrs.length; i < len; i++) {\n if (attrs[i][0] === name) { return i }\n }\n return -1\n}\n\n/**\n * Token.attrPush(attrData)\n *\n * Add `[ name, value ]` attribute to list. Init attrs if necessary\n **/\nToken.prototype.attrPush = function attrPush (attrData) {\n if (this.attrs) {\n this.attrs.push(attrData)\n } else {\n this.attrs = [attrData]\n }\n}\n\n/**\n * Token.attrSet(name, value)\n *\n * Set `name` attribute to `value`. Override old value if exists.\n **/\nToken.prototype.attrSet = function attrSet (name, value) {\n const idx = this.attrIndex(name)\n const attrData = [name, value]\n\n if (idx < 0) {\n this.attrPush(attrData)\n } else {\n this.attrs[idx] = attrData\n }\n}\n\n/**\n * Token.attrGet(name)\n *\n * Get the value of attribute `name`, or null if it does not exist.\n **/\nToken.prototype.attrGet = function attrGet (name) {\n const idx = this.attrIndex(name)\n let value = null\n if (idx >= 0) {\n value = this.attrs[idx][1]\n }\n return value\n}\n\n/**\n * Token.attrJoin(name, value)\n *\n * Join value to existing attribute via space. Or create new attribute if not\n * exists. Useful to operate with token classes.\n **/\nToken.prototype.attrJoin = function attrJoin (name, value) {\n const idx = this.attrIndex(name)\n\n if (idx < 0) {\n this.attrPush([name, value])\n } else {\n this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value\n }\n}\n\nexport default Token\n","// Core state object\n//\n\nimport Token from '../token.mjs'\n\nfunction StateCore (src, md, env) {\n this.src = src\n this.env = env\n this.tokens = []\n this.inlineMode = false\n this.md = md // link to parser instance\n}\n\n// re-export Token class to use in core rules\nStateCore.prototype.Token = Token\n\nexport default StateCore\n","// Normalize input string\n\n// https://spec.commonmark.org/0.29/#line-ending\nconst NEWLINES_RE = /\\r\\n?|\\n/g\nconst NULL_RE = /\\0/g\n\nexport default function normalize (state) {\n let str\n\n // Normalize newlines\n str = state.src.replace(NEWLINES_RE, '\\n')\n\n // Replace NULL characters\n str = str.replace(NULL_RE, '\\uFFFD')\n\n state.src = str\n}\n","export default function block (state) {\n let token\n\n if (state.inlineMode) {\n token = new state.Token('inline', '', 0)\n token.content = state.src\n token.map = [0, 1]\n token.children = []\n state.tokens.push(token)\n } else {\n state.md.block.parse(state.src, state.md, state.env, state.tokens)\n }\n}\n","export default function inline (state) {\n const tokens = state.tokens\n\n // Parse inlines\n for (let i = 0, l = tokens.length; i < l; i++) {\n const tok = tokens[i]\n if (tok.type === 'inline') {\n state.md.inline.parse(tok.content, state.md, state.env, tok.children)\n }\n }\n}\n","// Replace link-like texts with link nodes.\n//\n// Currently restricted by `md.validateLink()` to http/https/ftp\n//\n\nimport { arrayReplaceAt } from '../common/utils.mjs'\n\nfunction isLinkOpen (str) {\n return /^\\s]/i.test(str)\n}\nfunction isLinkClose (str) {\n return /^<\\/a\\s*>/i.test(str)\n}\n\nexport default function linkify (state) {\n const blockTokens = state.tokens\n\n if (!state.md.options.linkify) { return }\n\n for (let j = 0, l = blockTokens.length; j < l; j++) {\n if (blockTokens[j].type !== 'inline' ||\n !state.md.linkify.pretest(blockTokens[j].content)) {\n continue\n }\n\n let tokens = blockTokens[j].children\n\n let htmlLinkLevel = 0\n\n // We scan from the end, to keep position when new tags added.\n // Use reversed logic in links start/end match\n for (let i = tokens.length - 1; i >= 0; i--) {\n const currentToken = tokens[i]\n\n // Skip content of markdown links\n if (currentToken.type === 'link_close') {\n i--\n while (tokens[i].level !== currentToken.level && tokens[i].type !== 'link_open') {\n i--\n }\n continue\n }\n\n // Skip content of html tag links\n if (currentToken.type === 'html_inline') {\n if (isLinkOpen(currentToken.content) && htmlLinkLevel > 0) {\n htmlLinkLevel--\n }\n if (isLinkClose(currentToken.content)) {\n htmlLinkLevel++\n }\n }\n if (htmlLinkLevel > 0) { continue }\n\n if (currentToken.type === 'text' && state.md.linkify.test(currentToken.content)) {\n const text = currentToken.content\n let links = state.md.linkify.match(text)\n\n // Now split string to nodes\n const nodes = []\n let level = currentToken.level\n let lastPos = 0\n\n // forbid escape sequence at the start of the string,\n // this avoids http\\://example.com/ from being linkified as\n // http://example.com/\n if (links.length > 0 &&\n links[0].index === 0 &&\n i > 0 &&\n tokens[i - 1].type === 'text_special') {\n links = links.slice(1)\n }\n\n for (let ln = 0; ln < links.length; ln++) {\n const url = links[ln].url\n const fullUrl = state.md.normalizeLink(url)\n if (!state.md.validateLink(fullUrl)) { continue }\n\n let urlText = links[ln].text\n\n // Linkifier might send raw hostnames like \"example.com\", where url\n // starts with domain name. So we prepend http:// in those cases,\n // and remove it afterwards.\n //\n if (!links[ln].schema) {\n urlText = state.md.normalizeLinkText('http://' + urlText).replace(/^http:\\/\\//, '')\n } else if (links[ln].schema === 'mailto:' && !/^mailto:/i.test(urlText)) {\n urlText = state.md.normalizeLinkText('mailto:' + urlText).replace(/^mailto:/, '')\n } else {\n urlText = state.md.normalizeLinkText(urlText)\n }\n\n const pos = links[ln].index\n\n if (pos > lastPos) {\n const token = new state.Token('text', '', 0)\n token.content = text.slice(lastPos, pos)\n token.level = level\n nodes.push(token)\n }\n\n const token_o = new state.Token('link_open', 'a', 1)\n token_o.attrs = [['href', fullUrl]]\n token_o.level = level++\n token_o.markup = 'linkify'\n token_o.info = 'auto'\n nodes.push(token_o)\n\n const token_t = new state.Token('text', '', 0)\n token_t.content = urlText\n token_t.level = level\n nodes.push(token_t)\n\n const token_c = new state.Token('link_close', 'a', -1)\n token_c.level = --level\n token_c.markup = 'linkify'\n token_c.info = 'auto'\n nodes.push(token_c)\n\n lastPos = links[ln].lastIndex\n }\n if (lastPos < text.length) {\n const token = new state.Token('text', '', 0)\n token.content = text.slice(lastPos)\n token.level = level\n nodes.push(token)\n }\n\n // replace current node\n blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes)\n }\n }\n }\n}\n","// Simple typographic replacements\n//\n// (c) (C) → ©\n// (tm) (TM) → ™\n// (r) (R) → ®\n// +- → ±\n// ... → … (also ?.... → ?.., !.... → !..)\n// ???????? → ???, !!!!! → !!!, `,,` → `,`\n// -- → –, --- → —\n//\n\n// TODO:\n// - fractionals 1/2, 1/4, 3/4 -> ½, ¼, ¾\n// - multiplications 2 x 4 -> 2 × 4\n\nconst RARE_RE = /\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/\n\n// Workaround for phantomjs - need regex without /g flag,\n// or root check will fail every second time\nconst SCOPED_ABBR_TEST_RE = /\\((c|tm|r)\\)/i\n\nconst SCOPED_ABBR_RE = /\\((c|tm|r)\\)/ig\nconst SCOPED_ABBR = {\n c: '©',\n r: '®',\n tm: '™'\n}\n\nfunction replaceFn (match, name) {\n return SCOPED_ABBR[name.toLowerCase()]\n}\n\nfunction replace_scoped (inlineTokens) {\n let inside_autolink = 0\n\n for (let i = inlineTokens.length - 1; i >= 0; i--) {\n const token = inlineTokens[i]\n\n if (token.type === 'text' && !inside_autolink) {\n token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn)\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++\n }\n }\n}\n\nfunction replace_rare (inlineTokens) {\n let inside_autolink = 0\n\n for (let i = inlineTokens.length - 1; i >= 0; i--) {\n const token = inlineTokens[i]\n\n if (token.type === 'text' && !inside_autolink) {\n if (RARE_RE.test(token.content)) {\n token.content = token.content\n .replace(/\\+-/g, '±')\n // .., ..., ....... -> …\n // but ?..... & !..... -> ?.. & !..\n .replace(/\\.{2,}/g, '…').replace(/([?!])…/g, '$1..')\n .replace(/([?!]){4,}/g, '$1$1$1').replace(/,{2,}/g, ',')\n // em-dash\n .replace(/(^|[^-])---(?=[^-]|$)/mg, '$1\\u2014')\n // en-dash\n .replace(/(^|\\s)--(?=\\s|$)/mg, '$1\\u2013')\n .replace(/(^|[^-\\s])--(?=[^-\\s]|$)/mg, '$1\\u2013')\n }\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++\n }\n }\n}\n\nexport default function replace (state) {\n let blkIdx\n\n if (!state.md.options.typographer) { return }\n\n for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n if (state.tokens[blkIdx].type !== 'inline') { continue }\n\n if (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) {\n replace_scoped(state.tokens[blkIdx].children)\n }\n\n if (RARE_RE.test(state.tokens[blkIdx].content)) {\n replace_rare(state.tokens[blkIdx].children)\n }\n }\n}\n","// Convert straight quotation marks to typographic ones\n//\n\nimport { isWhiteSpace, isPunctChar, isMdAsciiPunct } from '../common/utils.mjs'\n\nconst QUOTE_TEST_RE = /['\"]/\nconst QUOTE_RE = /['\"]/g\nconst APOSTROPHE = '\\u2019' /* ’ */\n\nfunction replaceAt (str, index, ch) {\n return str.slice(0, index) + ch + str.slice(index + 1)\n}\n\nfunction process_inlines (tokens, state) {\n let j\n\n const stack = []\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i]\n\n const thisLevel = tokens[i].level\n\n for (j = stack.length - 1; j >= 0; j--) {\n if (stack[j].level <= thisLevel) { break }\n }\n stack.length = j + 1\n\n if (token.type !== 'text') { continue }\n\n let text = token.content\n let pos = 0\n let max = text.length\n\n /* eslint no-labels:0,block-scoped-var:0 */\n OUTER:\n while (pos < max) {\n QUOTE_RE.lastIndex = pos\n const t = QUOTE_RE.exec(text)\n if (!t) { break }\n\n let canOpen = true\n let canClose = true\n pos = t.index + 1\n const isSingle = (t[0] === \"'\")\n\n // Find previous character,\n // default to space if it's the beginning of the line\n //\n let lastChar = 0x20\n\n if (t.index - 1 >= 0) {\n lastChar = text.charCodeAt(t.index - 1)\n } else {\n for (j = i - 1; j >= 0; j--) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break // lastChar defaults to 0x20\n if (!tokens[j].content) continue // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1)\n break\n }\n }\n\n // Find next character,\n // default to space if it's the end of the line\n //\n let nextChar = 0x20\n\n if (pos < max) {\n nextChar = text.charCodeAt(pos)\n } else {\n for (j = i + 1; j < tokens.length; j++) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break // nextChar defaults to 0x20\n if (!tokens[j].content) continue // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n nextChar = tokens[j].content.charCodeAt(0)\n break\n }\n }\n\n const isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar))\n const isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar))\n\n const isLastWhiteSpace = isWhiteSpace(lastChar)\n const isNextWhiteSpace = isWhiteSpace(nextChar)\n\n if (isNextWhiteSpace) {\n canOpen = false\n } else if (isNextPunctChar) {\n if (!(isLastWhiteSpace || isLastPunctChar)) {\n canOpen = false\n }\n }\n\n if (isLastWhiteSpace) {\n canClose = false\n } else if (isLastPunctChar) {\n if (!(isNextWhiteSpace || isNextPunctChar)) {\n canClose = false\n }\n }\n\n if (nextChar === 0x22 /* \" */ && t[0] === '\"') {\n if (lastChar >= 0x30 /* 0 */ && lastChar <= 0x39 /* 9 */) {\n // special case: 1\"\" - count first quote as an inch\n canClose = canOpen = false\n }\n }\n\n if (canOpen && canClose) {\n // Replace quotes in the middle of punctuation sequence, but not\n // in the middle of the words, i.e.:\n //\n // 1. foo \" bar \" baz - not replaced\n // 2. foo-\"-bar-\"-baz - replaced\n // 3. foo\"bar\"baz - not replaced\n //\n canOpen = isLastPunctChar\n canClose = isNextPunctChar\n }\n\n if (!canOpen && !canClose) {\n // middle of word\n if (isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE)\n }\n continue\n }\n\n if (canClose) {\n // this could be a closing quote, rewind the stack to get a match\n for (j = stack.length - 1; j >= 0; j--) {\n let item = stack[j]\n if (stack[j].level < thisLevel) { break }\n if (item.single === isSingle && stack[j].level === thisLevel) {\n item = stack[j]\n\n let openQuote\n let closeQuote\n if (isSingle) {\n openQuote = state.md.options.quotes[2]\n closeQuote = state.md.options.quotes[3]\n } else {\n openQuote = state.md.options.quotes[0]\n closeQuote = state.md.options.quotes[1]\n }\n\n // replace token.content *before* tokens[item.token].content,\n // because, if they are pointing at the same token, replaceAt\n // could mess up indices when quote length != 1\n token.content = replaceAt(token.content, t.index, closeQuote)\n tokens[item.token].content = replaceAt(\n tokens[item.token].content, item.pos, openQuote)\n\n pos += closeQuote.length - 1\n if (item.token === i) { pos += openQuote.length - 1 }\n\n text = token.content\n max = text.length\n\n stack.length = j\n continue OUTER\n }\n }\n }\n\n if (canOpen) {\n stack.push({\n token: i,\n pos: t.index,\n single: isSingle,\n level: thisLevel\n })\n } else if (canClose && isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE)\n }\n }\n }\n}\n\nexport default function smartquotes (state) {\n /* eslint max-depth:0 */\n if (!state.md.options.typographer) { return }\n\n for (let blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n if (state.tokens[blkIdx].type !== 'inline' ||\n !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) {\n continue\n }\n\n process_inlines(state.tokens[blkIdx].children, state)\n }\n}\n","// Join raw text tokens with the rest of the text\n//\n// This is set as a separate rule to provide an opportunity for plugins\n// to run text replacements after text join, but before escape join.\n//\n// For example, `\\:)` shouldn't be replaced with an emoji.\n//\n\nexport default function text_join (state) {\n let curr, last\n const blockTokens = state.tokens\n const l = blockTokens.length\n\n for (let j = 0; j < l; j++) {\n if (blockTokens[j].type !== 'inline') continue\n\n const tokens = blockTokens[j].children\n const max = tokens.length\n\n for (curr = 0; curr < max; curr++) {\n if (tokens[curr].type === 'text_special') {\n tokens[curr].type = 'text'\n }\n }\n\n for (curr = last = 0; curr < max; curr++) {\n if (tokens[curr].type === 'text' &&\n curr + 1 < max &&\n tokens[curr + 1].type === 'text') {\n // collapse two adjacent text nodes\n tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content\n } else {\n if (curr !== last) { tokens[last] = tokens[curr] }\n\n last++\n }\n }\n\n if (curr !== last) {\n tokens.length = last\n }\n }\n}\n","/** internal\n * class Core\n *\n * Top-level rules executor. Glues block/inline parsers and does intermediate\n * transformations.\n **/\n\nimport Ruler from './ruler.mjs'\nimport StateCore from './rules_core/state_core.mjs'\n\nimport r_normalize from './rules_core/normalize.mjs'\nimport r_block from './rules_core/block.mjs'\nimport r_inline from './rules_core/inline.mjs'\nimport r_linkify from './rules_core/linkify.mjs'\nimport r_replacements from './rules_core/replacements.mjs'\nimport r_smartquotes from './rules_core/smartquotes.mjs'\nimport r_text_join from './rules_core/text_join.mjs'\n\nconst _rules = [\n ['normalize', r_normalize],\n ['block', r_block],\n ['inline', r_inline],\n ['linkify', r_linkify],\n ['replacements', r_replacements],\n ['smartquotes', r_smartquotes],\n // `text_join` finds `text_special` tokens (for escape sequences)\n // and joins them with the rest of the text\n ['text_join', r_text_join]\n]\n\n/**\n * new Core()\n **/\nfunction Core () {\n /**\n * Core#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of core rules.\n **/\n this.ruler = new Ruler()\n\n for (let i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1])\n }\n}\n\n/**\n * Core.process(state)\n *\n * Executes core chain rules.\n **/\nCore.prototype.process = function (state) {\n const rules = this.ruler.getRules('')\n\n for (let i = 0, l = rules.length; i < l; i++) {\n rules[i](state)\n }\n}\n\nCore.prototype.State = StateCore\n\nexport default Core\n","// Parser state class\n\nimport Token from '../token.mjs'\nimport { isSpace } from '../common/utils.mjs'\n\nfunction StateBlock (src, md, env, tokens) {\n this.src = src\n\n // link to parser instance\n this.md = md\n\n this.env = env\n\n //\n // Internal state vartiables\n //\n\n this.tokens = tokens\n\n this.bMarks = [] // line begin offsets for fast jumps\n this.eMarks = [] // line end offsets for fast jumps\n this.tShift = [] // offsets of the first non-space characters (tabs not expanded)\n this.sCount = [] // indents for each line (tabs expanded)\n\n // An amount of virtual spaces (tabs expanded) between beginning\n // of each line (bMarks) and real beginning of that line.\n //\n // It exists only as a hack because blockquotes override bMarks\n // losing information in the process.\n //\n // It's used only when expanding tabs, you can think about it as\n // an initial tab length, e.g. bsCount=21 applied to string `\\t123`\n // means first tab should be expanded to 4-21%4 === 3 spaces.\n //\n this.bsCount = []\n\n // block parser variables\n\n // required block content indent (for example, if we are\n // inside a list, it would be positioned after list marker)\n this.blkIndent = 0\n this.line = 0 // line index in src\n this.lineMax = 0 // lines count\n this.tight = false // loose/tight mode for lists\n this.ddIndent = -1 // indent of the current dd block (-1 if there isn't any)\n this.listIndent = -1 // indent of the current list block (-1 if there isn't any)\n\n // can be 'blockquote', 'list', 'root', 'paragraph' or 'reference'\n // used in lists to determine if they interrupt a paragraph\n this.parentType = 'root'\n\n this.level = 0\n\n // Create caches\n // Generate markers.\n const s = this.src\n\n for (let start = 0, pos = 0, indent = 0, offset = 0, len = s.length, indent_found = false; pos < len; pos++) {\n const ch = s.charCodeAt(pos)\n\n if (!indent_found) {\n if (isSpace(ch)) {\n indent++\n\n if (ch === 0x09) {\n offset += 4 - offset % 4\n } else {\n offset++\n }\n continue\n } else {\n indent_found = true\n }\n }\n\n if (ch === 0x0A || pos === len - 1) {\n if (ch !== 0x0A) { pos++ }\n this.bMarks.push(start)\n this.eMarks.push(pos)\n this.tShift.push(indent)\n this.sCount.push(offset)\n this.bsCount.push(0)\n\n indent_found = false\n indent = 0\n offset = 0\n start = pos + 1\n }\n }\n\n // Push fake entry to simplify cache bounds checks\n this.bMarks.push(s.length)\n this.eMarks.push(s.length)\n this.tShift.push(0)\n this.sCount.push(0)\n this.bsCount.push(0)\n\n this.lineMax = this.bMarks.length - 1 // don't count last fake line\n}\n\n// Push new token to \"stream\".\n//\nStateBlock.prototype.push = function (type, tag, nesting) {\n const token = new Token(type, tag, nesting)\n token.block = true\n\n if (nesting < 0) this.level-- // closing tag\n token.level = this.level\n if (nesting > 0) this.level++ // opening tag\n\n this.tokens.push(token)\n return token\n}\n\nStateBlock.prototype.isEmpty = function isEmpty (line) {\n return this.bMarks[line] + this.tShift[line] >= this.eMarks[line]\n}\n\nStateBlock.prototype.skipEmptyLines = function skipEmptyLines (from) {\n for (let max = this.lineMax; from < max; from++) {\n if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) {\n break\n }\n }\n return from\n}\n\n// Skip spaces from given position.\nStateBlock.prototype.skipSpaces = function skipSpaces (pos) {\n for (let max = this.src.length; pos < max; pos++) {\n const ch = this.src.charCodeAt(pos)\n if (!isSpace(ch)) { break }\n }\n return pos\n}\n\n// Skip spaces from given position in reverse.\nStateBlock.prototype.skipSpacesBack = function skipSpacesBack (pos, min) {\n if (pos <= min) { return pos }\n\n while (pos > min) {\n if (!isSpace(this.src.charCodeAt(--pos))) { return pos + 1 }\n }\n return pos\n}\n\n// Skip char codes from given position\nStateBlock.prototype.skipChars = function skipChars (pos, code) {\n for (let max = this.src.length; pos < max; pos++) {\n if (this.src.charCodeAt(pos) !== code) { break }\n }\n return pos\n}\n\n// Skip char codes reverse from given position - 1\nStateBlock.prototype.skipCharsBack = function skipCharsBack (pos, code, min) {\n if (pos <= min) { return pos }\n\n while (pos > min) {\n if (code !== this.src.charCodeAt(--pos)) { return pos + 1 }\n }\n return pos\n}\n\n// cut lines range from source.\nStateBlock.prototype.getLines = function getLines (begin, end, indent, keepLastLF) {\n if (begin >= end) {\n return ''\n }\n\n const queue = new Array(end - begin)\n\n for (let i = 0, line = begin; line < end; line++, i++) {\n let lineIndent = 0\n const lineStart = this.bMarks[line]\n let first = lineStart\n let last\n\n if (line + 1 < end || keepLastLF) {\n // No need for bounds check because we have fake entry on tail.\n last = this.eMarks[line] + 1\n } else {\n last = this.eMarks[line]\n }\n\n while (first < last && lineIndent < indent) {\n const ch = this.src.charCodeAt(first)\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4\n } else {\n lineIndent++\n }\n } else if (first - lineStart < this.tShift[line]) {\n // patched tShift masked characters to look like spaces (blockquotes, list markers)\n lineIndent++\n } else {\n break\n }\n\n first++\n }\n\n if (lineIndent > indent) {\n // partially expanding tabs in code blocks, e.g '\\t\\tfoobar'\n // with indent=2 becomes ' \\tfoobar'\n queue[i] = new Array(lineIndent - indent + 1).join(' ') + this.src.slice(first, last)\n } else {\n queue[i] = this.src.slice(first, last)\n }\n }\n\n return queue.join('')\n}\n\n// re-export Token class to use in block rules\nStateBlock.prototype.Token = Token\n\nexport default StateBlock\n","// GFM table, https://github.github.com/gfm/#tables-extension-\n\nimport { isSpace } from '../common/utils.mjs'\n\n// Limit the amount of empty autocompleted cells in a table,\n// see https://github.com/markdown-it/markdown-it/issues/1000,\n//\n// Both pulldown-cmark and commonmark-hs limit the number of cells this way to ~200k.\n// We set it to 65k, which can expand user input by a factor of x370\n// (256x256 square is 1.8kB expanded into 650kB).\nconst MAX_AUTOCOMPLETED_CELLS = 0x10000\n\nfunction getLine (state, line) {\n const pos = state.bMarks[line] + state.tShift[line]\n const max = state.eMarks[line]\n\n return state.src.slice(pos, max)\n}\n\nfunction escapedSplit (str) {\n const result = []\n const max = str.length\n\n let pos = 0\n let ch = str.charCodeAt(pos)\n let isEscaped = false\n let lastPos = 0\n let current = ''\n\n while (pos < max) {\n if (ch === 0x7c/* | */) {\n if (!isEscaped) {\n // pipe separating cells, '|'\n result.push(current + str.substring(lastPos, pos))\n current = ''\n lastPos = pos + 1\n } else {\n // escaped pipe, '\\|'\n current += str.substring(lastPos, pos - 1)\n lastPos = pos\n }\n }\n\n isEscaped = (ch === 0x5c/* \\ */)\n pos++\n\n ch = str.charCodeAt(pos)\n }\n\n result.push(current + str.substring(lastPos))\n\n return result\n}\n\nexport default function table (state, startLine, endLine, silent) {\n // should have at least two lines\n if (startLine + 2 > endLine) { return false }\n\n let nextLine = startLine + 1\n\n if (state.sCount[nextLine] < state.blkIndent) { return false }\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[nextLine] - state.blkIndent >= 4) { return false }\n\n // first character of the second line should be '|', '-', ':',\n // and no other characters are allowed but spaces;\n // basically, this is the equivalent of /^[-:|][-:|\\s]*$/ regexp\n\n let pos = state.bMarks[nextLine] + state.tShift[nextLine]\n if (pos >= state.eMarks[nextLine]) { return false }\n\n const firstCh = state.src.charCodeAt(pos++)\n if (firstCh !== 0x7C/* | */ && firstCh !== 0x2D/* - */ && firstCh !== 0x3A/* : */) { return false }\n\n if (pos >= state.eMarks[nextLine]) { return false }\n\n const secondCh = state.src.charCodeAt(pos++)\n if (secondCh !== 0x7C/* | */ && secondCh !== 0x2D/* - */ && secondCh !== 0x3A/* : */ && !isSpace(secondCh)) {\n return false\n }\n\n // if first character is '-', then second character must not be a space\n // (due to parsing ambiguity with list)\n if (firstCh === 0x2D/* - */ && isSpace(secondCh)) { return false }\n\n while (pos < state.eMarks[nextLine]) {\n const ch = state.src.charCodeAt(pos)\n\n if (ch !== 0x7C/* | */ && ch !== 0x2D/* - */ && ch !== 0x3A/* : */ && !isSpace(ch)) { return false }\n\n pos++\n }\n\n let lineText = getLine(state, startLine + 1)\n let columns = lineText.split('|')\n const aligns = []\n for (let i = 0; i < columns.length; i++) {\n const t = columns[i].trim()\n if (!t) {\n // allow empty columns before and after table, but not in between columns;\n // e.g. allow ` |---| `, disallow ` ---||--- `\n if (i === 0 || i === columns.length - 1) {\n continue\n } else {\n return false\n }\n }\n\n if (!/^:?-+:?$/.test(t)) { return false }\n if (t.charCodeAt(t.length - 1) === 0x3A/* : */) {\n aligns.push(t.charCodeAt(0) === 0x3A/* : */ ? 'center' : 'right')\n } else if (t.charCodeAt(0) === 0x3A/* : */) {\n aligns.push('left')\n } else {\n aligns.push('')\n }\n }\n\n lineText = getLine(state, startLine).trim()\n if (lineText.indexOf('|') === -1) { return false }\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n columns = escapedSplit(lineText)\n if (columns.length && columns[0] === '') columns.shift()\n if (columns.length && columns[columns.length - 1] === '') columns.pop()\n\n // header row will define an amount of columns in the entire table,\n // and align row should be exactly the same (the rest of the rows can differ)\n const columnCount = columns.length\n if (columnCount === 0 || columnCount !== aligns.length) { return false }\n\n if (silent) { return true }\n\n const oldParentType = state.parentType\n state.parentType = 'table'\n\n // use 'blockquote' lists for termination because it's\n // the most similar to tables\n const terminatorRules = state.md.block.ruler.getRules('blockquote')\n\n const token_to = state.push('table_open', 'table', 1)\n const tableLines = [startLine, 0]\n token_to.map = tableLines\n\n const token_tho = state.push('thead_open', 'thead', 1)\n token_tho.map = [startLine, startLine + 1]\n\n const token_htro = state.push('tr_open', 'tr', 1)\n token_htro.map = [startLine, startLine + 1]\n\n for (let i = 0; i < columns.length; i++) {\n const token_ho = state.push('th_open', 'th', 1)\n if (aligns[i]) {\n token_ho.attrs = [['style', 'text-align:' + aligns[i]]]\n }\n\n const token_il = state.push('inline', '', 0)\n token_il.content = columns[i].trim()\n token_il.children = []\n\n state.push('th_close', 'th', -1)\n }\n\n state.push('tr_close', 'tr', -1)\n state.push('thead_close', 'thead', -1)\n\n let tbodyLines\n let autocompletedCells = 0\n\n for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break }\n\n let terminate = false\n for (let i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true\n break\n }\n }\n\n if (terminate) { break }\n lineText = getLine(state, nextLine).trim()\n if (!lineText) { break }\n if (state.sCount[nextLine] - state.blkIndent >= 4) { break }\n columns = escapedSplit(lineText)\n if (columns.length && columns[0] === '') columns.shift()\n if (columns.length && columns[columns.length - 1] === '') columns.pop()\n\n // note: autocomplete count can be negative if user specifies more columns than header,\n // but that does not affect intended use (which is limiting expansion)\n autocompletedCells += columnCount - columns.length\n if (autocompletedCells > MAX_AUTOCOMPLETED_CELLS) { break }\n\n if (nextLine === startLine + 2) {\n const token_tbo = state.push('tbody_open', 'tbody', 1)\n token_tbo.map = tbodyLines = [startLine + 2, 0]\n }\n\n const token_tro = state.push('tr_open', 'tr', 1)\n token_tro.map = [nextLine, nextLine + 1]\n\n for (let i = 0; i < columnCount; i++) {\n const token_tdo = state.push('td_open', 'td', 1)\n if (aligns[i]) {\n token_tdo.attrs = [['style', 'text-align:' + aligns[i]]]\n }\n\n const token_il = state.push('inline', '', 0)\n token_il.content = columns[i] ? columns[i].trim() : ''\n token_il.children = []\n\n state.push('td_close', 'td', -1)\n }\n state.push('tr_close', 'tr', -1)\n }\n\n if (tbodyLines) {\n state.push('tbody_close', 'tbody', -1)\n tbodyLines[1] = nextLine\n }\n\n state.push('table_close', 'table', -1)\n tableLines[1] = nextLine\n\n state.parentType = oldParentType\n state.line = nextLine\n return true\n}\n","// Code block (4 spaces padded)\n\nexport default function code (state, startLine, endLine/*, silent */) {\n if (state.sCount[startLine] - state.blkIndent < 4) { return false }\n\n let nextLine = startLine + 1\n let last = nextLine\n\n while (nextLine < endLine) {\n if (state.isEmpty(nextLine)) {\n nextLine++\n continue\n }\n\n if (state.sCount[nextLine] - state.blkIndent >= 4) {\n nextLine++\n last = nextLine\n continue\n }\n break\n }\n\n state.line = last\n\n const token = state.push('code_block', 'code', 0)\n token.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + '\\n'\n token.map = [startLine, state.line]\n\n return true\n}\n","// fences (``` lang, ~~~ lang)\n\nexport default function fence (state, startLine, endLine, silent) {\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n let max = state.eMarks[startLine]\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n if (pos + 3 > max) { return false }\n\n const marker = state.src.charCodeAt(pos)\n\n if (marker !== 0x7E/* ~ */ && marker !== 0x60 /* ` */) {\n return false\n }\n\n // scan marker length\n let mem = pos\n pos = state.skipChars(pos, marker)\n\n let len = pos - mem\n\n if (len < 3) { return false }\n\n const markup = state.src.slice(mem, pos)\n const params = state.src.slice(pos, max)\n\n if (marker === 0x60 /* ` */) {\n if (params.indexOf(String.fromCharCode(marker)) >= 0) {\n return false\n }\n }\n\n // Since start is found, we can report success here in validation mode\n if (silent) { return true }\n\n // search end of block\n let nextLine = startLine\n let haveEndMarker = false\n\n for (;;) {\n nextLine++\n if (nextLine >= endLine) {\n // unclosed block should be autoclosed by end of document.\n // also block seems to be autoclosed by end of parent\n break\n }\n\n pos = mem = state.bMarks[nextLine] + state.tShift[nextLine]\n max = state.eMarks[nextLine]\n\n if (pos < max && state.sCount[nextLine] < state.blkIndent) {\n // non-empty line with negative indent should stop the list:\n // - ```\n // test\n break\n }\n\n if (state.src.charCodeAt(pos) !== marker) { continue }\n\n if (state.sCount[nextLine] - state.blkIndent >= 4) {\n // closing fence should be indented less than 4 spaces\n continue\n }\n\n pos = state.skipChars(pos, marker)\n\n // closing code fence must be at least as long as the opening one\n if (pos - mem < len) { continue }\n\n // make sure tail has spaces only\n pos = state.skipSpaces(pos)\n\n if (pos < max) { continue }\n\n haveEndMarker = true\n // found!\n break\n }\n\n // If a fence has heading spaces, they should be removed from its inner block\n len = state.sCount[startLine]\n\n state.line = nextLine + (haveEndMarker ? 1 : 0)\n\n const token = state.push('fence', 'code', 0)\n token.info = params\n token.content = state.getLines(startLine + 1, nextLine, len, true)\n token.markup = markup\n token.map = [startLine, state.line]\n\n return true\n}\n","// Block quotes\n\nimport { isSpace } from '../common/utils.mjs'\n\nexport default function blockquote (state, startLine, endLine, silent) {\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n let max = state.eMarks[startLine]\n\n const oldLineMax = state.lineMax\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n // check the block quote marker\n if (state.src.charCodeAt(pos) !== 0x3E/* > */) { return false }\n\n // we know that it's going to be a valid blockquote,\n // so no point trying to find the end of it in silent mode\n if (silent) { return true }\n\n const oldBMarks = []\n const oldBSCount = []\n const oldSCount = []\n const oldTShift = []\n\n const terminatorRules = state.md.block.ruler.getRules('blockquote')\n\n const oldParentType = state.parentType\n state.parentType = 'blockquote'\n let lastLineEmpty = false\n let nextLine\n\n // Search the end of the block\n //\n // Block ends with either:\n // 1. an empty line outside:\n // ```\n // > test\n //\n // ```\n // 2. an empty line inside:\n // ```\n // >\n // test\n // ```\n // 3. another tag:\n // ```\n // > test\n // - - -\n // ```\n for (nextLine = startLine; nextLine < endLine; nextLine++) {\n // check if it's outdented, i.e. it's inside list item and indented\n // less than said list item:\n //\n // ```\n // 1. anything\n // > current blockquote\n // 2. checking this line\n // ```\n const isOutdented = state.sCount[nextLine] < state.blkIndent\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine]\n max = state.eMarks[nextLine]\n\n if (pos >= max) {\n // Case 1: line is not inside the blockquote, and this line is empty.\n break\n }\n\n if (state.src.charCodeAt(pos++) === 0x3E/* > */ && !isOutdented) {\n // This line is inside the blockquote.\n\n // set offset past spaces and \">\"\n let initial = state.sCount[nextLine] + 1\n let spaceAfterMarker\n let adjustTab\n\n // skip one optional space after '>'\n if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n // ' > test '\n // ^ -- position start of line here:\n pos++\n initial++\n adjustTab = false\n spaceAfterMarker = true\n } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n spaceAfterMarker = true\n\n if ((state.bsCount[nextLine] + initial) % 4 === 3) {\n // ' >\\t test '\n // ^ -- position start of line here (tab has width===1)\n pos++\n initial++\n adjustTab = false\n } else {\n // ' >\\t test '\n // ^ -- position start of line here + shift bsCount slightly\n // to make extra space appear\n adjustTab = true\n }\n } else {\n spaceAfterMarker = false\n }\n\n let offset = initial\n oldBMarks.push(state.bMarks[nextLine])\n state.bMarks[nextLine] = pos\n\n while (pos < max) {\n const ch = state.src.charCodeAt(pos)\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4\n } else {\n offset++\n }\n } else {\n break\n }\n\n pos++\n }\n\n lastLineEmpty = pos >= max\n\n oldBSCount.push(state.bsCount[nextLine])\n state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0)\n\n oldSCount.push(state.sCount[nextLine])\n state.sCount[nextLine] = offset - initial\n\n oldTShift.push(state.tShift[nextLine])\n state.tShift[nextLine] = pos - state.bMarks[nextLine]\n continue\n }\n\n // Case 2: line is not inside the blockquote, and the last line was empty.\n if (lastLineEmpty) { break }\n\n // Case 3: another tag found.\n let terminate = false\n for (let i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true\n break\n }\n }\n\n if (terminate) {\n // Quirk to enforce \"hard termination mode\" for paragraphs;\n // normally if you call `tokenize(state, startLine, nextLine)`,\n // paragraphs will look below nextLine for paragraph continuation,\n // but if blockquote is terminated by another tag, they shouldn't\n state.lineMax = nextLine\n\n if (state.blkIndent !== 0) {\n // state.blkIndent was non-zero, we now set it to zero,\n // so we need to re-calculate all offsets to appear as\n // if indent wasn't changed\n oldBMarks.push(state.bMarks[nextLine])\n oldBSCount.push(state.bsCount[nextLine])\n oldTShift.push(state.tShift[nextLine])\n oldSCount.push(state.sCount[nextLine])\n state.sCount[nextLine] -= state.blkIndent\n }\n\n break\n }\n\n oldBMarks.push(state.bMarks[nextLine])\n oldBSCount.push(state.bsCount[nextLine])\n oldTShift.push(state.tShift[nextLine])\n oldSCount.push(state.sCount[nextLine])\n\n // A negative indentation means that this is a paragraph continuation\n //\n state.sCount[nextLine] = -1\n }\n\n const oldIndent = state.blkIndent\n state.blkIndent = 0\n\n const token_o = state.push('blockquote_open', 'blockquote', 1)\n token_o.markup = '>'\n const lines = [startLine, 0]\n token_o.map = lines\n\n state.md.block.tokenize(state, startLine, nextLine)\n\n const token_c = state.push('blockquote_close', 'blockquote', -1)\n token_c.markup = '>'\n\n state.lineMax = oldLineMax\n state.parentType = oldParentType\n lines[1] = state.line\n\n // Restore original tShift; this might not be necessary since the parser\n // has already been here, but just to make sure we can do that.\n for (let i = 0; i < oldTShift.length; i++) {\n state.bMarks[i + startLine] = oldBMarks[i]\n state.tShift[i + startLine] = oldTShift[i]\n state.sCount[i + startLine] = oldSCount[i]\n state.bsCount[i + startLine] = oldBSCount[i]\n }\n state.blkIndent = oldIndent\n\n return true\n}\n","// Horizontal rule\n\nimport { isSpace } from '../common/utils.mjs'\n\nexport default function hr (state, startLine, endLine, silent) {\n const max = state.eMarks[startLine]\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n const marker = state.src.charCodeAt(pos++)\n\n // Check hr marker\n if (marker !== 0x2A/* * */ &&\n marker !== 0x2D/* - */ &&\n marker !== 0x5F/* _ */) {\n return false\n }\n\n // markers can be mixed with spaces, but there should be at least 3 of them\n\n let cnt = 1\n while (pos < max) {\n const ch = state.src.charCodeAt(pos++)\n if (ch !== marker && !isSpace(ch)) { return false }\n if (ch === marker) { cnt++ }\n }\n\n if (cnt < 3) { return false }\n\n if (silent) { return true }\n\n state.line = startLine + 1\n\n const token = state.push('hr', 'hr', 0)\n token.map = [startLine, state.line]\n token.markup = Array(cnt + 1).join(String.fromCharCode(marker))\n\n return true\n}\n","// Lists\n\nimport { isSpace } from '../common/utils.mjs'\n\n// Search `[-+*][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipBulletListMarker (state, startLine) {\n const max = state.eMarks[startLine]\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n\n const marker = state.src.charCodeAt(pos++)\n // Check bullet\n if (marker !== 0x2A/* * */ &&\n marker !== 0x2D/* - */ &&\n marker !== 0x2B/* + */) {\n return -1\n }\n\n if (pos < max) {\n const ch = state.src.charCodeAt(pos)\n\n if (!isSpace(ch)) {\n // \" -test \" - is not a list item\n return -1\n }\n }\n\n return pos\n}\n\n// Search `\\d+[.)][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipOrderedListMarker (state, startLine) {\n const start = state.bMarks[startLine] + state.tShift[startLine]\n const max = state.eMarks[startLine]\n let pos = start\n\n // List marker should have at least 2 chars (digit + dot)\n if (pos + 1 >= max) { return -1 }\n\n let ch = state.src.charCodeAt(pos++)\n\n if (ch < 0x30/* 0 */ || ch > 0x39/* 9 */) { return -1 }\n\n for (;;) {\n // EOL -> fail\n if (pos >= max) { return -1 }\n\n ch = state.src.charCodeAt(pos++)\n\n if (ch >= 0x30/* 0 */ && ch <= 0x39/* 9 */) {\n // List marker should have no more than 9 digits\n // (prevents integer overflow in browsers)\n if (pos - start >= 10) { return -1 }\n\n continue\n }\n\n // found valid marker\n if (ch === 0x29/* ) */ || ch === 0x2e/* . */) {\n break\n }\n\n return -1\n }\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos)\n\n if (!isSpace(ch)) {\n // \" 1.test \" - is not a list item\n return -1\n }\n }\n return pos\n}\n\nfunction markTightParagraphs (state, idx) {\n const level = state.level + 2\n\n for (let i = idx + 2, l = state.tokens.length - 2; i < l; i++) {\n if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') {\n state.tokens[i + 2].hidden = true\n state.tokens[i].hidden = true\n i += 2\n }\n }\n}\n\nexport default function list (state, startLine, endLine, silent) {\n let max, pos, start, token\n let nextLine = startLine\n let tight = true\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[nextLine] - state.blkIndent >= 4) { return false }\n\n // Special case:\n // - item 1\n // - item 2\n // - item 3\n // - item 4\n // - this one is a paragraph continuation\n if (state.listIndent >= 0 &&\n state.sCount[nextLine] - state.listIndent >= 4 &&\n state.sCount[nextLine] < state.blkIndent) {\n return false\n }\n\n let isTerminatingParagraph = false\n\n // limit conditions when list can interrupt\n // a paragraph (validation mode only)\n if (silent && state.parentType === 'paragraph') {\n // Next list item should still terminate previous list item;\n //\n // This code can fail if plugins use blkIndent as well as lists,\n // but I hope the spec gets fixed long before that happens.\n //\n if (state.sCount[nextLine] >= state.blkIndent) {\n isTerminatingParagraph = true\n }\n }\n\n // Detect list type and position after marker\n let isOrdered\n let markerValue\n let posAfterMarker\n if ((posAfterMarker = skipOrderedListMarker(state, nextLine)) >= 0) {\n isOrdered = true\n start = state.bMarks[nextLine] + state.tShift[nextLine]\n markerValue = Number(state.src.slice(start, posAfterMarker - 1))\n\n // If we're starting a new ordered list right after\n // a paragraph, it should start with 1.\n if (isTerminatingParagraph && markerValue !== 1) return false\n } else if ((posAfterMarker = skipBulletListMarker(state, nextLine)) >= 0) {\n isOrdered = false\n } else {\n return false\n }\n\n // If we're starting a new unordered list right after\n // a paragraph, first line should not be empty.\n if (isTerminatingParagraph) {\n if (state.skipSpaces(posAfterMarker) >= state.eMarks[nextLine]) return false\n }\n\n // For validation mode we can terminate immediately\n if (silent) { return true }\n\n // We should terminate list on style change. Remember first one to compare.\n const markerCharCode = state.src.charCodeAt(posAfterMarker - 1)\n\n // Start list\n const listTokIdx = state.tokens.length\n\n if (isOrdered) {\n token = state.push('ordered_list_open', 'ol', 1)\n if (markerValue !== 1) {\n token.attrs = [['start', markerValue]]\n }\n } else {\n token = state.push('bullet_list_open', 'ul', 1)\n }\n\n const listLines = [nextLine, 0]\n token.map = listLines\n token.markup = String.fromCharCode(markerCharCode)\n\n //\n // Iterate list items\n //\n\n let prevEmptyEnd = false\n const terminatorRules = state.md.block.ruler.getRules('list')\n\n const oldParentType = state.parentType\n state.parentType = 'list'\n\n while (nextLine < endLine) {\n pos = posAfterMarker\n max = state.eMarks[nextLine]\n\n const initial = state.sCount[nextLine] + posAfterMarker - (state.bMarks[nextLine] + state.tShift[nextLine])\n let offset = initial\n\n while (pos < max) {\n const ch = state.src.charCodeAt(pos)\n\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine]) % 4\n } else if (ch === 0x20) {\n offset++\n } else {\n break\n }\n\n pos++\n }\n\n const contentStart = pos\n let indentAfterMarker\n\n if (contentStart >= max) {\n // trimming space in \"- \\n 3\" case, indent is 1 here\n indentAfterMarker = 1\n } else {\n indentAfterMarker = offset - initial\n }\n\n // If we have more than 4 spaces, the indent is 1\n // (the rest is just indented code block)\n if (indentAfterMarker > 4) { indentAfterMarker = 1 }\n\n // \" - test\"\n // ^^^^^ - calculating total length of this thing\n const indent = initial + indentAfterMarker\n\n // Run subparser & write tokens\n token = state.push('list_item_open', 'li', 1)\n token.markup = String.fromCharCode(markerCharCode)\n const itemLines = [nextLine, 0]\n token.map = itemLines\n if (isOrdered) {\n token.info = state.src.slice(start, posAfterMarker - 1)\n }\n\n // change current state, then restore it after parser subcall\n const oldTight = state.tight\n const oldTShift = state.tShift[nextLine]\n const oldSCount = state.sCount[nextLine]\n\n // - example list\n // ^ listIndent position will be here\n // ^ blkIndent position will be here\n //\n const oldListIndent = state.listIndent\n state.listIndent = state.blkIndent\n state.blkIndent = indent\n\n state.tight = true\n state.tShift[nextLine] = contentStart - state.bMarks[nextLine]\n state.sCount[nextLine] = offset\n\n if (contentStart >= max && state.isEmpty(nextLine + 1)) {\n // workaround for this case\n // (list item is empty, list terminates before \"foo\"):\n // ~~~~~~~~\n // -\n //\n // foo\n // ~~~~~~~~\n state.line = Math.min(state.line + 2, endLine)\n } else {\n state.md.block.tokenize(state, nextLine, endLine, true)\n }\n\n // If any of list item is tight, mark list as tight\n if (!state.tight || prevEmptyEnd) {\n tight = false\n }\n // Item become loose if finish with empty line,\n // but we should filter last element, because it means list finish\n prevEmptyEnd = (state.line - nextLine) > 1 && state.isEmpty(state.line - 1)\n\n state.blkIndent = state.listIndent\n state.listIndent = oldListIndent\n state.tShift[nextLine] = oldTShift\n state.sCount[nextLine] = oldSCount\n state.tight = oldTight\n\n token = state.push('list_item_close', 'li', -1)\n token.markup = String.fromCharCode(markerCharCode)\n\n nextLine = state.line\n itemLines[1] = nextLine\n\n if (nextLine >= endLine) { break }\n\n //\n // Try to check if list is terminated or continued.\n //\n if (state.sCount[nextLine] < state.blkIndent) { break }\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[nextLine] - state.blkIndent >= 4) { break }\n\n // fail if terminating block found\n let terminate = false\n for (let i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true\n break\n }\n }\n if (terminate) { break }\n\n // fail if list has another type\n if (isOrdered) {\n posAfterMarker = skipOrderedListMarker(state, nextLine)\n if (posAfterMarker < 0) { break }\n start = state.bMarks[nextLine] + state.tShift[nextLine]\n } else {\n posAfterMarker = skipBulletListMarker(state, nextLine)\n if (posAfterMarker < 0) { break }\n }\n\n if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) { break }\n }\n\n // Finalize list\n if (isOrdered) {\n token = state.push('ordered_list_close', 'ol', -1)\n } else {\n token = state.push('bullet_list_close', 'ul', -1)\n }\n token.markup = String.fromCharCode(markerCharCode)\n\n listLines[1] = nextLine\n state.line = nextLine\n\n state.parentType = oldParentType\n\n // mark paragraphs tight if needed\n if (tight) {\n markTightParagraphs(state, listTokIdx)\n }\n\n return true\n}\n","import { isSpace, normalizeReference } from '../common/utils.mjs'\n\nexport default function reference (state, startLine, _endLine, silent) {\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n let max = state.eMarks[startLine]\n let nextLine = startLine + 1\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n if (state.src.charCodeAt(pos) !== 0x5B/* [ */) { return false }\n\n function getNextLine (nextLine) {\n const endLine = state.lineMax\n\n if (nextLine >= endLine || state.isEmpty(nextLine)) {\n // empty line or end of input\n return null\n }\n\n let isContinuation = false\n\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (state.sCount[nextLine] - state.blkIndent > 3) { isContinuation = true }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { isContinuation = true }\n\n if (!isContinuation) {\n const terminatorRules = state.md.block.ruler.getRules('reference')\n const oldParentType = state.parentType\n state.parentType = 'reference'\n\n // Some tags can terminate paragraph without empty line.\n let terminate = false\n for (let i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true\n break\n }\n }\n\n state.parentType = oldParentType\n if (terminate) {\n // terminated by another block\n return null\n }\n }\n\n const pos = state.bMarks[nextLine] + state.tShift[nextLine]\n const max = state.eMarks[nextLine]\n\n // max + 1 explicitly includes the newline\n return state.src.slice(pos, max + 1)\n }\n\n let str = state.src.slice(pos, max + 1)\n\n max = str.length\n let labelEnd = -1\n\n for (pos = 1; pos < max; pos++) {\n const ch = str.charCodeAt(pos)\n if (ch === 0x5B /* [ */) {\n return false\n } else if (ch === 0x5D /* ] */) {\n labelEnd = pos\n break\n } else if (ch === 0x0A /* \\n */) {\n const lineContent = getNextLine(nextLine)\n if (lineContent !== null) {\n str += lineContent\n max = str.length\n nextLine++\n }\n } else if (ch === 0x5C /* \\ */) {\n pos++\n if (pos < max && str.charCodeAt(pos) === 0x0A) {\n const lineContent = getNextLine(nextLine)\n if (lineContent !== null) {\n str += lineContent\n max = str.length\n nextLine++\n }\n }\n }\n }\n\n if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A/* : */) { return false }\n\n // [label]: destination 'title'\n // ^^^ skip optional whitespace here\n for (pos = labelEnd + 2; pos < max; pos++) {\n const ch = str.charCodeAt(pos)\n if (ch === 0x0A) {\n const lineContent = getNextLine(nextLine)\n if (lineContent !== null) {\n str += lineContent\n max = str.length\n nextLine++\n }\n } else if (isSpace(ch)) {\n /* eslint no-empty:0 */\n } else {\n break\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^^^^^ parse this\n const destRes = state.md.helpers.parseLinkDestination(str, pos, max)\n if (!destRes.ok) { return false }\n\n const href = state.md.normalizeLink(destRes.str)\n if (!state.md.validateLink(href)) { return false }\n\n pos = destRes.pos\n\n // save cursor state, we could require to rollback later\n const destEndPos = pos\n const destEndLineNo = nextLine\n\n // [label]: destination 'title'\n // ^^^ skipping those spaces\n const start = pos\n for (; pos < max; pos++) {\n const ch = str.charCodeAt(pos)\n if (ch === 0x0A) {\n const lineContent = getNextLine(nextLine)\n if (lineContent !== null) {\n str += lineContent\n max = str.length\n nextLine++\n }\n } else if (isSpace(ch)) {\n /* eslint no-empty:0 */\n } else {\n break\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^ parse this\n let titleRes = state.md.helpers.parseLinkTitle(str, pos, max)\n while (titleRes.can_continue) {\n const lineContent = getNextLine(nextLine)\n if (lineContent === null) break\n str += lineContent\n pos = max\n max = str.length\n nextLine++\n titleRes = state.md.helpers.parseLinkTitle(str, pos, max, titleRes)\n }\n let title\n\n if (pos < max && start !== pos && titleRes.ok) {\n title = titleRes.str\n pos = titleRes.pos\n } else {\n title = ''\n pos = destEndPos\n nextLine = destEndLineNo\n }\n\n // skip trailing spaces until the rest of the line\n while (pos < max) {\n const ch = str.charCodeAt(pos)\n if (!isSpace(ch)) { break }\n pos++\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n if (title) {\n // garbage at the end of the line after title,\n // but it could still be a valid reference if we roll back\n title = ''\n pos = destEndPos\n nextLine = destEndLineNo\n while (pos < max) {\n const ch = str.charCodeAt(pos)\n if (!isSpace(ch)) { break }\n pos++\n }\n }\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n // garbage at the end of the line\n return false\n }\n\n const label = normalizeReference(str.slice(1, labelEnd))\n if (!label) {\n // CommonMark 0.20 disallows empty labels\n return false\n }\n\n // Reference can not terminate anything. This check is for safety only.\n /* istanbul ignore if */\n if (silent) { return true }\n\n if (typeof state.env.references === 'undefined') {\n state.env.references = {}\n }\n if (typeof state.env.references[label] === 'undefined') {\n state.env.references[label] = { title, href }\n }\n\n state.line = nextLine\n return true\n}\n","// List of valid html blocks names, according to commonmark spec\n// https://spec.commonmark.org/0.30/#html-blocks\n\nexport default [\n 'address',\n 'article',\n 'aside',\n 'base',\n 'basefont',\n 'blockquote',\n 'body',\n 'caption',\n 'center',\n 'col',\n 'colgroup',\n 'dd',\n 'details',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'frame',\n 'frameset',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hr',\n 'html',\n 'iframe',\n 'legend',\n 'li',\n 'link',\n 'main',\n 'menu',\n 'menuitem',\n 'nav',\n 'noframes',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'param',\n 'search',\n 'section',\n 'summary',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'title',\n 'tr',\n 'track',\n 'ul'\n]\n","// Regexps to match html elements\n\nconst attr_name = '[a-zA-Z_:][a-zA-Z0-9:._-]*'\n\nconst unquoted = '[^\"\\'=<>`\\\\x00-\\\\x20]+'\nconst single_quoted = \"'[^']*'\"\nconst double_quoted = '\"[^\"]*\"'\n\nconst attr_value = '(?:' + unquoted + '|' + single_quoted + '|' + double_quoted + ')'\n\nconst attribute = '(?:\\\\s+' + attr_name + '(?:\\\\s*=\\\\s*' + attr_value + ')?)'\n\nconst open_tag = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>'\n\nconst close_tag = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>'\nconst comment = ''\nconst processing = '<[?][\\\\s\\\\S]*?[?]>'\nconst declaration = ']*>'\nconst cdata = ''\n\nconst HTML_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + '|' + comment +\n '|' + processing + '|' + declaration + '|' + cdata + ')')\nconst HTML_OPEN_CLOSE_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + ')')\n\nexport { HTML_TAG_RE, HTML_OPEN_CLOSE_TAG_RE }\n","// HTML block\n\nimport block_names from '../common/html_blocks.mjs'\nimport { HTML_OPEN_CLOSE_TAG_RE } from '../common/html_re.mjs'\n\n// An array of opening and corresponding closing sequences for html tags,\n// last argument defines whether it can terminate a paragraph or not\n//\nconst HTML_SEQUENCES = [\n [/^<(script|pre|style|textarea)(?=(\\s|>|$))/i, /<\\/(script|pre|style|textarea)>/i, true],\n [/^/, true],\n [/^<\\?/, /\\?>/, true],\n [/^/, true],\n [/^/, true],\n [new RegExp('^|$))', 'i'), /^$/, true],\n [new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + '\\\\s*$'), /^$/, false]\n]\n\nexport default function html_block (state, startLine, endLine, silent) {\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n let max = state.eMarks[startLine]\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n if (!state.md.options.html) { return false }\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false }\n\n let lineText = state.src.slice(pos, max)\n\n let i = 0\n for (; i < HTML_SEQUENCES.length; i++) {\n if (HTML_SEQUENCES[i][0].test(lineText)) { break }\n }\n if (i === HTML_SEQUENCES.length) { return false }\n\n if (silent) {\n // true if this sequence can be a terminator, false otherwise\n return HTML_SEQUENCES[i][2]\n }\n\n let nextLine = startLine + 1\n\n // If we are here - we detected HTML block.\n // Let's roll down till block end.\n if (!HTML_SEQUENCES[i][1].test(lineText)) {\n for (; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break }\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine]\n max = state.eMarks[nextLine]\n lineText = state.src.slice(pos, max)\n\n if (HTML_SEQUENCES[i][1].test(lineText)) {\n if (lineText.length !== 0) { nextLine++ }\n break\n }\n }\n }\n\n state.line = nextLine\n\n const token = state.push('html_block', '', 0)\n token.map = [startLine, nextLine]\n token.content = state.getLines(startLine, nextLine, state.blkIndent, true)\n\n return true\n}\n","// heading (#, ##, ...)\n\nimport { isSpace } from '../common/utils.mjs'\n\nexport default function heading (state, startLine, endLine, silent) {\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n let max = state.eMarks[startLine]\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n let ch = state.src.charCodeAt(pos)\n\n if (ch !== 0x23/* # */ || pos >= max) { return false }\n\n // count heading level\n let level = 1\n ch = state.src.charCodeAt(++pos)\n while (ch === 0x23/* # */ && pos < max && level <= 6) {\n level++\n ch = state.src.charCodeAt(++pos)\n }\n\n if (level > 6 || (pos < max && !isSpace(ch))) { return false }\n\n if (silent) { return true }\n\n // Let's cut tails like ' ### ' from the end of string\n\n max = state.skipSpacesBack(max, pos)\n const tmp = state.skipCharsBack(max, 0x23, pos) // #\n if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) {\n max = tmp\n }\n\n state.line = startLine + 1\n\n const token_o = state.push('heading_open', 'h' + String(level), 1)\n token_o.markup = '########'.slice(0, level)\n token_o.map = [startLine, state.line]\n\n const token_i = state.push('inline', '', 0)\n token_i.content = state.src.slice(pos, max).trim()\n token_i.map = [startLine, state.line]\n token_i.children = []\n\n const token_c = state.push('heading_close', 'h' + String(level), -1)\n token_c.markup = '########'.slice(0, level)\n\n return true\n}\n","// lheading (---, ===)\n\nexport default function lheading (state, startLine, endLine/*, silent */) {\n const terminatorRules = state.md.block.ruler.getRules('paragraph')\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n const oldParentType = state.parentType\n state.parentType = 'paragraph' // use paragraph to match terminatorRules\n\n // jump line-by-line until empty one or EOF\n let level = 0\n let marker\n let nextLine = startLine + 1\n\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (state.sCount[nextLine] - state.blkIndent > 3) { continue }\n\n //\n // Check for underline in setext header\n //\n if (state.sCount[nextLine] >= state.blkIndent) {\n let pos = state.bMarks[nextLine] + state.tShift[nextLine]\n const max = state.eMarks[nextLine]\n\n if (pos < max) {\n marker = state.src.charCodeAt(pos)\n\n if (marker === 0x2D/* - */ || marker === 0x3D/* = */) {\n pos = state.skipChars(pos, marker)\n pos = state.skipSpaces(pos)\n\n if (pos >= max) {\n level = (marker === 0x3D/* = */ ? 1 : 2)\n break\n }\n }\n }\n }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue }\n\n // Some tags can terminate paragraph without empty line.\n let terminate = false\n for (let i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true\n break\n }\n }\n if (terminate) { break }\n }\n\n if (!level) {\n // Didn't find valid underline\n return false\n }\n\n const content = state.getLines(startLine, nextLine, state.blkIndent, false).trim()\n\n state.line = nextLine + 1\n\n const token_o = state.push('heading_open', 'h' + String(level), 1)\n token_o.markup = String.fromCharCode(marker)\n token_o.map = [startLine, state.line]\n\n const token_i = state.push('inline', '', 0)\n token_i.content = content\n token_i.map = [startLine, state.line - 1]\n token_i.children = []\n\n const token_c = state.push('heading_close', 'h' + String(level), -1)\n token_c.markup = String.fromCharCode(marker)\n\n state.parentType = oldParentType\n\n return true\n}\n","// Paragraph\n\nexport default function paragraph (state, startLine, endLine) {\n const terminatorRules = state.md.block.ruler.getRules('paragraph')\n const oldParentType = state.parentType\n let nextLine = startLine + 1\n state.parentType = 'paragraph'\n\n // jump line-by-line until empty one or EOF\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (state.sCount[nextLine] - state.blkIndent > 3) { continue }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue }\n\n // Some tags can terminate paragraph without empty line.\n let terminate = false\n for (let i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true\n break\n }\n }\n if (terminate) { break }\n }\n\n const content = state.getLines(startLine, nextLine, state.blkIndent, false).trim()\n\n state.line = nextLine\n\n const token_o = state.push('paragraph_open', 'p', 1)\n token_o.map = [startLine, state.line]\n\n const token_i = state.push('inline', '', 0)\n token_i.content = content\n token_i.map = [startLine, state.line]\n token_i.children = []\n\n state.push('paragraph_close', 'p', -1)\n\n state.parentType = oldParentType\n\n return true\n}\n","/** internal\n * class ParserBlock\n *\n * Block-level tokenizer.\n **/\n\nimport Ruler from './ruler.mjs'\nimport StateBlock from './rules_block/state_block.mjs'\n\nimport r_table from './rules_block/table.mjs'\nimport r_code from './rules_block/code.mjs'\nimport r_fence from './rules_block/fence.mjs'\nimport r_blockquote from './rules_block/blockquote.mjs'\nimport r_hr from './rules_block/hr.mjs'\nimport r_list from './rules_block/list.mjs'\nimport r_reference from './rules_block/reference.mjs'\nimport r_html_block from './rules_block/html_block.mjs'\nimport r_heading from './rules_block/heading.mjs'\nimport r_lheading from './rules_block/lheading.mjs'\nimport r_paragraph from './rules_block/paragraph.mjs'\n\nconst _rules = [\n // First 2 params - rule name & source. Secondary array - list of rules,\n // which can be terminated by this one.\n ['table', r_table, ['paragraph', 'reference']],\n ['code', r_code],\n ['fence', r_fence, ['paragraph', 'reference', 'blockquote', 'list']],\n ['blockquote', r_blockquote, ['paragraph', 'reference', 'blockquote', 'list']],\n ['hr', r_hr, ['paragraph', 'reference', 'blockquote', 'list']],\n ['list', r_list, ['paragraph', 'reference', 'blockquote']],\n ['reference', r_reference],\n ['html_block', r_html_block, ['paragraph', 'reference', 'blockquote']],\n ['heading', r_heading, ['paragraph', 'reference', 'blockquote']],\n ['lheading', r_lheading],\n ['paragraph', r_paragraph]\n]\n\n/**\n * new ParserBlock()\n **/\nfunction ParserBlock () {\n /**\n * ParserBlock#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of block rules.\n **/\n this.ruler = new Ruler()\n\n for (let i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1], { alt: (_rules[i][2] || []).slice() })\n }\n}\n\n// Generate tokens for input range\n//\nParserBlock.prototype.tokenize = function (state, startLine, endLine) {\n const rules = this.ruler.getRules('')\n const len = rules.length\n const maxNesting = state.md.options.maxNesting\n let line = startLine\n let hasEmptyLines = false\n\n while (line < endLine) {\n state.line = line = state.skipEmptyLines(line)\n if (line >= endLine) { break }\n\n // Termination condition for nested calls.\n // Nested calls currently used for blockquotes & lists\n if (state.sCount[line] < state.blkIndent) { break }\n\n // If nesting level exceeded - skip tail to the end. That's not ordinary\n // situation and we should not care about content.\n if (state.level >= maxNesting) {\n state.line = endLine\n break\n }\n\n // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.line`\n // - update `state.tokens`\n // - return true\n const prevLine = state.line\n let ok = false\n\n for (let i = 0; i < len; i++) {\n ok = rules[i](state, line, endLine, false)\n if (ok) {\n if (prevLine >= state.line) {\n throw new Error(\"block rule didn't increment state.line\")\n }\n break\n }\n }\n\n // this can only happen if user disables paragraph rule\n if (!ok) throw new Error('none of the block rules matched')\n\n // set state.tight if we had an empty line before current tag\n // i.e. latest empty line should not count\n state.tight = !hasEmptyLines\n\n // paragraph might \"eat\" one newline after it in nested lists\n if (state.isEmpty(state.line - 1)) {\n hasEmptyLines = true\n }\n\n line = state.line\n\n if (line < endLine && state.isEmpty(line)) {\n hasEmptyLines = true\n line++\n state.line = line\n }\n }\n}\n\n/**\n * ParserBlock.parse(str, md, env, outTokens)\n *\n * Process input string and push block tokens into `outTokens`\n **/\nParserBlock.prototype.parse = function (src, md, env, outTokens) {\n if (!src) { return }\n\n const state = new this.State(src, md, env, outTokens)\n\n this.tokenize(state, state.line, state.lineMax)\n}\n\nParserBlock.prototype.State = StateBlock\n\nexport default ParserBlock\n","// Inline parser state\n\nimport Token from '../token.mjs'\nimport { isWhiteSpace, isPunctChar, isMdAsciiPunct } from '../common/utils.mjs'\n\nfunction StateInline (src, md, env, outTokens) {\n this.src = src\n this.env = env\n this.md = md\n this.tokens = outTokens\n this.tokens_meta = Array(outTokens.length)\n\n this.pos = 0\n this.posMax = this.src.length\n this.level = 0\n this.pending = ''\n this.pendingLevel = 0\n\n // Stores { start: end } pairs. Useful for backtrack\n // optimization of pairs parse (emphasis, strikes).\n this.cache = {}\n\n // List of emphasis-like delimiters for current tag\n this.delimiters = []\n\n // Stack of delimiter lists for upper level tags\n this._prev_delimiters = []\n\n // backtick length => last seen position\n this.backticks = {}\n this.backticksScanned = false\n\n // Counter used to disable inline linkify-it execution\n // inside and markdown links\n this.linkLevel = 0\n}\n\n// Flush pending text\n//\nStateInline.prototype.pushPending = function () {\n const token = new Token('text', '', 0)\n token.content = this.pending\n token.level = this.pendingLevel\n this.tokens.push(token)\n this.pending = ''\n return token\n}\n\n// Push new token to \"stream\".\n// If pending text exists - flush it as text token\n//\nStateInline.prototype.push = function (type, tag, nesting) {\n if (this.pending) {\n this.pushPending()\n }\n\n const token = new Token(type, tag, nesting)\n let token_meta = null\n\n if (nesting < 0) {\n // closing tag\n this.level--\n this.delimiters = this._prev_delimiters.pop()\n }\n\n token.level = this.level\n\n if (nesting > 0) {\n // opening tag\n this.level++\n this._prev_delimiters.push(this.delimiters)\n this.delimiters = []\n token_meta = { delimiters: this.delimiters }\n }\n\n this.pendingLevel = this.level\n this.tokens.push(token)\n this.tokens_meta.push(token_meta)\n return token\n}\n\n// Scan a sequence of emphasis-like markers, and determine whether\n// it can start an emphasis sequence or end an emphasis sequence.\n//\n// - start - position to scan from (it should point at a valid marker);\n// - canSplitWord - determine if these markers can be found inside a word\n//\nStateInline.prototype.scanDelims = function (start, canSplitWord) {\n const max = this.posMax\n const marker = this.src.charCodeAt(start)\n\n // treat beginning of the line as a whitespace\n const lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 0x20\n\n let pos = start\n while (pos < max && this.src.charCodeAt(pos) === marker) { pos++ }\n\n const count = pos - start\n\n // treat end of the line as a whitespace\n const nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20\n\n const isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar))\n const isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar))\n\n const isLastWhiteSpace = isWhiteSpace(lastChar)\n const isNextWhiteSpace = isWhiteSpace(nextChar)\n\n const left_flanking =\n !isNextWhiteSpace && (!isNextPunctChar || isLastWhiteSpace || isLastPunctChar)\n const right_flanking =\n !isLastWhiteSpace && (!isLastPunctChar || isNextWhiteSpace || isNextPunctChar)\n\n const can_open = left_flanking && (canSplitWord || !right_flanking || isLastPunctChar)\n const can_close = right_flanking && (canSplitWord || !left_flanking || isNextPunctChar)\n\n return { can_open, can_close, length: count }\n}\n\n// re-export Token class to use in block rules\nStateInline.prototype.Token = Token\n\nexport default StateInline\n","// Skip text characters for text token, place those to pending buffer\n// and increment current pos\n\n// Rule to skip pure text\n// '{}$%@~+=:' reserved for extentions\n\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n\n// !!!! Don't confuse with \"Markdown ASCII Punctuation\" chars\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\nfunction isTerminatorChar (ch) {\n switch (ch) {\n case 0x0A/* \\n */:\n case 0x21/* ! */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2D/* - */:\n case 0x3A/* : */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true\n default:\n return false\n }\n}\n\nexport default function text (state, silent) {\n let pos = state.pos\n\n while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) {\n pos++\n }\n\n if (pos === state.pos) { return false }\n\n if (!silent) { state.pending += state.src.slice(state.pos, pos) }\n\n state.pos = pos\n\n return true\n}\n\n// Alternative implementation, for memory.\n//\n// It costs 10% of performance, but allows extend terminators list, if place it\n// to `ParserInline` property. Probably, will switch to it sometime, such\n// flexibility required.\n\n/*\nvar TERMINATOR_RE = /[\\n!#$%&*+\\-:<=>@[\\\\\\]^_`{}~]/;\n\nmodule.exports = function text(state, silent) {\n var pos = state.pos,\n idx = state.src.slice(pos).search(TERMINATOR_RE);\n\n // first char is terminator -> empty text\n if (idx === 0) { return false; }\n\n // no terminator -> text till end of string\n if (idx < 0) {\n if (!silent) { state.pending += state.src.slice(pos); }\n state.pos = state.src.length;\n return true;\n }\n\n if (!silent) { state.pending += state.src.slice(pos, pos + idx); }\n\n state.pos += idx;\n\n return true;\n}; */\n","// Process links like https://example.org/\n\n// RFC3986: scheme = ALPHA *( ALPHA / DIGIT / \"+\" / \"-\" / \".\" )\nconst SCHEME_RE = /(?:^|[^a-z0-9.+-])([a-z][a-z0-9.+-]*)$/i\n\nexport default function linkify (state, silent) {\n if (!state.md.options.linkify) return false\n if (state.linkLevel > 0) return false\n\n const pos = state.pos\n const max = state.posMax\n\n if (pos + 3 > max) return false\n if (state.src.charCodeAt(pos) !== 0x3A/* : */) return false\n if (state.src.charCodeAt(pos + 1) !== 0x2F/* / */) return false\n if (state.src.charCodeAt(pos + 2) !== 0x2F/* / */) return false\n\n const match = state.pending.match(SCHEME_RE)\n if (!match) return false\n\n const proto = match[1]\n\n const link = state.md.linkify.matchAtStart(state.src.slice(pos - proto.length))\n if (!link) return false\n\n let url = link.url\n\n // invalid link, but still detected by linkify somehow;\n // need to check to prevent infinite loop below\n if (url.length <= proto.length) return false\n\n // disallow '*' at the end of the link (conflicts with emphasis)\n url = url.replace(/\\*+$/, '')\n\n const fullUrl = state.md.normalizeLink(url)\n if (!state.md.validateLink(fullUrl)) return false\n\n if (!silent) {\n state.pending = state.pending.slice(0, -proto.length)\n\n const token_o = state.push('link_open', 'a', 1)\n token_o.attrs = [['href', fullUrl]]\n token_o.markup = 'linkify'\n token_o.info = 'auto'\n\n const token_t = state.push('text', '', 0)\n token_t.content = state.md.normalizeLinkText(url)\n\n const token_c = state.push('link_close', 'a', -1)\n token_c.markup = 'linkify'\n token_c.info = 'auto'\n }\n\n state.pos += url.length - proto.length\n return true\n}\n","// Proceess '\\n'\n\nimport { isSpace } from '../common/utils.mjs'\n\nexport default function newline (state, silent) {\n let pos = state.pos\n\n if (state.src.charCodeAt(pos) !== 0x0A/* \\n */) { return false }\n\n const pmax = state.pending.length - 1\n const max = state.posMax\n\n // ' \\n' -> hardbreak\n // Lookup in pending chars is bad practice! Don't copy to other rules!\n // Pending string is stored in concat mode, indexed lookups will cause\n // convertion to flat mode.\n if (!silent) {\n if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) {\n if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) {\n // Find whitespaces tail of pending chars.\n let ws = pmax - 1\n while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 0x20) ws--\n\n state.pending = state.pending.slice(0, ws)\n state.push('hardbreak', 'br', 0)\n } else {\n state.pending = state.pending.slice(0, -1)\n state.push('softbreak', 'br', 0)\n }\n } else {\n state.push('softbreak', 'br', 0)\n }\n }\n\n pos++\n\n // skip heading spaces for next line\n while (pos < max && isSpace(state.src.charCodeAt(pos))) { pos++ }\n\n state.pos = pos\n return true\n}\n","// Process escaped chars and hardbreaks\n\nimport { isSpace } from '../common/utils.mjs'\n\nconst ESCAPED = []\n\nfor (let i = 0; i < 256; i++) { ESCAPED.push(0) }\n\n'\\\\!\"#$%&\\'()*+,./:;<=>?@[]^_`{|}~-'\n .split('').forEach(function (ch) { ESCAPED[ch.charCodeAt(0)] = 1 })\n\nexport default function escape (state, silent) {\n let pos = state.pos\n const max = state.posMax\n\n if (state.src.charCodeAt(pos) !== 0x5C/* \\ */) return false\n pos++\n\n // '\\' at the end of the inline block\n if (pos >= max) return false\n\n let ch1 = state.src.charCodeAt(pos)\n\n if (ch1 === 0x0A) {\n if (!silent) {\n state.push('hardbreak', 'br', 0)\n }\n\n pos++\n // skip leading whitespaces from next line\n while (pos < max) {\n ch1 = state.src.charCodeAt(pos)\n if (!isSpace(ch1)) break\n pos++\n }\n\n state.pos = pos\n return true\n }\n\n let escapedStr = state.src[pos]\n\n if (ch1 >= 0xD800 && ch1 <= 0xDBFF && pos + 1 < max) {\n const ch2 = state.src.charCodeAt(pos + 1)\n\n if (ch2 >= 0xDC00 && ch2 <= 0xDFFF) {\n escapedStr += state.src[pos + 1]\n pos++\n }\n }\n\n const origStr = '\\\\' + escapedStr\n\n if (!silent) {\n const token = state.push('text_special', '', 0)\n\n if (ch1 < 256 && ESCAPED[ch1] !== 0) {\n token.content = escapedStr\n } else {\n token.content = origStr\n }\n\n token.markup = origStr\n token.info = 'escape'\n }\n\n state.pos = pos + 1\n return true\n}\n","// Parse backticks\n\nexport default function backtick (state, silent) {\n let pos = state.pos\n const ch = state.src.charCodeAt(pos)\n\n if (ch !== 0x60/* ` */) { return false }\n\n const start = pos\n pos++\n const max = state.posMax\n\n // scan marker length\n while (pos < max && state.src.charCodeAt(pos) === 0x60/* ` */) { pos++ }\n\n const marker = state.src.slice(start, pos)\n const openerLength = marker.length\n\n if (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) {\n if (!silent) state.pending += marker\n state.pos += openerLength\n return true\n }\n\n let matchEnd = pos\n let matchStart\n\n // Nothing found in the cache, scan until the end of the line (or until marker is found)\n while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) {\n matchEnd = matchStart + 1\n\n // scan marker length\n while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60/* ` */) { matchEnd++ }\n\n const closerLength = matchEnd - matchStart\n\n if (closerLength === openerLength) {\n // Found matching closer length.\n if (!silent) {\n const token = state.push('code_inline', 'code', 0)\n token.markup = marker\n token.content = state.src.slice(pos, matchStart)\n .replace(/\\n/g, ' ')\n .replace(/^ (.+) $/, '$1')\n }\n state.pos = matchEnd\n return true\n }\n\n // Some different length found, put it in cache as upper limit of where closer can be found\n state.backticks[closerLength] = matchStart\n }\n\n // Scanned through the end, didn't find anything\n state.backticksScanned = true\n\n if (!silent) state.pending += marker\n state.pos += openerLength\n return true\n}\n","// ~~strike through~~\n//\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nfunction strikethrough_tokenize (state, silent) {\n const start = state.pos\n const marker = state.src.charCodeAt(start)\n\n if (silent) { return false }\n\n if (marker !== 0x7E/* ~ */) { return false }\n\n const scanned = state.scanDelims(state.pos, true)\n let len = scanned.length\n const ch = String.fromCharCode(marker)\n\n if (len < 2) { return false }\n\n let token\n\n if (len % 2) {\n token = state.push('text', '', 0)\n token.content = ch\n len--\n }\n\n for (let i = 0; i < len; i += 2) {\n token = state.push('text', '', 0)\n token.content = ch + ch\n\n state.delimiters.push({\n marker,\n length: 0, // disable \"rule of 3\" length checks meant for emphasis\n token: state.tokens.length - 1,\n end: -1,\n open: scanned.can_open,\n close: scanned.can_close\n })\n }\n\n state.pos += scanned.length\n\n return true\n}\n\nfunction postProcess (state, delimiters) {\n let token\n const loneMarkers = []\n const max = delimiters.length\n\n for (let i = 0; i < max; i++) {\n const startDelim = delimiters[i]\n\n if (startDelim.marker !== 0x7E/* ~ */) {\n continue\n }\n\n if (startDelim.end === -1) {\n continue\n }\n\n const endDelim = delimiters[startDelim.end]\n\n token = state.tokens[startDelim.token]\n token.type = 's_open'\n token.tag = 's'\n token.nesting = 1\n token.markup = '~~'\n token.content = ''\n\n token = state.tokens[endDelim.token]\n token.type = 's_close'\n token.tag = 's'\n token.nesting = -1\n token.markup = '~~'\n token.content = ''\n\n if (state.tokens[endDelim.token - 1].type === 'text' &&\n state.tokens[endDelim.token - 1].content === '~') {\n loneMarkers.push(endDelim.token - 1)\n }\n }\n\n // If a marker sequence has an odd number of characters, it's splitted\n // like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the\n // start of the sequence.\n //\n // So, we have to move all those markers after subsequent s_close tags.\n //\n while (loneMarkers.length) {\n const i = loneMarkers.pop()\n let j = i + 1\n\n while (j < state.tokens.length && state.tokens[j].type === 's_close') {\n j++\n }\n\n j--\n\n if (i !== j) {\n token = state.tokens[j]\n state.tokens[j] = state.tokens[i]\n state.tokens[i] = token\n }\n }\n}\n\n// Walk through delimiter list and replace text tokens with tags\n//\nfunction strikethrough_postProcess (state) {\n const tokens_meta = state.tokens_meta\n const max = state.tokens_meta.length\n\n postProcess(state, state.delimiters)\n\n for (let curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters)\n }\n }\n}\n\nexport default {\n tokenize: strikethrough_tokenize,\n postProcess: strikethrough_postProcess\n}\n","// Process *this* and _that_\n//\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nfunction emphasis_tokenize (state, silent) {\n const start = state.pos\n const marker = state.src.charCodeAt(start)\n\n if (silent) { return false }\n\n if (marker !== 0x5F /* _ */ && marker !== 0x2A /* * */) { return false }\n\n const scanned = state.scanDelims(state.pos, marker === 0x2A)\n\n for (let i = 0; i < scanned.length; i++) {\n const token = state.push('text', '', 0)\n token.content = String.fromCharCode(marker)\n\n state.delimiters.push({\n // Char code of the starting marker (number).\n //\n marker,\n\n // Total length of these series of delimiters.\n //\n length: scanned.length,\n\n // A position of the token this delimiter corresponds to.\n //\n token: state.tokens.length - 1,\n\n // If this delimiter is matched as a valid opener, `end` will be\n // equal to its position, otherwise it's `-1`.\n //\n end: -1,\n\n // Boolean flags that determine if this delimiter could open or close\n // an emphasis.\n //\n open: scanned.can_open,\n close: scanned.can_close\n })\n }\n\n state.pos += scanned.length\n\n return true\n}\n\nfunction postProcess (state, delimiters) {\n const max = delimiters.length\n\n for (let i = max - 1; i >= 0; i--) {\n const startDelim = delimiters[i]\n\n if (startDelim.marker !== 0x5F/* _ */ && startDelim.marker !== 0x2A/* * */) {\n continue\n }\n\n // Process only opening markers\n if (startDelim.end === -1) {\n continue\n }\n\n const endDelim = delimiters[startDelim.end]\n\n // If the previous delimiter has the same marker and is adjacent to this one,\n // merge those into one strong delimiter.\n //\n // `whatever` -> `whatever`\n //\n const isStrong = i > 0 &&\n delimiters[i - 1].end === startDelim.end + 1 &&\n // check that first two markers match and adjacent\n delimiters[i - 1].marker === startDelim.marker &&\n delimiters[i - 1].token === startDelim.token - 1 &&\n // check that last two markers are adjacent (we can safely assume they match)\n delimiters[startDelim.end + 1].token === endDelim.token + 1\n\n const ch = String.fromCharCode(startDelim.marker)\n\n const token_o = state.tokens[startDelim.token]\n token_o.type = isStrong ? 'strong_open' : 'em_open'\n token_o.tag = isStrong ? 'strong' : 'em'\n token_o.nesting = 1\n token_o.markup = isStrong ? ch + ch : ch\n token_o.content = ''\n\n const token_c = state.tokens[endDelim.token]\n token_c.type = isStrong ? 'strong_close' : 'em_close'\n token_c.tag = isStrong ? 'strong' : 'em'\n token_c.nesting = -1\n token_c.markup = isStrong ? ch + ch : ch\n token_c.content = ''\n\n if (isStrong) {\n state.tokens[delimiters[i - 1].token].content = ''\n state.tokens[delimiters[startDelim.end + 1].token].content = ''\n i--\n }\n }\n}\n\n// Walk through delimiter list and replace text tokens with tags\n//\nfunction emphasis_post_process (state) {\n const tokens_meta = state.tokens_meta\n const max = state.tokens_meta.length\n\n postProcess(state, state.delimiters)\n\n for (let curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters)\n }\n }\n}\n\nexport default {\n tokenize: emphasis_tokenize,\n postProcess: emphasis_post_process\n}\n","// Process [link]( \"stuff\")\n\nimport { normalizeReference, isSpace } from '../common/utils.mjs'\n\nexport default function link (state, silent) {\n let code, label, res, ref\n let href = ''\n let title = ''\n let start = state.pos\n let parseReference = true\n\n if (state.src.charCodeAt(state.pos) !== 0x5B/* [ */) { return false }\n\n const oldPos = state.pos\n const max = state.posMax\n const labelStart = state.pos + 1\n const labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true)\n\n // parser failed to find ']', so it's not a valid link\n if (labelEnd < 0) { return false }\n\n let pos = labelEnd + 1\n if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n //\n // Inline link\n //\n\n // might have found a valid shortcut link, disable reference parsing\n parseReference = false\n\n // [link]( \"title\" )\n // ^^ skipping these spaces\n pos++\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos)\n if (!isSpace(code) && code !== 0x0A) { break }\n }\n if (pos >= max) { return false }\n\n // [link]( \"title\" )\n // ^^^^^^ parsing link destination\n start = pos\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax)\n if (res.ok) {\n href = state.md.normalizeLink(res.str)\n if (state.md.validateLink(href)) {\n pos = res.pos\n } else {\n href = ''\n }\n\n // [link]( \"title\" )\n // ^^ skipping these spaces\n start = pos\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos)\n if (!isSpace(code) && code !== 0x0A) { break }\n }\n\n // [link]( \"title\" )\n // ^^^^^^^ parsing link title\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax)\n if (pos < max && start !== pos && res.ok) {\n title = res.str\n pos = res.pos\n\n // [link]( \"title\" )\n // ^^ skipping these spaces\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos)\n if (!isSpace(code) && code !== 0x0A) { break }\n }\n }\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n // parsing a valid shortcut link failed, fallback to reference\n parseReference = true\n }\n pos++\n }\n\n if (parseReference) {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') { return false }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n start = pos + 1\n pos = state.md.helpers.parseLinkLabel(state, pos)\n if (pos >= 0) {\n label = state.src.slice(start, pos++)\n } else {\n pos = labelEnd + 1\n }\n } else {\n pos = labelEnd + 1\n }\n\n // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n if (!label) { label = state.src.slice(labelStart, labelEnd) }\n\n ref = state.env.references[normalizeReference(label)]\n if (!ref) {\n state.pos = oldPos\n return false\n }\n href = ref.href\n title = ref.title\n }\n\n //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n if (!silent) {\n state.pos = labelStart\n state.posMax = labelEnd\n\n const token_o = state.push('link_open', 'a', 1)\n const attrs = [['href', href]]\n token_o.attrs = attrs\n if (title) {\n attrs.push(['title', title])\n }\n\n state.linkLevel++\n state.md.inline.tokenize(state)\n state.linkLevel--\n\n state.push('link_close', 'a', -1)\n }\n\n state.pos = pos\n state.posMax = max\n return true\n}\n","// Process ![image]( \"title\")\n\nimport { normalizeReference, isSpace } from '../common/utils.mjs'\n\nexport default function image (state, silent) {\n let code, content, label, pos, ref, res, title, start\n let href = ''\n const oldPos = state.pos\n const max = state.posMax\n\n if (state.src.charCodeAt(state.pos) !== 0x21/* ! */) { return false }\n if (state.src.charCodeAt(state.pos + 1) !== 0x5B/* [ */) { return false }\n\n const labelStart = state.pos + 2\n const labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false)\n\n // parser failed to find ']', so it's not a valid link\n if (labelEnd < 0) { return false }\n\n pos = labelEnd + 1\n if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n //\n // Inline link\n //\n\n // [link]( \"title\" )\n // ^^ skipping these spaces\n pos++\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos)\n if (!isSpace(code) && code !== 0x0A) { break }\n }\n if (pos >= max) { return false }\n\n // [link]( \"title\" )\n // ^^^^^^ parsing link destination\n start = pos\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax)\n if (res.ok) {\n href = state.md.normalizeLink(res.str)\n if (state.md.validateLink(href)) {\n pos = res.pos\n } else {\n href = ''\n }\n }\n\n // [link]( \"title\" )\n // ^^ skipping these spaces\n start = pos\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos)\n if (!isSpace(code) && code !== 0x0A) { break }\n }\n\n // [link]( \"title\" )\n // ^^^^^^^ parsing link title\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax)\n if (pos < max && start !== pos && res.ok) {\n title = res.str\n pos = res.pos\n\n // [link]( \"title\" )\n // ^^ skipping these spaces\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos)\n if (!isSpace(code) && code !== 0x0A) { break }\n }\n } else {\n title = ''\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n state.pos = oldPos\n return false\n }\n pos++\n } else {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') { return false }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n start = pos + 1\n pos = state.md.helpers.parseLinkLabel(state, pos)\n if (pos >= 0) {\n label = state.src.slice(start, pos++)\n } else {\n pos = labelEnd + 1\n }\n } else {\n pos = labelEnd + 1\n }\n\n // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n if (!label) { label = state.src.slice(labelStart, labelEnd) }\n\n ref = state.env.references[normalizeReference(label)]\n if (!ref) {\n state.pos = oldPos\n return false\n }\n href = ref.href\n title = ref.title\n }\n\n //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n if (!silent) {\n content = state.src.slice(labelStart, labelEnd)\n\n const tokens = []\n state.md.inline.parse(\n content,\n state.md,\n state.env,\n tokens\n )\n\n const token = state.push('image', 'img', 0)\n const attrs = [['src', href], ['alt', '']]\n token.attrs = attrs\n token.children = tokens\n token.content = content\n\n if (title) {\n attrs.push(['title', title])\n }\n }\n\n state.pos = pos\n state.posMax = max\n return true\n}\n","// Process autolinks ''\n\n/* eslint max-len:0 */\nconst EMAIL_RE = /^([a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/\n/* eslint-disable-next-line no-control-regex */\nconst AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.-]{1,31}):([^<>\\x00-\\x20]*)$/\n\nexport default function autolink (state, silent) {\n let pos = state.pos\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false }\n\n const start = state.pos\n const max = state.posMax\n\n for (;;) {\n if (++pos >= max) return false\n\n const ch = state.src.charCodeAt(pos)\n\n if (ch === 0x3C /* < */) return false\n if (ch === 0x3E /* > */) break\n }\n\n const url = state.src.slice(start + 1, pos)\n\n if (AUTOLINK_RE.test(url)) {\n const fullUrl = state.md.normalizeLink(url)\n if (!state.md.validateLink(fullUrl)) { return false }\n\n if (!silent) {\n const token_o = state.push('link_open', 'a', 1)\n token_o.attrs = [['href', fullUrl]]\n token_o.markup = 'autolink'\n token_o.info = 'auto'\n\n const token_t = state.push('text', '', 0)\n token_t.content = state.md.normalizeLinkText(url)\n\n const token_c = state.push('link_close', 'a', -1)\n token_c.markup = 'autolink'\n token_c.info = 'auto'\n }\n\n state.pos += url.length + 2\n return true\n }\n\n if (EMAIL_RE.test(url)) {\n const fullUrl = state.md.normalizeLink('mailto:' + url)\n if (!state.md.validateLink(fullUrl)) { return false }\n\n if (!silent) {\n const token_o = state.push('link_open', 'a', 1)\n token_o.attrs = [['href', fullUrl]]\n token_o.markup = 'autolink'\n token_o.info = 'auto'\n\n const token_t = state.push('text', '', 0)\n token_t.content = state.md.normalizeLinkText(url)\n\n const token_c = state.push('link_close', 'a', -1)\n token_c.markup = 'autolink'\n token_c.info = 'auto'\n }\n\n state.pos += url.length + 2\n return true\n }\n\n return false\n}\n","// Process html tags\n\nimport { HTML_TAG_RE } from '../common/html_re.mjs'\n\nfunction isLinkOpen (str) {\n return /^\\s]/i.test(str)\n}\nfunction isLinkClose (str) {\n return /^<\\/a\\s*>/i.test(str)\n}\n\nfunction isLetter (ch) {\n /* eslint no-bitwise:0 */\n const lc = ch | 0x20 // to lower case\n return (lc >= 0x61/* a */) && (lc <= 0x7a/* z */)\n}\n\nexport default function html_inline (state, silent) {\n if (!state.md.options.html) { return false }\n\n // Check start\n const max = state.posMax\n const pos = state.pos\n if (state.src.charCodeAt(pos) !== 0x3C/* < */ ||\n pos + 2 >= max) {\n return false\n }\n\n // Quick fail on second char\n const ch = state.src.charCodeAt(pos + 1)\n if (ch !== 0x21/* ! */ &&\n ch !== 0x3F/* ? */ &&\n ch !== 0x2F/* / */ &&\n !isLetter(ch)) {\n return false\n }\n\n const match = state.src.slice(pos).match(HTML_TAG_RE)\n if (!match) { return false }\n\n if (!silent) {\n const token = state.push('html_inline', '', 0)\n token.content = match[0]\n\n if (isLinkOpen(token.content)) state.linkLevel++\n if (isLinkClose(token.content)) state.linkLevel--\n }\n state.pos += match[0].length\n return true\n}\n","// Process html entity - {, ¯, ", ...\n\nimport { decodeHTML } from 'entities'\nimport { isValidEntityCode, fromCodePoint } from '../common/utils.mjs'\n\nconst DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i\nconst NAMED_RE = /^&([a-z][a-z0-9]{1,31});/i\n\nexport default function entity (state, silent) {\n const pos = state.pos\n const max = state.posMax\n\n if (state.src.charCodeAt(pos) !== 0x26/* & */) return false\n\n if (pos + 1 >= max) return false\n\n const ch = state.src.charCodeAt(pos + 1)\n\n if (ch === 0x23 /* # */) {\n const match = state.src.slice(pos).match(DIGITAL_RE)\n if (match) {\n if (!silent) {\n const code = match[1][0].toLowerCase() === 'x' ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10)\n\n const token = state.push('text_special', '', 0)\n token.content = isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD)\n token.markup = match[0]\n token.info = 'entity'\n }\n state.pos += match[0].length\n return true\n }\n } else {\n const match = state.src.slice(pos).match(NAMED_RE)\n if (match) {\n const decoded = decodeHTML(match[0])\n if (decoded !== match[0]) {\n if (!silent) {\n const token = state.push('text_special', '', 0)\n token.content = decoded\n token.markup = match[0]\n token.info = 'entity'\n }\n state.pos += match[0].length\n return true\n }\n }\n }\n\n return false\n}\n","// For each opening emphasis-like marker find a matching closing one\n//\n\nfunction processDelimiters (delimiters) {\n const openersBottom = {}\n const max = delimiters.length\n\n if (!max) return\n\n // headerIdx is the first delimiter of the current (where closer is) delimiter run\n let headerIdx = 0\n let lastTokenIdx = -2 // needs any value lower than -1\n const jumps = []\n\n for (let closerIdx = 0; closerIdx < max; closerIdx++) {\n const closer = delimiters[closerIdx]\n\n jumps.push(0)\n\n // markers belong to same delimiter run if:\n // - they have adjacent tokens\n // - AND markers are the same\n //\n if (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) {\n headerIdx = closerIdx\n }\n\n lastTokenIdx = closer.token\n\n // Length is only used for emphasis-specific \"rule of 3\",\n // if it's not defined (in strikethrough or 3rd party plugins),\n // we can default it to 0 to disable those checks.\n //\n closer.length = closer.length || 0\n\n if (!closer.close) continue\n\n // Previously calculated lower bounds (previous fails)\n // for each marker, each delimiter length modulo 3,\n // and for whether this closer can be an opener;\n // https://github.com/commonmark/cmark/commit/34250e12ccebdc6372b8b49c44fab57c72443460\n /* eslint-disable-next-line no-prototype-builtins */\n if (!openersBottom.hasOwnProperty(closer.marker)) {\n openersBottom[closer.marker] = [-1, -1, -1, -1, -1, -1]\n }\n\n const minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length % 3)]\n\n let openerIdx = headerIdx - jumps[headerIdx] - 1\n\n let newMinOpenerIdx = openerIdx\n\n for (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) {\n const opener = delimiters[openerIdx]\n\n if (opener.marker !== closer.marker) continue\n\n if (opener.open && opener.end < 0) {\n let isOddMatch = false\n\n // from spec:\n //\n // If one of the delimiters can both open and close emphasis, then the\n // sum of the lengths of the delimiter runs containing the opening and\n // closing delimiters must not be a multiple of 3 unless both lengths\n // are multiples of 3.\n //\n if (opener.close || closer.open) {\n if ((opener.length + closer.length) % 3 === 0) {\n if (opener.length % 3 !== 0 || closer.length % 3 !== 0) {\n isOddMatch = true\n }\n }\n }\n\n if (!isOddMatch) {\n // If previous delimiter cannot be an opener, we can safely skip\n // the entire sequence in future checks. This is required to make\n // sure algorithm has linear complexity (see *_*_*_*_*_... case).\n //\n const lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open\n ? jumps[openerIdx - 1] + 1\n : 0\n\n jumps[closerIdx] = closerIdx - openerIdx + lastJump\n jumps[openerIdx] = lastJump\n\n closer.open = false\n opener.end = closerIdx\n opener.close = false\n newMinOpenerIdx = -1\n // treat next token as start of run,\n // it optimizes skips in **<...>**a**<...>** pathological case\n lastTokenIdx = -2\n break\n }\n }\n }\n\n if (newMinOpenerIdx !== -1) {\n // If match for this delimiter run failed, we want to set lower bound for\n // future lookups. This is required to make sure algorithm has linear\n // complexity.\n //\n // See details here:\n // https://github.com/commonmark/cmark/issues/178#issuecomment-270417442\n //\n openersBottom[closer.marker][(closer.open ? 3 : 0) + ((closer.length || 0) % 3)] = newMinOpenerIdx\n }\n }\n}\n\nexport default function link_pairs (state) {\n const tokens_meta = state.tokens_meta\n const max = state.tokens_meta.length\n\n processDelimiters(state.delimiters)\n\n for (let curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n processDelimiters(tokens_meta[curr].delimiters)\n }\n }\n}\n","// Clean up tokens after emphasis and strikethrough postprocessing:\n// merge adjacent text nodes into one and re-calculate all token levels\n//\n// This is necessary because initially emphasis delimiter markers (*, _, ~)\n// are treated as their own separate text tokens. Then emphasis rule either\n// leaves them as text (needed to merge with adjacent text) or turns them\n// into opening/closing tags (which messes up levels inside).\n//\n\nexport default function fragments_join (state) {\n let curr, last\n let level = 0\n const tokens = state.tokens\n const max = state.tokens.length\n\n for (curr = last = 0; curr < max; curr++) {\n // re-calculate levels after emphasis/strikethrough turns some text nodes\n // into opening/closing tags\n if (tokens[curr].nesting < 0) level-- // closing tag\n tokens[curr].level = level\n if (tokens[curr].nesting > 0) level++ // opening tag\n\n if (tokens[curr].type === 'text' &&\n curr + 1 < max &&\n tokens[curr + 1].type === 'text') {\n // collapse two adjacent text nodes\n tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content\n } else {\n if (curr !== last) { tokens[last] = tokens[curr] }\n\n last++\n }\n }\n\n if (curr !== last) {\n tokens.length = last\n }\n}\n","/** internal\n * class ParserInline\n *\n * Tokenizes paragraph content.\n **/\n\nimport Ruler from './ruler.mjs'\nimport StateInline from './rules_inline/state_inline.mjs'\n\nimport r_text from './rules_inline/text.mjs'\nimport r_linkify from './rules_inline/linkify.mjs'\nimport r_newline from './rules_inline/newline.mjs'\nimport r_escape from './rules_inline/escape.mjs'\nimport r_backticks from './rules_inline/backticks.mjs'\nimport r_strikethrough from './rules_inline/strikethrough.mjs'\nimport r_emphasis from './rules_inline/emphasis.mjs'\nimport r_link from './rules_inline/link.mjs'\nimport r_image from './rules_inline/image.mjs'\nimport r_autolink from './rules_inline/autolink.mjs'\nimport r_html_inline from './rules_inline/html_inline.mjs'\nimport r_entity from './rules_inline/entity.mjs'\n\nimport r_balance_pairs from './rules_inline/balance_pairs.mjs'\nimport r_fragments_join from './rules_inline/fragments_join.mjs'\n\n// Parser rules\n\nconst _rules = [\n ['text', r_text],\n ['linkify', r_linkify],\n ['newline', r_newline],\n ['escape', r_escape],\n ['backticks', r_backticks],\n ['strikethrough', r_strikethrough.tokenize],\n ['emphasis', r_emphasis.tokenize],\n ['link', r_link],\n ['image', r_image],\n ['autolink', r_autolink],\n ['html_inline', r_html_inline],\n ['entity', r_entity]\n]\n\n// `rule2` ruleset was created specifically for emphasis/strikethrough\n// post-processing and may be changed in the future.\n//\n// Don't use this for anything except pairs (plugins working with `balance_pairs`).\n//\nconst _rules2 = [\n ['balance_pairs', r_balance_pairs],\n ['strikethrough', r_strikethrough.postProcess],\n ['emphasis', r_emphasis.postProcess],\n // rules for pairs separate '**' into its own text tokens, which may be left unused,\n // rule below merges unused segments back with the rest of the text\n ['fragments_join', r_fragments_join]\n]\n\n/**\n * new ParserInline()\n **/\nfunction ParserInline () {\n /**\n * ParserInline#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of inline rules.\n **/\n this.ruler = new Ruler()\n\n for (let i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1])\n }\n\n /**\n * ParserInline#ruler2 -> Ruler\n *\n * [[Ruler]] instance. Second ruler used for post-processing\n * (e.g. in emphasis-like rules).\n **/\n this.ruler2 = new Ruler()\n\n for (let i = 0; i < _rules2.length; i++) {\n this.ruler2.push(_rules2[i][0], _rules2[i][1])\n }\n}\n\n// Skip single token by running all rules in validation mode;\n// returns `true` if any rule reported success\n//\nParserInline.prototype.skipToken = function (state) {\n const pos = state.pos\n const rules = this.ruler.getRules('')\n const len = rules.length\n const maxNesting = state.md.options.maxNesting\n const cache = state.cache\n\n if (typeof cache[pos] !== 'undefined') {\n state.pos = cache[pos]\n return\n }\n\n let ok = false\n\n if (state.level < maxNesting) {\n for (let i = 0; i < len; i++) {\n // Increment state.level and decrement it later to limit recursion.\n // It's harmless to do here, because no tokens are created. But ideally,\n // we'd need a separate private state variable for this purpose.\n //\n state.level++\n ok = rules[i](state, true)\n state.level--\n\n if (ok) {\n if (pos >= state.pos) { throw new Error(\"inline rule didn't increment state.pos\") }\n break\n }\n }\n } else {\n // Too much nesting, just skip until the end of the paragraph.\n //\n // NOTE: this will cause links to behave incorrectly in the following case,\n // when an amount of `[` is exactly equal to `maxNesting + 1`:\n //\n // [[[[[[[[[[[[[[[[[[[[[foo]()\n //\n // TODO: remove this workaround when CM standard will allow nested links\n // (we can replace it by preventing links from being parsed in\n // validation mode)\n //\n state.pos = state.posMax\n }\n\n if (!ok) { state.pos++ }\n cache[pos] = state.pos\n}\n\n// Generate tokens for input range\n//\nParserInline.prototype.tokenize = function (state) {\n const rules = this.ruler.getRules('')\n const len = rules.length\n const end = state.posMax\n const maxNesting = state.md.options.maxNesting\n\n while (state.pos < end) {\n // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.pos`\n // - update `state.tokens`\n // - return true\n const prevPos = state.pos\n let ok = false\n\n if (state.level < maxNesting) {\n for (let i = 0; i < len; i++) {\n ok = rules[i](state, false)\n if (ok) {\n if (prevPos >= state.pos) { throw new Error(\"inline rule didn't increment state.pos\") }\n break\n }\n }\n }\n\n if (ok) {\n if (state.pos >= end) { break }\n continue\n }\n\n state.pending += state.src[state.pos++]\n }\n\n if (state.pending) {\n state.pushPending()\n }\n}\n\n/**\n * ParserInline.parse(str, md, env, outTokens)\n *\n * Process input string and push inline tokens into `outTokens`\n **/\nParserInline.prototype.parse = function (str, md, env, outTokens) {\n const state = new this.State(str, md, env, outTokens)\n\n this.tokenize(state)\n\n const rules = this.ruler2.getRules('')\n const len = rules.length\n\n for (let i = 0; i < len; i++) {\n rules[i](state)\n }\n}\n\nParserInline.prototype.State = StateInline\n\nexport default ParserInline\n","import { Any, Cc, Z, P } from 'uc.micro'\n\nexport default function (opts) {\n const re = {}\n opts = opts || {}\n\n re.src_Any = Any.source\n re.src_Cc = Cc.source\n re.src_Z = Z.source\n re.src_P = P.source\n\n // \\p{\\Z\\P\\Cc\\CF} (white spaces + control + format + punctuation)\n re.src_ZPCc = [re.src_Z, re.src_P, re.src_Cc].join('|')\n\n // \\p{\\Z\\Cc} (white spaces + control)\n re.src_ZCc = [re.src_Z, re.src_Cc].join('|')\n\n // Experimental. List of chars, completely prohibited in links\n // because can separate it from other part of text\n const text_separators = '[><\\uff5c]'\n\n // All possible word characters (everything without punctuation, spaces & controls)\n // Defined via punctuation & spaces to save space\n // Should be something like \\p{\\L\\N\\S\\M} (\\w but without `_`)\n re.src_pseudo_letter = '(?:(?!' + text_separators + '|' + re.src_ZPCc + ')' + re.src_Any + ')'\n // The same as abothe but without [0-9]\n // var src_pseudo_letter_non_d = '(?:(?![0-9]|' + src_ZPCc + ')' + src_Any + ')';\n\n re.src_ip4 =\n\n '(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'\n\n // Prohibit any of \"@/[]()\" in user/pass to avoid wrong domain fetch.\n re.src_auth = '(?:(?:(?!' + re.src_ZCc + '|[@/\\\\[\\\\]()]).)+@)?'\n\n re.src_port =\n\n '(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?'\n\n re.src_host_terminator =\n\n '(?=$|' + text_separators + '|' + re.src_ZPCc + ')' +\n '(?!' + (opts['---'] ? '-(?!--)|' : '-|') + '_|:\\\\d|\\\\.-|\\\\.(?!$|' + re.src_ZPCc + '))'\n\n re.src_path =\n\n '(?:' +\n '[/?#]' +\n '(?:' +\n '(?!' + re.src_ZCc + '|' + text_separators + '|[()[\\\\]{}.,\"\\'?!\\\\-;]).|' +\n '\\\\[(?:(?!' + re.src_ZCc + '|\\\\]).)*\\\\]|' +\n '\\\\((?:(?!' + re.src_ZCc + '|[)]).)*\\\\)|' +\n '\\\\{(?:(?!' + re.src_ZCc + '|[}]).)*\\\\}|' +\n '\\\\\"(?:(?!' + re.src_ZCc + '|[\"]).)+\\\\\"|' +\n \"\\\\'(?:(?!\" + re.src_ZCc + \"|[']).)+\\\\'|\" +\n\n // allow `I'm_king` if no pair found\n \"\\\\'(?=\" + re.src_pseudo_letter + '|[-])|' +\n\n // google has many dots in \"google search\" links (#66, #81).\n // github has ... in commit range links,\n // Restrict to\n // - english\n // - percent-encoded\n // - parts of file path\n // - params separator\n // until more examples found.\n '\\\\.{2,}[a-zA-Z0-9%/&]|' +\n\n '\\\\.(?!' + re.src_ZCc + '|[.]|$)|' +\n (opts['---']\n ? '\\\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate\n : '\\\\-+|'\n ) +\n // allow `,,,` in paths\n ',(?!' + re.src_ZCc + '|$)|' +\n\n // allow `;` if not followed by space-like char\n ';(?!' + re.src_ZCc + '|$)|' +\n\n // allow `!!!` in paths, but not at the end\n '\\\\!+(?!' + re.src_ZCc + '|[!]|$)|' +\n\n '\\\\?(?!' + re.src_ZCc + '|[?]|$)' +\n ')+' +\n '|\\\\/' +\n ')?'\n\n // Allow anything in markdown spec, forbid quote (\") at the first position\n // because emails enclosed in quotes are far more common\n re.src_email_name =\n\n '[\\\\-;:&=\\\\+\\\\$,\\\\.a-zA-Z0-9_][\\\\-;:&=\\\\+\\\\$,\\\\\"\\\\.a-zA-Z0-9_]*'\n\n re.src_xn =\n\n 'xn--[a-z0-9\\\\-]{1,59}'\n\n // More to read about domain names\n // http://serverfault.com/questions/638260/\n\n re.src_domain_root =\n\n // Allow letters & digits (http://test1)\n '(?:' +\n re.src_xn +\n '|' +\n re.src_pseudo_letter + '{1,63}' +\n ')'\n\n re.src_domain =\n\n '(?:' +\n re.src_xn +\n '|' +\n '(?:' + re.src_pseudo_letter + ')' +\n '|' +\n '(?:' + re.src_pseudo_letter + '(?:-|' + re.src_pseudo_letter + '){0,61}' + re.src_pseudo_letter + ')' +\n ')'\n\n re.src_host =\n\n '(?:' +\n // Don't need IP check, because digits are already allowed in normal domain names\n // src_ip4 +\n // '|' +\n '(?:(?:(?:' + re.src_domain + ')\\\\.)*' + re.src_domain/* _root */ + ')' +\n ')'\n\n re.tpl_host_fuzzy =\n\n '(?:' +\n re.src_ip4 +\n '|' +\n '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))' +\n ')'\n\n re.tpl_host_no_ip_fuzzy =\n\n '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))'\n\n re.src_host_strict =\n\n re.src_host + re.src_host_terminator\n\n re.tpl_host_fuzzy_strict =\n\n re.tpl_host_fuzzy + re.src_host_terminator\n\n re.src_host_port_strict =\n\n re.src_host + re.src_port + re.src_host_terminator\n\n re.tpl_host_port_fuzzy_strict =\n\n re.tpl_host_fuzzy + re.src_port + re.src_host_terminator\n\n re.tpl_host_port_no_ip_fuzzy_strict =\n\n re.tpl_host_no_ip_fuzzy + re.src_port + re.src_host_terminator\n\n //\n // Main rules\n //\n\n // Rude test fuzzy links by host, for quick deny\n re.tpl_host_fuzzy_test =\n\n 'localhost|www\\\\.|\\\\.\\\\d{1,3}\\\\.|(?:\\\\.(?:%TLDS%)(?:' + re.src_ZPCc + '|>|$))'\n\n re.tpl_email_fuzzy =\n\n '(^|' + text_separators + '|\"|\\\\(|' + re.src_ZCc + ')' +\n '(' + re.src_email_name + '@' + re.tpl_host_fuzzy_strict + ')'\n\n re.tpl_link_fuzzy =\n // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n // but can start with > (markdown blockquote)\n '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_fuzzy_strict + re.src_path + ')'\n\n re.tpl_link_no_ip_fuzzy =\n // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n // but can start with > (markdown blockquote)\n '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ')'\n\n return re\n}\n","import reFactory from './lib/re.mjs'\n\n//\n// Helpers\n//\n\n// Merge objects\n//\nfunction assign (obj /* from1, from2, from3, ... */) {\n const sources = Array.prototype.slice.call(arguments, 1)\n\n sources.forEach(function (source) {\n if (!source) { return }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key]\n })\n })\n\n return obj\n}\n\nfunction _class (obj) { return Object.prototype.toString.call(obj) }\nfunction isString (obj) { return _class(obj) === '[object String]' }\nfunction isObject (obj) { return _class(obj) === '[object Object]' }\nfunction isRegExp (obj) { return _class(obj) === '[object RegExp]' }\nfunction isFunction (obj) { return _class(obj) === '[object Function]' }\n\nfunction escapeRE (str) { return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&') }\n\n//\n\nconst defaultOptions = {\n fuzzyLink: true,\n fuzzyEmail: true,\n fuzzyIP: false\n}\n\nfunction isOptionsObj (obj) {\n return Object.keys(obj || {}).reduce(function (acc, k) {\n /* eslint-disable-next-line no-prototype-builtins */\n return acc || defaultOptions.hasOwnProperty(k)\n }, false)\n}\n\nconst defaultSchemas = {\n 'http:': {\n validate: function (text, pos, self) {\n const tail = text.slice(pos)\n\n if (!self.re.http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.http = new RegExp(\n '^\\\\/\\\\/' + self.re.src_auth + self.re.src_host_port_strict + self.re.src_path, 'i'\n )\n }\n if (self.re.http.test(tail)) {\n return tail.match(self.re.http)[0].length\n }\n return 0\n }\n },\n 'https:': 'http:',\n 'ftp:': 'http:',\n '//': {\n validate: function (text, pos, self) {\n const tail = text.slice(pos)\n\n if (!self.re.no_http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.no_http = new RegExp(\n '^' +\n self.re.src_auth +\n // Don't allow single-level domains, because of false positives like '//test'\n // with code comments\n '(?:localhost|(?:(?:' + self.re.src_domain + ')\\\\.)+' + self.re.src_domain_root + ')' +\n self.re.src_port +\n self.re.src_host_terminator +\n self.re.src_path,\n\n 'i'\n )\n }\n\n if (self.re.no_http.test(tail)) {\n // should not be `://` & `///`, that protects from errors in protocol name\n if (pos >= 3 && text[pos - 3] === ':') { return 0 }\n if (pos >= 3 && text[pos - 3] === '/') { return 0 }\n return tail.match(self.re.no_http)[0].length\n }\n return 0\n }\n },\n 'mailto:': {\n validate: function (text, pos, self) {\n const tail = text.slice(pos)\n\n if (!self.re.mailto) {\n self.re.mailto = new RegExp(\n '^' + self.re.src_email_name + '@' + self.re.src_host_strict, 'i'\n )\n }\n if (self.re.mailto.test(tail)) {\n return tail.match(self.re.mailto)[0].length\n }\n return 0\n }\n }\n}\n\n// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)\n/* eslint-disable-next-line max-len */\nconst tlds_2ch_src_re = 'a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]'\n\n// DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead\nconst tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф'.split('|')\n\nfunction resetScanCache (self) {\n self.__index__ = -1\n self.__text_cache__ = ''\n}\n\nfunction createValidator (re) {\n return function (text, pos) {\n const tail = text.slice(pos)\n\n if (re.test(tail)) {\n return tail.match(re)[0].length\n }\n return 0\n }\n}\n\nfunction createNormalizer () {\n return function (match, self) {\n self.normalize(match)\n }\n}\n\n// Schemas compiler. Build regexps.\n//\nfunction compile (self) {\n // Load & clone RE patterns.\n const re = self.re = reFactory(self.__opts__)\n\n // Define dynamic patterns\n const tlds = self.__tlds__.slice()\n\n self.onCompile()\n\n if (!self.__tlds_replaced__) {\n tlds.push(tlds_2ch_src_re)\n }\n tlds.push(re.src_xn)\n\n re.src_tlds = tlds.join('|')\n\n function untpl (tpl) { return tpl.replace('%TLDS%', re.src_tlds) }\n\n re.email_fuzzy = RegExp(untpl(re.tpl_email_fuzzy), 'i')\n re.link_fuzzy = RegExp(untpl(re.tpl_link_fuzzy), 'i')\n re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i')\n re.host_fuzzy_test = RegExp(untpl(re.tpl_host_fuzzy_test), 'i')\n\n //\n // Compile each schema\n //\n\n const aliases = []\n\n self.__compiled__ = {} // Reset compiled data\n\n function schemaError (name, val) {\n throw new Error('(LinkifyIt) Invalid schema \"' + name + '\": ' + val)\n }\n\n Object.keys(self.__schemas__).forEach(function (name) {\n const val = self.__schemas__[name]\n\n // skip disabled methods\n if (val === null) { return }\n\n const compiled = { validate: null, link: null }\n\n self.__compiled__[name] = compiled\n\n if (isObject(val)) {\n if (isRegExp(val.validate)) {\n compiled.validate = createValidator(val.validate)\n } else if (isFunction(val.validate)) {\n compiled.validate = val.validate\n } else {\n schemaError(name, val)\n }\n\n if (isFunction(val.normalize)) {\n compiled.normalize = val.normalize\n } else if (!val.normalize) {\n compiled.normalize = createNormalizer()\n } else {\n schemaError(name, val)\n }\n\n return\n }\n\n if (isString(val)) {\n aliases.push(name)\n return\n }\n\n schemaError(name, val)\n })\n\n //\n // Compile postponed aliases\n //\n\n aliases.forEach(function (alias) {\n if (!self.__compiled__[self.__schemas__[alias]]) {\n // Silently fail on missed schemas to avoid errons on disable.\n // schemaError(alias, self.__schemas__[alias]);\n return\n }\n\n self.__compiled__[alias].validate =\n self.__compiled__[self.__schemas__[alias]].validate\n self.__compiled__[alias].normalize =\n self.__compiled__[self.__schemas__[alias]].normalize\n })\n\n //\n // Fake record for guessed links\n //\n self.__compiled__[''] = { validate: null, normalize: createNormalizer() }\n\n //\n // Build schema condition\n //\n const slist = Object.keys(self.__compiled__)\n .filter(function (name) {\n // Filter disabled & fake schemas\n return name.length > 0 && self.__compiled__[name]\n })\n .map(escapeRE)\n .join('|')\n // (?!_) cause 1.5x slowdown\n self.re.schema_test = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'i')\n self.re.schema_search = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'ig')\n self.re.schema_at_start = RegExp('^' + self.re.schema_search.source, 'i')\n\n self.re.pretest = RegExp(\n '(' + self.re.schema_test.source + ')|(' + self.re.host_fuzzy_test.source + ')|@',\n 'i'\n )\n\n //\n // Cleanup\n //\n\n resetScanCache(self)\n}\n\n/**\n * class Match\n *\n * Match result. Single element of array, returned by [[LinkifyIt#match]]\n **/\nfunction Match (self, shift) {\n const start = self.__index__\n const end = self.__last_index__\n const text = self.__text_cache__.slice(start, end)\n\n /**\n * Match#schema -> String\n *\n * Prefix (protocol) for matched string.\n **/\n this.schema = self.__schema__.toLowerCase()\n /**\n * Match#index -> Number\n *\n * First position of matched string.\n **/\n this.index = start + shift\n /**\n * Match#lastIndex -> Number\n *\n * Next position after matched string.\n **/\n this.lastIndex = end + shift\n /**\n * Match#raw -> String\n *\n * Matched string.\n **/\n this.raw = text\n /**\n * Match#text -> String\n *\n * Notmalized text of matched string.\n **/\n this.text = text\n /**\n * Match#url -> String\n *\n * Normalized url of matched string.\n **/\n this.url = text\n}\n\nfunction createMatch (self, shift) {\n const match = new Match(self, shift)\n\n self.__compiled__[match.schema].normalize(match, self)\n\n return match\n}\n\n/**\n * class LinkifyIt\n **/\n\n/**\n * new LinkifyIt(schemas, options)\n * - schemas (Object): Optional. Additional schemas to validate (prefix/validator)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Creates new linkifier instance with optional additional schemas.\n * Can be called without `new` keyword for convenience.\n *\n * By default understands:\n *\n * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n * - \"fuzzy\" links and emails (example.com, foo@bar.com).\n *\n * `schemas` is an object, where each key/value describes protocol/rule:\n *\n * - __key__ - link prefix (usually, protocol name with `:` at the end, `skype:`\n * for example). `linkify-it` makes shure that prefix is not preceeded with\n * alphanumeric char and symbols. Only whitespaces and punctuation allowed.\n * - __value__ - rule to check tail after link prefix\n * - _String_ - just alias to existing rule\n * - _Object_\n * - _validate_ - validator function (should return matched length on success),\n * or `RegExp`.\n * - _normalize_ - optional function to normalize text & url of matched result\n * (for example, for @twitter mentions).\n *\n * `options`:\n *\n * - __fuzzyLink__ - recognige URL-s without `http(s):` prefix. Default `true`.\n * - __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts\n * like version numbers. Default `false`.\n * - __fuzzyEmail__ - recognize emails without `mailto:` prefix.\n *\n **/\nfunction LinkifyIt (schemas, options) {\n if (!(this instanceof LinkifyIt)) {\n return new LinkifyIt(schemas, options)\n }\n\n if (!options) {\n if (isOptionsObj(schemas)) {\n options = schemas\n schemas = {}\n }\n }\n\n this.__opts__ = assign({}, defaultOptions, options)\n\n // Cache last tested result. Used to skip repeating steps on next `match` call.\n this.__index__ = -1\n this.__last_index__ = -1 // Next scan position\n this.__schema__ = ''\n this.__text_cache__ = ''\n\n this.__schemas__ = assign({}, defaultSchemas, schemas)\n this.__compiled__ = {}\n\n this.__tlds__ = tlds_default\n this.__tlds_replaced__ = false\n\n this.re = {}\n\n compile(this)\n}\n\n/** chainable\n * LinkifyIt#add(schema, definition)\n * - schema (String): rule name (fixed pattern prefix)\n * - definition (String|RegExp|Object): schema definition\n *\n * Add new rule definition. See constructor description for details.\n **/\nLinkifyIt.prototype.add = function add (schema, definition) {\n this.__schemas__[schema] = definition\n compile(this)\n return this\n}\n\n/** chainable\n * LinkifyIt#set(options)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Set recognition options for links without schema.\n **/\nLinkifyIt.prototype.set = function set (options) {\n this.__opts__ = assign(this.__opts__, options)\n return this\n}\n\n/**\n * LinkifyIt#test(text) -> Boolean\n *\n * Searches linkifiable pattern and returns `true` on success or `false` on fail.\n **/\nLinkifyIt.prototype.test = function test (text) {\n // Reset scan cache\n this.__text_cache__ = text\n this.__index__ = -1\n\n if (!text.length) { return false }\n\n let m, ml, me, len, shift, next, re, tld_pos, at_pos\n\n // try to scan for link with schema - that's the most simple rule\n if (this.re.schema_test.test(text)) {\n re = this.re.schema_search\n re.lastIndex = 0\n while ((m = re.exec(text)) !== null) {\n len = this.testSchemaAt(text, m[2], re.lastIndex)\n if (len) {\n this.__schema__ = m[2]\n this.__index__ = m.index + m[1].length\n this.__last_index__ = m.index + m[0].length + len\n break\n }\n }\n }\n\n if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n // guess schemaless links\n tld_pos = text.search(this.re.host_fuzzy_test)\n if (tld_pos >= 0) {\n // if tld is located after found link - no need to check fuzzy pattern\n if (this.__index__ < 0 || tld_pos < this.__index__) {\n if ((ml = text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) {\n shift = ml.index + ml[1].length\n\n if (this.__index__ < 0 || shift < this.__index__) {\n this.__schema__ = ''\n this.__index__ = shift\n this.__last_index__ = ml.index + ml[0].length\n }\n }\n }\n }\n }\n\n if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n // guess schemaless emails\n at_pos = text.indexOf('@')\n if (at_pos >= 0) {\n // We can't skip this check, because this cases are possible:\n // 192.168.1.1@gmail.com, my.in@example.com\n if ((me = text.match(this.re.email_fuzzy)) !== null) {\n shift = me.index + me[1].length\n next = me.index + me[0].length\n\n if (this.__index__ < 0 || shift < this.__index__ ||\n (shift === this.__index__ && next > this.__last_index__)) {\n this.__schema__ = 'mailto:'\n this.__index__ = shift\n this.__last_index__ = next\n }\n }\n }\n }\n\n return this.__index__ >= 0\n}\n\n/**\n * LinkifyIt#pretest(text) -> Boolean\n *\n * Very quick check, that can give false positives. Returns true if link MAY BE\n * can exists. Can be used for speed optimization, when you need to check that\n * link NOT exists.\n **/\nLinkifyIt.prototype.pretest = function pretest (text) {\n return this.re.pretest.test(text)\n}\n\n/**\n * LinkifyIt#testSchemaAt(text, name, position) -> Number\n * - text (String): text to scan\n * - name (String): rule (schema) name\n * - position (Number): text offset to check from\n *\n * Similar to [[LinkifyIt#test]] but checks only specific protocol tail exactly\n * at given position. Returns length of found pattern (0 on fail).\n **/\nLinkifyIt.prototype.testSchemaAt = function testSchemaAt (text, schema, pos) {\n // If not supported schema check requested - terminate\n if (!this.__compiled__[schema.toLowerCase()]) {\n return 0\n }\n return this.__compiled__[schema.toLowerCase()].validate(text, pos, this)\n}\n\n/**\n * LinkifyIt#match(text) -> Array|null\n *\n * Returns array of found link descriptions or `null` on fail. We strongly\n * recommend to use [[LinkifyIt#test]] first, for best speed.\n *\n * ##### Result match description\n *\n * - __schema__ - link schema, can be empty for fuzzy links, or `//` for\n * protocol-neutral links.\n * - __index__ - offset of matched text\n * - __lastIndex__ - index of next char after mathch end\n * - __raw__ - matched text\n * - __text__ - normalized text\n * - __url__ - link, generated from matched text\n **/\nLinkifyIt.prototype.match = function match (text) {\n const result = []\n let shift = 0\n\n // Try to take previous element from cache, if .test() called before\n if (this.__index__ >= 0 && this.__text_cache__ === text) {\n result.push(createMatch(this, shift))\n shift = this.__last_index__\n }\n\n // Cut head if cache was used\n let tail = shift ? text.slice(shift) : text\n\n // Scan string until end reached\n while (this.test(tail)) {\n result.push(createMatch(this, shift))\n\n tail = tail.slice(this.__last_index__)\n shift += this.__last_index__\n }\n\n if (result.length) {\n return result\n }\n\n return null\n}\n\n/**\n * LinkifyIt#matchAtStart(text) -> Match|null\n *\n * Returns fully-formed (not fuzzy) link if it starts at the beginning\n * of the string, and null otherwise.\n **/\nLinkifyIt.prototype.matchAtStart = function matchAtStart (text) {\n // Reset scan cache\n this.__text_cache__ = text\n this.__index__ = -1\n\n if (!text.length) return null\n\n const m = this.re.schema_at_start.exec(text)\n if (!m) return null\n\n const len = this.testSchemaAt(text, m[2], m[0].length)\n if (!len) return null\n\n this.__schema__ = m[2]\n this.__index__ = m.index + m[1].length\n this.__last_index__ = m.index + m[0].length + len\n\n return createMatch(this, 0)\n}\n\n/** chainable\n * LinkifyIt#tlds(list [, keepOld]) -> this\n * - list (Array): list of tlds\n * - keepOld (Boolean): merge with current list if `true` (`false` by default)\n *\n * Load (or merge) new tlds list. Those are user for fuzzy links (without prefix)\n * to avoid false positives. By default this algorythm used:\n *\n * - hostname with any 2-letter root zones are ok.\n * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф\n * are ok.\n * - encoded (`xn--...`) root zones are ok.\n *\n * If list is replaced, then exact match for 2-chars root zones will be checked.\n **/\nLinkifyIt.prototype.tlds = function tlds (list, keepOld) {\n list = Array.isArray(list) ? list : [list]\n\n if (!keepOld) {\n this.__tlds__ = list.slice()\n this.__tlds_replaced__ = true\n compile(this)\n return this\n }\n\n this.__tlds__ = this.__tlds__.concat(list)\n .sort()\n .filter(function (el, idx, arr) {\n return el !== arr[idx - 1]\n })\n .reverse()\n\n compile(this)\n return this\n}\n\n/**\n * LinkifyIt#normalize(match)\n *\n * Default normalizer (if schema does not define it's own).\n **/\nLinkifyIt.prototype.normalize = function normalize (match) {\n // Do minimal possible changes by default. Need to collect feedback prior\n // to move forward https://github.com/markdown-it/linkify-it/issues/1\n\n if (!match.schema) { match.url = 'http://' + match.url }\n\n if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) {\n match.url = 'mailto:' + match.url\n }\n}\n\n/**\n * LinkifyIt#onCompile()\n *\n * Override to modify basic RegExp-s.\n **/\nLinkifyIt.prototype.onCompile = function onCompile () {\n}\n\nexport default LinkifyIt\n","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7F]/; // Note: U+007F DEL is excluded too.\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, callback) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = callback(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {String} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(domain, callback) {\n\tconst parts = domain.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tdomain = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tdomain = domain.replace(regexSeparators, '\\x2E');\n\tconst labels = domain.split('.');\n\tconst encoded = map(labels, callback).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see \n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = codePoints => String.fromCodePoint(...codePoints);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint >= 0x30 && codePoint < 0x3A) {\n\t\treturn 26 + (codePoint - 0x30);\n\t}\n\tif (codePoint >= 0x41 && codePoint < 0x5B) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint >= 0x61 && codePoint < 0x7B) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tconst oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\t\t\tif (digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tconst inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tconst basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue === n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.3.1',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see \n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport { ucs2decode, ucs2encode, decode, encode, toASCII, toUnicode };\nexport default punycode;\n","// markdown-it default options\n\nexport default {\n options: {\n // Enable HTML tags in source\n html: false,\n\n // Use '/' to close single tags (
)\n xhtmlOut: false,\n\n // Convert '\\n' in paragraphs into
\n breaks: false,\n\n // CSS language prefix for fenced blocks\n langPrefix: 'language-',\n\n // autoconvert URL-like texts to links\n linkify: false,\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with )\n xhtmlOut: false,\n\n // Convert '\\n' in paragraphs into
\n breaks: false,\n\n // CSS language prefix for fenced blocks\n langPrefix: 'language-',\n\n // autoconvert URL-like texts to links\n linkify: false,\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with )\n xhtmlOut: true,\n\n // Convert '\\n' in paragraphs into
\n breaks: false,\n\n // CSS language prefix for fenced blocks\n langPrefix: 'language-',\n\n // autoconvert URL-like texts to links\n linkify: false,\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with = 0) {\n try {\n parsed.hostname = punycode.toASCII(parsed.hostname)\n } catch (er) { /**/ }\n }\n }\n\n return mdurl.encode(mdurl.format(parsed))\n}\n\nfunction normalizeLinkText (url) {\n const parsed = mdurl.parse(url, true)\n\n if (parsed.hostname) {\n // Encode hostnames in urls like:\n // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n //\n // We don't encode unknown schemas, because it's likely that we encode\n // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n //\n if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n try {\n parsed.hostname = punycode.toUnicode(parsed.hostname)\n } catch (er) { /**/ }\n }\n }\n\n // add '%' to exclude list because of https://github.com/markdown-it/markdown-it/issues/720\n return mdurl.decode(mdurl.format(parsed), mdurl.decode.defaultChars + '%')\n}\n\n/**\n * class MarkdownIt\n *\n * Main parser/renderer class.\n *\n * ##### Usage\n *\n * ```javascript\n * // node.js, \"classic\" way:\n * var MarkdownIt = require('markdown-it'),\n * md = new MarkdownIt();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // node.js, the same, but with sugar:\n * var md = require('markdown-it')();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // browser without AMD, added to \"window\" on script load\n * // Note, there are no dash.\n * var md = window.markdownit();\n * var result = md.render('# markdown-it rulezz!');\n * ```\n *\n * Single line rendering, without paragraph wrap:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * var result = md.renderInline('__markdown-it__ rulezz!');\n * ```\n **/\n\n/**\n * new MarkdownIt([presetName, options])\n * - presetName (String): optional, `commonmark` / `zero`\n * - options (Object)\n *\n * Creates parser instanse with given config. Can be called without `new`.\n *\n * ##### presetName\n *\n * MarkdownIt provides named presets as a convenience to quickly\n * enable/disable active syntax rules and options for common use cases.\n *\n * - [\"commonmark\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/commonmark.mjs) -\n * configures parser to strict [CommonMark](http://commonmark.org/) mode.\n * - [default](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/default.mjs) -\n * similar to GFM, used when no preset name given. Enables all available rules,\n * but still without html, typographer & autolinker.\n * - [\"zero\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/zero.mjs) -\n * all rules disabled. Useful to quickly setup your config via `.enable()`.\n * For example, when you need only `bold` and `italic` markup and nothing else.\n *\n * ##### options:\n *\n * - __html__ - `false`. Set `true` to enable HTML tags in source. Be careful!\n * That's not safe! You may need external sanitizer to protect output from XSS.\n * It's better to extend features via plugins, instead of enabling HTML.\n * - __xhtmlOut__ - `false`. Set `true` to add '/' when closing single tags\n * (`
`). This is needed only for full CommonMark compatibility. In real\n * world you will need HTML output.\n * - __breaks__ - `false`. Set `true` to convert `\\n` in paragraphs into `
`.\n * - __langPrefix__ - `language-`. CSS language class prefix for fenced blocks.\n * Can be useful for external highlighters.\n * - __linkify__ - `false`. Set `true` to autoconvert URL-like text to links.\n * - __typographer__ - `false`. Set `true` to enable [some language-neutral\n * replacement](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.mjs) +\n * quotes beautification (smartquotes).\n * - __quotes__ - `“”‘’`, String or Array. Double + single quotes replacement\n * pairs, when typographer enabled and smartquotes on. For example, you can\n * use `'«»„“'` for Russian, `'„“‚‘'` for German, and\n * `['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›']` for French (including nbsp).\n * - __highlight__ - `null`. Highlighter function for fenced code blocks.\n * Highlighter `function (str, lang)` should return escaped HTML. It can also\n * return empty string if the source was not changed and should be escaped\n * externaly. If result starts with ` or ``):\n *\n * ```javascript\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * // Actual default values\n * var md = require('markdown-it')({\n * highlight: function (str, lang) {\n * if (lang && hljs.getLanguage(lang)) {\n * try {\n * return '
' +\n *                hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +\n *                '
';\n * } catch (__) {}\n * }\n *\n * return '
' + md.utils.escapeHtml(str) + '
';\n * }\n * });\n * ```\n *\n **/\nfunction MarkdownIt (presetName, options) {\n if (!(this instanceof MarkdownIt)) {\n return new MarkdownIt(presetName, options)\n }\n\n if (!options) {\n if (!utils.isString(presetName)) {\n options = presetName || {}\n presetName = 'default'\n }\n }\n\n /**\n * MarkdownIt#inline -> ParserInline\n *\n * Instance of [[ParserInline]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.inline = new ParserInline()\n\n /**\n * MarkdownIt#block -> ParserBlock\n *\n * Instance of [[ParserBlock]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.block = new ParserBlock()\n\n /**\n * MarkdownIt#core -> Core\n *\n * Instance of [[Core]] chain executor. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.core = new ParserCore()\n\n /**\n * MarkdownIt#renderer -> Renderer\n *\n * Instance of [[Renderer]]. Use it to modify output look. Or to add rendering\n * rules for new token types, generated by plugins.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * function myToken(tokens, idx, options, env, self) {\n * //...\n * return result;\n * };\n *\n * md.renderer.rules['my_token'] = myToken\n * ```\n *\n * See [[Renderer]] docs and [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.mjs).\n **/\n this.renderer = new Renderer()\n\n /**\n * MarkdownIt#linkify -> LinkifyIt\n *\n * [linkify-it](https://github.com/markdown-it/linkify-it) instance.\n * Used by [linkify](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/linkify.mjs)\n * rule.\n **/\n this.linkify = new LinkifyIt()\n\n /**\n * MarkdownIt#validateLink(url) -> Boolean\n *\n * Link validation function. CommonMark allows too much in links. By default\n * we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas\n * except some embedded image types.\n *\n * You can change this behaviour:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * // enable everything\n * md.validateLink = function () { return true; }\n * ```\n **/\n this.validateLink = validateLink\n\n /**\n * MarkdownIt#normalizeLink(url) -> String\n *\n * Function used to encode link url to a machine-readable format,\n * which includes url-encoding, punycode, etc.\n **/\n this.normalizeLink = normalizeLink\n\n /**\n * MarkdownIt#normalizeLinkText(url) -> String\n *\n * Function used to decode link url to a human-readable format`\n **/\n this.normalizeLinkText = normalizeLinkText\n\n // Expose utils & helpers for easy acces from plugins\n\n /**\n * MarkdownIt#utils -> utils\n *\n * Assorted utility functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/common/utils.mjs).\n **/\n this.utils = utils\n\n /**\n * MarkdownIt#helpers -> helpers\n *\n * Link components parser functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/helpers).\n **/\n this.helpers = utils.assign({}, helpers)\n\n this.options = {}\n this.configure(presetName)\n\n if (options) { this.set(options) }\n}\n\n/** chainable\n * MarkdownIt.set(options)\n *\n * Set parser options (in the same format as in constructor). Probably, you\n * will never need it, but you can change options after constructor call.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .set({ html: true, breaks: true })\n * .set({ typographer, true });\n * ```\n *\n * __Note:__ To achieve the best possible performance, don't modify a\n * `markdown-it` instance options on the fly. If you need multiple configurations\n * it's best to create multiple instances and initialize each with separate\n * config.\n **/\nMarkdownIt.prototype.set = function (options) {\n utils.assign(this.options, options)\n return this\n}\n\n/** chainable, internal\n * MarkdownIt.configure(presets)\n *\n * Batch load of all options and compenent settings. This is internal method,\n * and you probably will not need it. But if you will - see available presets\n * and data structure [here](https://github.com/markdown-it/markdown-it/tree/master/lib/presets)\n *\n * We strongly recommend to use presets instead of direct config loads. That\n * will give better compatibility with next versions.\n **/\nMarkdownIt.prototype.configure = function (presets) {\n const self = this\n\n if (utils.isString(presets)) {\n const presetName = presets\n presets = config[presetName]\n if (!presets) { throw new Error('Wrong `markdown-it` preset \"' + presetName + '\", check name') }\n }\n\n if (!presets) { throw new Error('Wrong `markdown-it` preset, can\\'t be empty') }\n\n if (presets.options) { self.set(presets.options) }\n\n if (presets.components) {\n Object.keys(presets.components).forEach(function (name) {\n if (presets.components[name].rules) {\n self[name].ruler.enableOnly(presets.components[name].rules)\n }\n if (presets.components[name].rules2) {\n self[name].ruler2.enableOnly(presets.components[name].rules2)\n }\n })\n }\n return this\n}\n\n/** chainable\n * MarkdownIt.enable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to enable\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable list or rules. It will automatically find appropriate components,\n * containing rules with given names. If rule not found, and `ignoreInvalid`\n * not set - throws exception.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .enable(['sub', 'sup'])\n * .disable('smartquotes');\n * ```\n **/\nMarkdownIt.prototype.enable = function (list, ignoreInvalid) {\n let result = []\n\n if (!Array.isArray(list)) { list = [list] }\n\n ['core', 'block', 'inline'].forEach(function (chain) {\n result = result.concat(this[chain].ruler.enable(list, true))\n }, this)\n\n result = result.concat(this.inline.ruler2.enable(list, true))\n\n const missed = list.filter(function (name) { return result.indexOf(name) < 0 })\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to enable unknown rule(s): ' + missed)\n }\n\n return this\n}\n\n/** chainable\n * MarkdownIt.disable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * The same as [[MarkdownIt.enable]], but turn specified rules off.\n **/\nMarkdownIt.prototype.disable = function (list, ignoreInvalid) {\n let result = []\n\n if (!Array.isArray(list)) { list = [list] }\n\n ['core', 'block', 'inline'].forEach(function (chain) {\n result = result.concat(this[chain].ruler.disable(list, true))\n }, this)\n\n result = result.concat(this.inline.ruler2.disable(list, true))\n\n const missed = list.filter(function (name) { return result.indexOf(name) < 0 })\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to disable unknown rule(s): ' + missed)\n }\n return this\n}\n\n/** chainable\n * MarkdownIt.use(plugin, params)\n *\n * Load specified plugin with given params into current parser instance.\n * It's just a sugar to call `plugin(md, params)` with curring.\n *\n * ##### Example\n *\n * ```javascript\n * var iterator = require('markdown-it-for-inline');\n * var md = require('markdown-it')()\n * .use(iterator, 'foo_replace', 'text', function (tokens, idx) {\n * tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar');\n * });\n * ```\n **/\nMarkdownIt.prototype.use = function (plugin /*, params, ... */) {\n const args = [this].concat(Array.prototype.slice.call(arguments, 1))\n plugin.apply(plugin, args)\n return this\n}\n\n/** internal\n * MarkdownIt.parse(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Parse input string and return list of block tokens (special token type\n * \"inline\" will contain list of inline tokens). You should not call this\n * method directly, until you write custom renderer (for example, to produce\n * AST).\n *\n * `env` is used to pass data between \"distributed\" rules and return additional\n * metadata like reference info, needed for the renderer. It also can be used to\n * inject data in specific cases. Usually, you will be ok to pass `{}`,\n * and then pass updated object to renderer.\n **/\nMarkdownIt.prototype.parse = function (src, env) {\n if (typeof src !== 'string') {\n throw new Error('Input data should be a String')\n }\n\n const state = new this.core.State(src, this, env)\n\n this.core.process(state)\n\n return state.tokens\n}\n\n/**\n * MarkdownIt.render(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Render markdown string into html. It does all magic for you :).\n *\n * `env` can be used to inject additional metadata (`{}` by default).\n * But you will not need it with high probability. See also comment\n * in [[MarkdownIt.parse]].\n **/\nMarkdownIt.prototype.render = function (src, env) {\n env = env || {}\n\n return this.renderer.render(this.parse(src, env), this.options, env)\n}\n\n/** internal\n * MarkdownIt.parseInline(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * The same as [[MarkdownIt.parse]] but skip all block rules. It returns the\n * block tokens list with the single `inline` element, containing parsed inline\n * tokens in `children` property. Also updates `env` object.\n **/\nMarkdownIt.prototype.parseInline = function (src, env) {\n const state = new this.core.State(src, this, env)\n\n state.inlineMode = true\n this.core.process(state)\n\n return state.tokens\n}\n\n/**\n * MarkdownIt.renderInline(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Similar to [[MarkdownIt.render]] but for single paragraph content. Result\n * will NOT be wrapped into `

` tags.\n **/\nMarkdownIt.prototype.renderInline = function (src, env) {\n env = env || {}\n\n return this.renderer.render(this.parseInline(src, env), this.options, env)\n}\n\nexport default MarkdownIt\n","var e=!1,n={false:\"push\",true:\"unshift\",after:\"push\",before:\"unshift\"},t={isPermalinkSymbol:!0};function r(r,a,i,l){var o;if(!e){var c=\"Using deprecated markdown-it-anchor permalink option, see https://github.com/valeriangalliat/markdown-it-anchor#permalinks\";\"object\"==typeof process&&process&&process.emitWarning?process.emitWarning(c):console.warn(c),e=!0}var s=[Object.assign(new i.Token(\"link_open\",\"a\",1),{attrs:[].concat(a.permalinkClass?[[\"class\",a.permalinkClass]]:[],[[\"href\",a.permalinkHref(r,i)]],Object.entries(a.permalinkAttrs(r,i)))}),Object.assign(new i.Token(\"html_block\",\"\",0),{content:a.permalinkSymbol,meta:t}),new i.Token(\"link_close\",\"a\",-1)];a.permalinkSpace&&i.tokens[l+1].children[n[a.permalinkBefore]](Object.assign(new i.Token(\"text\",\"\",0),{content:\" \"})),(o=i.tokens[l+1].children)[n[a.permalinkBefore]].apply(o,s)}function a(e){return\"#\"+e}function i(e){return{}}var l={class:\"header-anchor\",symbol:\"#\",renderHref:a,renderAttrs:i};function o(e){function n(t){return t=Object.assign({},n.defaults,t),function(n,r,a,i){return e(n,t,r,a,i)}}return n.defaults=Object.assign({},l),n.renderPermalinkImpl=e,n}var c=o(function(e,r,a,i,l){var o,c=[Object.assign(new i.Token(\"link_open\",\"a\",1),{attrs:[].concat(r.class?[[\"class\",r.class]]:[],[[\"href\",r.renderHref(e,i)]],r.ariaHidden?[[\"aria-hidden\",\"true\"]]:[],Object.entries(r.renderAttrs(e,i)))}),Object.assign(new i.Token(\"html_inline\",\"\",0),{content:r.symbol,meta:t}),new i.Token(\"link_close\",\"a\",-1)];if(r.space){var s=\"string\"==typeof r.space?r.space:\" \";i.tokens[l+1].children[n[r.placement]](Object.assign(new i.Token(\"string\"==typeof r.space?\"html_inline\":\"text\",\"\",0),{content:s}))}(o=i.tokens[l+1].children)[n[r.placement]].apply(o,c)});Object.assign(c.defaults,{space:!0,placement:\"after\",ariaHidden:!1});var s=o(c.renderPermalinkImpl);s.defaults=Object.assign({},c.defaults,{ariaHidden:!0});var u=o(function(e,n,t,r,a){var i=[Object.assign(new r.Token(\"link_open\",\"a\",1),{attrs:[].concat(n.class?[[\"class\",n.class]]:[],[[\"href\",n.renderHref(e,r)]],Object.entries(n.renderAttrs(e,r)))})].concat(n.safariReaderFix?[new r.Token(\"span_open\",\"span\",1)]:[],r.tokens[a+1].children,n.safariReaderFix?[new r.Token(\"span_close\",\"span\",-1)]:[],[new r.Token(\"link_close\",\"a\",-1)]);r.tokens[a+1]=Object.assign(new r.Token(\"inline\",\"\",0),{children:i})});Object.assign(u.defaults,{safariReaderFix:!1});var d=o(function(e,r,a,i,l){var o;if(![\"visually-hidden\",\"aria-label\",\"aria-describedby\",\"aria-labelledby\"].includes(r.style))throw new Error(\"`permalink.linkAfterHeader` called with unknown style option `\"+r.style+\"`\");if(![\"aria-describedby\",\"aria-labelledby\"].includes(r.style)&&!r.assistiveText)throw new Error(\"`permalink.linkAfterHeader` called without the `assistiveText` option in `\"+r.style+\"` style\");if(\"visually-hidden\"===r.style&&!r.visuallyHiddenClass)throw new Error(\"`permalink.linkAfterHeader` called without the `visuallyHiddenClass` option in `visually-hidden` style\");var c=i.tokens[l+1].children.filter(function(e){return\"text\"===e.type||\"code_inline\"===e.type}).reduce(function(e,n){return e+n.content},\"\"),s=[],u=[];if(r.class&&u.push([\"class\",r.class]),u.push([\"href\",r.renderHref(e,i)]),u.push.apply(u,Object.entries(r.renderAttrs(e,i))),\"visually-hidden\"===r.style){if(s.push(Object.assign(new i.Token(\"span_open\",\"span\",1),{attrs:[[\"class\",r.visuallyHiddenClass]]}),Object.assign(new i.Token(\"text\",\"\",0),{content:r.assistiveText(c)}),new i.Token(\"span_close\",\"span\",-1)),r.space){var d=\"string\"==typeof r.space?r.space:\" \";s[n[r.placement]](Object.assign(new i.Token(\"string\"==typeof r.space?\"html_inline\":\"text\",\"\",0),{content:d}))}s[n[r.placement]](Object.assign(new i.Token(\"span_open\",\"span\",1),{attrs:[[\"aria-hidden\",\"true\"]]}),Object.assign(new i.Token(\"html_inline\",\"\",0),{content:r.symbol,meta:t}),new i.Token(\"span_close\",\"span\",-1))}else s.push(Object.assign(new i.Token(\"html_inline\",\"\",0),{content:r.symbol,meta:t}));\"aria-label\"===r.style?u.push([\"aria-label\",r.assistiveText(c)]):[\"aria-describedby\",\"aria-labelledby\"].includes(r.style)&&u.push([r.style,e]);var f=[Object.assign(new i.Token(\"link_open\",\"a\",1),{attrs:u})].concat(s,[new i.Token(\"link_close\",\"a\",-1)]);(o=i.tokens).splice.apply(o,[l+3,0].concat(f)),r.wrapper&&(i.tokens.splice(l,0,Object.assign(new i.Token(\"html_block\",\"\",0),{content:r.wrapper[0]+\"\\n\"})),i.tokens.splice(l+3+f.length+1,0,Object.assign(new i.Token(\"html_block\",\"\",0),{content:r.wrapper[1]+\"\\n\"})))});function f(e,n,t,r){var a=e,i=r;if(t&&Object.prototype.hasOwnProperty.call(n,a))throw new Error(\"User defined `id` attribute `\"+e+\"` is not unique. Please fix it in your Markdown to continue.\");for(;Object.prototype.hasOwnProperty.call(n,a);)a=e+\"-\"+i,i+=1;return n[a]=!0,a}function p(e,n){n=Object.assign({},p.defaults,n),e.core.ruler.push(\"anchor\",function(e){for(var t,a={},i=e.tokens,l=Array.isArray(n.level)?(t=n.level,function(e){return t.includes(e)}):function(e){return function(n){return n>=e}}(n.level),o=0;o or
or
)\n */\nfunction matchBR(state, start) {\n var match = state.src.slice(start, start + 6).match(/^/);\n if (match) {\n return match[0];\n }\n return null;\n}\nfunction markdownItBr(md) {\n function tokenize(state, silent) {\n var token;\n var max = state.posMax;\n var start = state.pos;\n // don't run any pairs in validation mode\n if (silent) {\n return false;\n }\n var br = matchBR(state, start);\n if (br === null || start + br.length > max) {\n return false;\n }\n state.scanDelims(state.pos, true);\n token = state.push(\"text\", \"\", 0);\n token.content = \"
\";\n state.delimiters.push({\n marker: token.content,\n jump: 0,\n token: state.tokens.length - 1,\n level: state.level,\n end: -1,\n open: true,\n close: true,\n });\n // length is:
-> 4,
-> 5,
-> 6\n state.pos += br.length;\n return true;\n }\n // Walk through delimiter list and replace text tokens with tags\n function postProcess(state) {\n var i;\n var delim;\n var token;\n var delimiters = state.delimiters;\n var max = state.delimiters.length;\n for (i = 0; i < max; i++) {\n delim = delimiters[i];\n if (delim.marker === \"
\") {\n token = state.tokens[delim.token];\n token.type = \"br_openclose\";\n token.tag = \"br\";\n token.nesting = 1;\n token.markup = \"
\";\n token.content = \"\";\n }\n }\n }\n md.inline.ruler.before(\"emphasis\", \"br\", tokenize);\n md.inline.ruler2.before(\"emphasis\", \"br\", postProcess);\n}\nexports.default = markdownItBr;\n","/* eslint-disable no-multi-assign */\n\nfunction deepFreeze(obj) {\n if (obj instanceof Map) {\n obj.clear =\n obj.delete =\n obj.set =\n function () {\n throw new Error('map is read-only');\n };\n } else if (obj instanceof Set) {\n obj.add =\n obj.clear =\n obj.delete =\n function () {\n throw new Error('set is read-only');\n };\n }\n\n // Freeze self\n Object.freeze(obj);\n\n Object.getOwnPropertyNames(obj).forEach((name) => {\n const prop = obj[name];\n const type = typeof prop;\n\n // Freeze prop if it is an object or function and also not already frozen\n if ((type === 'object' || type === 'function') && !Object.isFrozen(prop)) {\n deepFreeze(prop);\n }\n });\n\n return obj;\n}\n\n/** @typedef {import('highlight.js').CallbackResponse} CallbackResponse */\n/** @typedef {import('highlight.js').CompiledMode} CompiledMode */\n/** @implements CallbackResponse */\n\nclass Response {\n /**\n * @param {CompiledMode} mode\n */\n constructor(mode) {\n // eslint-disable-next-line no-undefined\n if (mode.data === undefined) mode.data = {};\n\n this.data = mode.data;\n this.isMatchIgnored = false;\n }\n\n ignoreMatch() {\n this.isMatchIgnored = true;\n }\n}\n\n/**\n * @param {string} value\n * @returns {string}\n */\nfunction escapeHTML(value) {\n return value\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\n/**\n * performs a shallow merge of multiple objects into one\n *\n * @template T\n * @param {T} original\n * @param {Record[]} objects\n * @returns {T} a single new object\n */\nfunction inherit$1(original, ...objects) {\n /** @type Record */\n const result = Object.create(null);\n\n for (const key in original) {\n result[key] = original[key];\n }\n objects.forEach(function(obj) {\n for (const key in obj) {\n result[key] = obj[key];\n }\n });\n return /** @type {T} */ (result);\n}\n\n/**\n * @typedef {object} Renderer\n * @property {(text: string) => void} addText\n * @property {(node: Node) => void} openNode\n * @property {(node: Node) => void} closeNode\n * @property {() => string} value\n */\n\n/** @typedef {{scope?: string, language?: string, sublanguage?: boolean}} Node */\n/** @typedef {{walk: (r: Renderer) => void}} Tree */\n/** */\n\nconst SPAN_CLOSE = '';\n\n/**\n * Determines if a node needs to be wrapped in \n *\n * @param {Node} node */\nconst emitsWrappingTags = (node) => {\n // rarely we can have a sublanguage where language is undefined\n // TODO: track down why\n return !!node.scope;\n};\n\n/**\n *\n * @param {string} name\n * @param {{prefix:string}} options\n */\nconst scopeToCSSClass = (name, { prefix }) => {\n // sub-language\n if (name.startsWith(\"language:\")) {\n return name.replace(\"language:\", \"language-\");\n }\n // tiered scope: comment.line\n if (name.includes(\".\")) {\n const pieces = name.split(\".\");\n return [\n `${prefix}${pieces.shift()}`,\n ...(pieces.map((x, i) => `${x}${\"_\".repeat(i + 1)}`))\n ].join(\" \");\n }\n // simple scope\n return `${prefix}${name}`;\n};\n\n/** @type {Renderer} */\nclass HTMLRenderer {\n /**\n * Creates a new HTMLRenderer\n *\n * @param {Tree} parseTree - the parse tree (must support `walk` API)\n * @param {{classPrefix: string}} options\n */\n constructor(parseTree, options) {\n this.buffer = \"\";\n this.classPrefix = options.classPrefix;\n parseTree.walk(this);\n }\n\n /**\n * Adds texts to the output stream\n *\n * @param {string} text */\n addText(text) {\n this.buffer += escapeHTML(text);\n }\n\n /**\n * Adds a node open to the output stream (if needed)\n *\n * @param {Node} node */\n openNode(node) {\n if (!emitsWrappingTags(node)) return;\n\n const className = scopeToCSSClass(node.scope,\n { prefix: this.classPrefix });\n this.span(className);\n }\n\n /**\n * Adds a node close to the output stream (if needed)\n *\n * @param {Node} node */\n closeNode(node) {\n if (!emitsWrappingTags(node)) return;\n\n this.buffer += SPAN_CLOSE;\n }\n\n /**\n * returns the accumulated buffer\n */\n value() {\n return this.buffer;\n }\n\n // helpers\n\n /**\n * Builds a span element\n *\n * @param {string} className */\n span(className) {\n this.buffer += ``;\n }\n}\n\n/** @typedef {{scope?: string, language?: string, children: Node[]} | string} Node */\n/** @typedef {{scope?: string, language?: string, children: Node[]} } DataNode */\n/** @typedef {import('highlight.js').Emitter} Emitter */\n/** */\n\n/** @returns {DataNode} */\nconst newNode = (opts = {}) => {\n /** @type DataNode */\n const result = { children: [] };\n Object.assign(result, opts);\n return result;\n};\n\nclass TokenTree {\n constructor() {\n /** @type DataNode */\n this.rootNode = newNode();\n this.stack = [this.rootNode];\n }\n\n get top() {\n return this.stack[this.stack.length - 1];\n }\n\n get root() { return this.rootNode; }\n\n /** @param {Node} node */\n add(node) {\n this.top.children.push(node);\n }\n\n /** @param {string} scope */\n openNode(scope) {\n /** @type Node */\n const node = newNode({ scope });\n this.add(node);\n this.stack.push(node);\n }\n\n closeNode() {\n if (this.stack.length > 1) {\n return this.stack.pop();\n }\n // eslint-disable-next-line no-undefined\n return undefined;\n }\n\n closeAllNodes() {\n while (this.closeNode());\n }\n\n toJSON() {\n return JSON.stringify(this.rootNode, null, 4);\n }\n\n /**\n * @typedef { import(\"./html_renderer\").Renderer } Renderer\n * @param {Renderer} builder\n */\n walk(builder) {\n // this does not\n return this.constructor._walk(builder, this.rootNode);\n // this works\n // return TokenTree._walk(builder, this.rootNode);\n }\n\n /**\n * @param {Renderer} builder\n * @param {Node} node\n */\n static _walk(builder, node) {\n if (typeof node === \"string\") {\n builder.addText(node);\n } else if (node.children) {\n builder.openNode(node);\n node.children.forEach((child) => this._walk(builder, child));\n builder.closeNode(node);\n }\n return builder;\n }\n\n /**\n * @param {Node} node\n */\n static _collapse(node) {\n if (typeof node === \"string\") return;\n if (!node.children) return;\n\n if (node.children.every(el => typeof el === \"string\")) {\n // node.text = node.children.join(\"\");\n // delete node.children;\n node.children = [node.children.join(\"\")];\n } else {\n node.children.forEach((child) => {\n TokenTree._collapse(child);\n });\n }\n }\n}\n\n/**\n Currently this is all private API, but this is the minimal API necessary\n that an Emitter must implement to fully support the parser.\n\n Minimal interface:\n\n - addText(text)\n - __addSublanguage(emitter, subLanguageName)\n - startScope(scope)\n - endScope()\n - finalize()\n - toHTML()\n\n*/\n\n/**\n * @implements {Emitter}\n */\nclass TokenTreeEmitter extends TokenTree {\n /**\n * @param {*} options\n */\n constructor(options) {\n super();\n this.options = options;\n }\n\n /**\n * @param {string} text\n */\n addText(text) {\n if (text === \"\") { return; }\n\n this.add(text);\n }\n\n /** @param {string} scope */\n startScope(scope) {\n this.openNode(scope);\n }\n\n endScope() {\n this.closeNode();\n }\n\n /**\n * @param {Emitter & {root: DataNode}} emitter\n * @param {string} name\n */\n __addSublanguage(emitter, name) {\n /** @type DataNode */\n const node = emitter.root;\n if (name) node.scope = `language:${name}`;\n\n this.add(node);\n }\n\n toHTML() {\n const renderer = new HTMLRenderer(this, this.options);\n return renderer.value();\n }\n\n finalize() {\n this.closeAllNodes();\n return true;\n }\n}\n\n/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n if (!re) return null;\n if (typeof re === \"string\") return re;\n\n return re.source;\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction lookahead(re) {\n return concat('(?=', re, ')');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction anyNumberOfTimes(re) {\n return concat('(?:', re, ')*');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction optional(re) {\n return concat('(?:', re, ')?');\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n const joined = args.map((x) => source(x)).join(\"\");\n return joined;\n}\n\n/**\n * @param { Array } args\n * @returns {object}\n */\nfunction stripOptionsFromArgs(args) {\n const opts = args[args.length - 1];\n\n if (typeof opts === 'object' && opts.constructor === Object) {\n args.splice(args.length - 1, 1);\n return opts;\n } else {\n return {};\n }\n}\n\n/** @typedef { {capture?: boolean} } RegexEitherOptions */\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] | [...(RegExp | string)[], RegexEitherOptions]} args\n * @returns {string}\n */\nfunction either(...args) {\n /** @type { object & {capture?: boolean} } */\n const opts = stripOptionsFromArgs(args);\n const joined = '('\n + (opts.capture ? \"\" : \"?:\")\n + args.map((x) => source(x)).join(\"|\") + \")\";\n return joined;\n}\n\n/**\n * @param {RegExp | string} re\n * @returns {number}\n */\nfunction countMatchGroups(re) {\n return (new RegExp(re.toString() + '|')).exec('').length - 1;\n}\n\n/**\n * Does lexeme start with a regular expression match at the beginning\n * @param {RegExp} re\n * @param {string} lexeme\n */\nfunction startsWith(re, lexeme) {\n const match = re && re.exec(lexeme);\n return match && match.index === 0;\n}\n\n// BACKREF_RE matches an open parenthesis or backreference. To avoid\n// an incorrect parse, it additionally matches the following:\n// - [...] elements, where the meaning of parentheses and escapes change\n// - other escape sequences, so we do not misparse escape sequences as\n// interesting elements\n// - non-matching or lookahead parentheses, which do not capture. These\n// follow the '(' with a '?'.\nconst BACKREF_RE = /\\[(?:[^\\\\\\]]|\\\\.)*\\]|\\(\\??|\\\\([1-9][0-9]*)|\\\\./;\n\n// **INTERNAL** Not intended for outside usage\n// join logically computes regexps.join(separator), but fixes the\n// backreferences so they continue to match.\n// it also places each individual regular expression into it's own\n// match group, keeping track of the sequencing of those match groups\n// is currently an exercise for the caller. :-)\n/**\n * @param {(string | RegExp)[]} regexps\n * @param {{joinWith: string}} opts\n * @returns {string}\n */\nfunction _rewriteBackreferences(regexps, { joinWith }) {\n let numCaptures = 0;\n\n return regexps.map((regex) => {\n numCaptures += 1;\n const offset = numCaptures;\n let re = source(regex);\n let out = '';\n\n while (re.length > 0) {\n const match = BACKREF_RE.exec(re);\n if (!match) {\n out += re;\n break;\n }\n out += re.substring(0, match.index);\n re = re.substring(match.index + match[0].length);\n if (match[0][0] === '\\\\' && match[1]) {\n // Adjust the backreference.\n out += '\\\\' + String(Number(match[1]) + offset);\n } else {\n out += match[0];\n if (match[0] === '(') {\n numCaptures++;\n }\n }\n }\n return out;\n }).map(re => `(${re})`).join(joinWith);\n}\n\n/** @typedef {import('highlight.js').Mode} Mode */\n/** @typedef {import('highlight.js').ModeCallback} ModeCallback */\n\n// Common regexps\nconst MATCH_NOTHING_RE = /\\b\\B/;\nconst IDENT_RE = '[a-zA-Z]\\\\w*';\nconst UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\\\w*';\nconst NUMBER_RE = '\\\\b\\\\d+(\\\\.\\\\d+)?';\nconst C_NUMBER_RE = '(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)'; // 0x..., 0..., decimal, float\nconst BINARY_NUMBER_RE = '\\\\b(0b[01]+)'; // 0b...\nconst RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~';\n\n/**\n* @param { Partial & {binary?: string | RegExp} } opts\n*/\nconst SHEBANG = (opts = {}) => {\n const beginShebang = /^#![ ]*\\//;\n if (opts.binary) {\n opts.begin = concat(\n beginShebang,\n /.*\\b/,\n opts.binary,\n /\\b.*/);\n }\n return inherit$1({\n scope: 'meta',\n begin: beginShebang,\n end: /$/,\n relevance: 0,\n /** @type {ModeCallback} */\n \"on:begin\": (m, resp) => {\n if (m.index !== 0) resp.ignoreMatch();\n }\n }, opts);\n};\n\n// Common modes\nconst BACKSLASH_ESCAPE = {\n begin: '\\\\\\\\[\\\\s\\\\S]', relevance: 0\n};\nconst APOS_STRING_MODE = {\n scope: 'string',\n begin: '\\'',\n end: '\\'',\n illegal: '\\\\n',\n contains: [BACKSLASH_ESCAPE]\n};\nconst QUOTE_STRING_MODE = {\n scope: 'string',\n begin: '\"',\n end: '\"',\n illegal: '\\\\n',\n contains: [BACKSLASH_ESCAPE]\n};\nconst PHRASAL_WORDS_MODE = {\n begin: /\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b/\n};\n/**\n * Creates a comment mode\n *\n * @param {string | RegExp} begin\n * @param {string | RegExp} end\n * @param {Mode | {}} [modeOptions]\n * @returns {Partial}\n */\nconst COMMENT = function(begin, end, modeOptions = {}) {\n const mode = inherit$1(\n {\n scope: 'comment',\n begin,\n end,\n contains: []\n },\n modeOptions\n );\n mode.contains.push({\n scope: 'doctag',\n // hack to avoid the space from being included. the space is necessary to\n // match here to prevent the plain text rule below from gobbling up doctags\n begin: '[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)',\n end: /(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,\n excludeBegin: true,\n relevance: 0\n });\n const ENGLISH_WORD = either(\n // list of common 1 and 2 letter words in English\n \"I\",\n \"a\",\n \"is\",\n \"so\",\n \"us\",\n \"to\",\n \"at\",\n \"if\",\n \"in\",\n \"it\",\n \"on\",\n // note: this is not an exhaustive list of contractions, just popular ones\n /[A-Za-z]+['](d|ve|re|ll|t|s|n)/, // contractions - can't we'd they're let's, etc\n /[A-Za-z]+[-][a-z]+/, // `no-way`, etc.\n /[A-Za-z][a-z]{2,}/ // allow capitalized words at beginning of sentences\n );\n // looking like plain text, more likely to be a comment\n mode.contains.push(\n {\n // TODO: how to include \", (, ) without breaking grammars that use these for\n // comment delimiters?\n // begin: /[ ]+([()\"]?([A-Za-z'-]{3,}|is|a|I|so|us|[tT][oO]|at|if|in|it|on)[.]?[()\":]?([.][ ]|[ ]|\\))){3}/\n // ---\n\n // this tries to find sequences of 3 english words in a row (without any\n // \"programming\" type syntax) this gives us a strong signal that we've\n // TRULY found a comment - vs perhaps scanning with the wrong language.\n // It's possible to find something that LOOKS like the start of the\n // comment - but then if there is no readable text - good chance it is a\n // false match and not a comment.\n //\n // for a visual example please see:\n // https://github.com/highlightjs/highlight.js/issues/2827\n\n begin: concat(\n /[ ]+/, // necessary to prevent us gobbling up doctags like /* @author Bob Mcgill */\n '(',\n ENGLISH_WORD,\n /[.]?[:]?([.][ ]|[ ])/,\n '){3}') // look for 3 words in a row\n }\n );\n return mode;\n};\nconst C_LINE_COMMENT_MODE = COMMENT('//', '$');\nconst C_BLOCK_COMMENT_MODE = COMMENT('/\\\\*', '\\\\*/');\nconst HASH_COMMENT_MODE = COMMENT('#', '$');\nconst NUMBER_MODE = {\n scope: 'number',\n begin: NUMBER_RE,\n relevance: 0\n};\nconst C_NUMBER_MODE = {\n scope: 'number',\n begin: C_NUMBER_RE,\n relevance: 0\n};\nconst BINARY_NUMBER_MODE = {\n scope: 'number',\n begin: BINARY_NUMBER_RE,\n relevance: 0\n};\nconst REGEXP_MODE = {\n scope: \"regexp\",\n begin: /\\/(?=[^/\\n]*\\/)/,\n end: /\\/[gimuy]*/,\n contains: [\n BACKSLASH_ESCAPE,\n {\n begin: /\\[/,\n end: /\\]/,\n relevance: 0,\n contains: [BACKSLASH_ESCAPE]\n }\n ]\n};\nconst TITLE_MODE = {\n scope: 'title',\n begin: IDENT_RE,\n relevance: 0\n};\nconst UNDERSCORE_TITLE_MODE = {\n scope: 'title',\n begin: UNDERSCORE_IDENT_RE,\n relevance: 0\n};\nconst METHOD_GUARD = {\n // excludes method names from keyword processing\n begin: '\\\\.\\\\s*' + UNDERSCORE_IDENT_RE,\n relevance: 0\n};\n\n/**\n * Adds end same as begin mechanics to a mode\n *\n * Your mode must include at least a single () match group as that first match\n * group is what is used for comparison\n * @param {Partial} mode\n */\nconst END_SAME_AS_BEGIN = function(mode) {\n return Object.assign(mode,\n {\n /** @type {ModeCallback} */\n 'on:begin': (m, resp) => { resp.data._beginMatch = m[1]; },\n /** @type {ModeCallback} */\n 'on:end': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch(); }\n });\n};\n\nvar MODES = /*#__PURE__*/Object.freeze({\n __proto__: null,\n APOS_STRING_MODE: APOS_STRING_MODE,\n BACKSLASH_ESCAPE: BACKSLASH_ESCAPE,\n BINARY_NUMBER_MODE: BINARY_NUMBER_MODE,\n BINARY_NUMBER_RE: BINARY_NUMBER_RE,\n COMMENT: COMMENT,\n C_BLOCK_COMMENT_MODE: C_BLOCK_COMMENT_MODE,\n C_LINE_COMMENT_MODE: C_LINE_COMMENT_MODE,\n C_NUMBER_MODE: C_NUMBER_MODE,\n C_NUMBER_RE: C_NUMBER_RE,\n END_SAME_AS_BEGIN: END_SAME_AS_BEGIN,\n HASH_COMMENT_MODE: HASH_COMMENT_MODE,\n IDENT_RE: IDENT_RE,\n MATCH_NOTHING_RE: MATCH_NOTHING_RE,\n METHOD_GUARD: METHOD_GUARD,\n NUMBER_MODE: NUMBER_MODE,\n NUMBER_RE: NUMBER_RE,\n PHRASAL_WORDS_MODE: PHRASAL_WORDS_MODE,\n QUOTE_STRING_MODE: QUOTE_STRING_MODE,\n REGEXP_MODE: REGEXP_MODE,\n RE_STARTERS_RE: RE_STARTERS_RE,\n SHEBANG: SHEBANG,\n TITLE_MODE: TITLE_MODE,\n UNDERSCORE_IDENT_RE: UNDERSCORE_IDENT_RE,\n UNDERSCORE_TITLE_MODE: UNDERSCORE_TITLE_MODE\n});\n\n/**\n@typedef {import('highlight.js').CallbackResponse} CallbackResponse\n@typedef {import('highlight.js').CompilerExt} CompilerExt\n*/\n\n// Grammar extensions / plugins\n// See: https://github.com/highlightjs/highlight.js/issues/2833\n\n// Grammar extensions allow \"syntactic sugar\" to be added to the grammar modes\n// without requiring any underlying changes to the compiler internals.\n\n// `compileMatch` being the perfect small example of now allowing a grammar\n// author to write `match` when they desire to match a single expression rather\n// than being forced to use `begin`. The extension then just moves `match` into\n// `begin` when it runs. Ie, no features have been added, but we've just made\n// the experience of writing (and reading grammars) a little bit nicer.\n\n// ------\n\n// TODO: We need negative look-behind support to do this properly\n/**\n * Skip a match if it has a preceding dot\n *\n * This is used for `beginKeywords` to prevent matching expressions such as\n * `bob.keyword.do()`. The mode compiler automatically wires this up as a\n * special _internal_ 'on:begin' callback for modes with `beginKeywords`\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\nfunction skipIfHasPrecedingDot(match, response) {\n const before = match.input[match.index - 1];\n if (before === \".\") {\n response.ignoreMatch();\n }\n}\n\n/**\n *\n * @type {CompilerExt}\n */\nfunction scopeClassName(mode, _parent) {\n // eslint-disable-next-line no-undefined\n if (mode.className !== undefined) {\n mode.scope = mode.className;\n delete mode.className;\n }\n}\n\n/**\n * `beginKeywords` syntactic sugar\n * @type {CompilerExt}\n */\nfunction beginKeywords(mode, parent) {\n if (!parent) return;\n if (!mode.beginKeywords) return;\n\n // for languages with keywords that include non-word characters checking for\n // a word boundary is not sufficient, so instead we check for a word boundary\n // or whitespace - this does no harm in any case since our keyword engine\n // doesn't allow spaces in keywords anyways and we still check for the boundary\n // first\n mode.begin = '\\\\b(' + mode.beginKeywords.split(' ').join('|') + ')(?!\\\\.)(?=\\\\b|\\\\s)';\n mode.__beforeBegin = skipIfHasPrecedingDot;\n mode.keywords = mode.keywords || mode.beginKeywords;\n delete mode.beginKeywords;\n\n // prevents double relevance, the keywords themselves provide\n // relevance, the mode doesn't need to double it\n // eslint-disable-next-line no-undefined\n if (mode.relevance === undefined) mode.relevance = 0;\n}\n\n/**\n * Allow `illegal` to contain an array of illegal values\n * @type {CompilerExt}\n */\nfunction compileIllegal(mode, _parent) {\n if (!Array.isArray(mode.illegal)) return;\n\n mode.illegal = either(...mode.illegal);\n}\n\n/**\n * `match` to match a single expression for readability\n * @type {CompilerExt}\n */\nfunction compileMatch(mode, _parent) {\n if (!mode.match) return;\n if (mode.begin || mode.end) throw new Error(\"begin & end are not supported with match\");\n\n mode.begin = mode.match;\n delete mode.match;\n}\n\n/**\n * provides the default 1 relevance to all modes\n * @type {CompilerExt}\n */\nfunction compileRelevance(mode, _parent) {\n // eslint-disable-next-line no-undefined\n if (mode.relevance === undefined) mode.relevance = 1;\n}\n\n// allow beforeMatch to act as a \"qualifier\" for the match\n// the full match begin must be [beforeMatch][begin]\nconst beforeMatchExt = (mode, parent) => {\n if (!mode.beforeMatch) return;\n // starts conflicts with endsParent which we need to make sure the child\n // rule is not matched multiple times\n if (mode.starts) throw new Error(\"beforeMatch cannot be used with starts\");\n\n const originalMode = Object.assign({}, mode);\n Object.keys(mode).forEach((key) => { delete mode[key]; });\n\n mode.keywords = originalMode.keywords;\n mode.begin = concat(originalMode.beforeMatch, lookahead(originalMode.begin));\n mode.starts = {\n relevance: 0,\n contains: [\n Object.assign(originalMode, { endsParent: true })\n ]\n };\n mode.relevance = 0;\n\n delete originalMode.beforeMatch;\n};\n\n// keywords that should have no default relevance value\nconst COMMON_KEYWORDS = [\n 'of',\n 'and',\n 'for',\n 'in',\n 'not',\n 'or',\n 'if',\n 'then',\n 'parent', // common variable name\n 'list', // common variable name\n 'value' // common variable name\n];\n\nconst DEFAULT_KEYWORD_SCOPE = \"keyword\";\n\n/**\n * Given raw keywords from a language definition, compile them.\n *\n * @param {string | Record | Array} rawKeywords\n * @param {boolean} caseInsensitive\n */\nfunction compileKeywords(rawKeywords, caseInsensitive, scopeName = DEFAULT_KEYWORD_SCOPE) {\n /** @type {import(\"highlight.js/private\").KeywordDict} */\n const compiledKeywords = Object.create(null);\n\n // input can be a string of keywords, an array of keywords, or a object with\n // named keys representing scopeName (which can then point to a string or array)\n if (typeof rawKeywords === 'string') {\n compileList(scopeName, rawKeywords.split(\" \"));\n } else if (Array.isArray(rawKeywords)) {\n compileList(scopeName, rawKeywords);\n } else {\n Object.keys(rawKeywords).forEach(function(scopeName) {\n // collapse all our objects back into the parent object\n Object.assign(\n compiledKeywords,\n compileKeywords(rawKeywords[scopeName], caseInsensitive, scopeName)\n );\n });\n }\n return compiledKeywords;\n\n // ---\n\n /**\n * Compiles an individual list of keywords\n *\n * Ex: \"for if when while|5\"\n *\n * @param {string} scopeName\n * @param {Array} keywordList\n */\n function compileList(scopeName, keywordList) {\n if (caseInsensitive) {\n keywordList = keywordList.map(x => x.toLowerCase());\n }\n keywordList.forEach(function(keyword) {\n const pair = keyword.split('|');\n compiledKeywords[pair[0]] = [scopeName, scoreForKeyword(pair[0], pair[1])];\n });\n }\n}\n\n/**\n * Returns the proper score for a given keyword\n *\n * Also takes into account comment keywords, which will be scored 0 UNLESS\n * another score has been manually assigned.\n * @param {string} keyword\n * @param {string} [providedScore]\n */\nfunction scoreForKeyword(keyword, providedScore) {\n // manual scores always win over common keywords\n // so you can force a score of 1 if you really insist\n if (providedScore) {\n return Number(providedScore);\n }\n\n return commonKeyword(keyword) ? 0 : 1;\n}\n\n/**\n * Determines if a given keyword is common or not\n *\n * @param {string} keyword */\nfunction commonKeyword(keyword) {\n return COMMON_KEYWORDS.includes(keyword.toLowerCase());\n}\n\n/*\n\nFor the reasoning behind this please see:\nhttps://github.com/highlightjs/highlight.js/issues/2880#issuecomment-747275419\n\n*/\n\n/**\n * @type {Record}\n */\nconst seenDeprecations = {};\n\n/**\n * @param {string} message\n */\nconst error = (message) => {\n console.error(message);\n};\n\n/**\n * @param {string} message\n * @param {any} args\n */\nconst warn = (message, ...args) => {\n console.log(`WARN: ${message}`, ...args);\n};\n\n/**\n * @param {string} version\n * @param {string} message\n */\nconst deprecated = (version, message) => {\n if (seenDeprecations[`${version}/${message}`]) return;\n\n console.log(`Deprecated as of ${version}. ${message}`);\n seenDeprecations[`${version}/${message}`] = true;\n};\n\n/* eslint-disable no-throw-literal */\n\n/**\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n*/\n\nconst MultiClassError = new Error();\n\n/**\n * Renumbers labeled scope names to account for additional inner match\n * groups that otherwise would break everything.\n *\n * Lets say we 3 match scopes:\n *\n * { 1 => ..., 2 => ..., 3 => ... }\n *\n * So what we need is a clean match like this:\n *\n * (a)(b)(c) => [ \"a\", \"b\", \"c\" ]\n *\n * But this falls apart with inner match groups:\n *\n * (a)(((b)))(c) => [\"a\", \"b\", \"b\", \"b\", \"c\" ]\n *\n * Our scopes are now \"out of alignment\" and we're repeating `b` 3 times.\n * What needs to happen is the numbers are remapped:\n *\n * { 1 => ..., 2 => ..., 5 => ... }\n *\n * We also need to know that the ONLY groups that should be output\n * are 1, 2, and 5. This function handles this behavior.\n *\n * @param {CompiledMode} mode\n * @param {Array} regexes\n * @param {{key: \"beginScope\"|\"endScope\"}} opts\n */\nfunction remapScopeNames(mode, regexes, { key }) {\n let offset = 0;\n const scopeNames = mode[key];\n /** @type Record */\n const emit = {};\n /** @type Record */\n const positions = {};\n\n for (let i = 1; i <= regexes.length; i++) {\n positions[i + offset] = scopeNames[i];\n emit[i + offset] = true;\n offset += countMatchGroups(regexes[i - 1]);\n }\n // we use _emit to keep track of which match groups are \"top-level\" to avoid double\n // output from inside match groups\n mode[key] = positions;\n mode[key]._emit = emit;\n mode[key]._multi = true;\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction beginMultiClass(mode) {\n if (!Array.isArray(mode.begin)) return;\n\n if (mode.skip || mode.excludeBegin || mode.returnBegin) {\n error(\"skip, excludeBegin, returnBegin not compatible with beginScope: {}\");\n throw MultiClassError;\n }\n\n if (typeof mode.beginScope !== \"object\" || mode.beginScope === null) {\n error(\"beginScope must be object\");\n throw MultiClassError;\n }\n\n remapScopeNames(mode, mode.begin, { key: \"beginScope\" });\n mode.begin = _rewriteBackreferences(mode.begin, { joinWith: \"\" });\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction endMultiClass(mode) {\n if (!Array.isArray(mode.end)) return;\n\n if (mode.skip || mode.excludeEnd || mode.returnEnd) {\n error(\"skip, excludeEnd, returnEnd not compatible with endScope: {}\");\n throw MultiClassError;\n }\n\n if (typeof mode.endScope !== \"object\" || mode.endScope === null) {\n error(\"endScope must be object\");\n throw MultiClassError;\n }\n\n remapScopeNames(mode, mode.end, { key: \"endScope\" });\n mode.end = _rewriteBackreferences(mode.end, { joinWith: \"\" });\n}\n\n/**\n * this exists only to allow `scope: {}` to be used beside `match:`\n * Otherwise `beginScope` would necessary and that would look weird\n\n {\n match: [ /def/, /\\w+/ ]\n scope: { 1: \"keyword\" , 2: \"title\" }\n }\n\n * @param {CompiledMode} mode\n */\nfunction scopeSugar(mode) {\n if (mode.scope && typeof mode.scope === \"object\" && mode.scope !== null) {\n mode.beginScope = mode.scope;\n delete mode.scope;\n }\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction MultiClass(mode) {\n scopeSugar(mode);\n\n if (typeof mode.beginScope === \"string\") {\n mode.beginScope = { _wrap: mode.beginScope };\n }\n if (typeof mode.endScope === \"string\") {\n mode.endScope = { _wrap: mode.endScope };\n }\n\n beginMultiClass(mode);\n endMultiClass(mode);\n}\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').CompiledLanguage} CompiledLanguage\n*/\n\n// compilation\n\n/**\n * Compiles a language definition result\n *\n * Given the raw result of a language definition (Language), compiles this so\n * that it is ready for highlighting code.\n * @param {Language} language\n * @returns {CompiledLanguage}\n */\nfunction compileLanguage(language) {\n /**\n * Builds a regex with the case sensitivity of the current language\n *\n * @param {RegExp | string} value\n * @param {boolean} [global]\n */\n function langRe(value, global) {\n return new RegExp(\n source(value),\n 'm'\n + (language.case_insensitive ? 'i' : '')\n + (language.unicodeRegex ? 'u' : '')\n + (global ? 'g' : '')\n );\n }\n\n /**\n Stores multiple regular expressions and allows you to quickly search for\n them all in a string simultaneously - returning the first match. It does\n this by creating a huge (a|b|c) regex - each individual item wrapped with ()\n and joined by `|` - using match groups to track position. When a match is\n found checking which position in the array has content allows us to figure\n out which of the original regexes / match groups triggered the match.\n\n The match object itself (the result of `Regex.exec`) is returned but also\n enhanced by merging in any meta-data that was registered with the regex.\n This is how we keep track of which mode matched, and what type of rule\n (`illegal`, `begin`, end, etc).\n */\n class MultiRegex {\n constructor() {\n this.matchIndexes = {};\n // @ts-ignore\n this.regexes = [];\n this.matchAt = 1;\n this.position = 0;\n }\n\n // @ts-ignore\n addRule(re, opts) {\n opts.position = this.position++;\n // @ts-ignore\n this.matchIndexes[this.matchAt] = opts;\n this.regexes.push([opts, re]);\n this.matchAt += countMatchGroups(re) + 1;\n }\n\n compile() {\n if (this.regexes.length === 0) {\n // avoids the need to check length every time exec is called\n // @ts-ignore\n this.exec = () => null;\n }\n const terminators = this.regexes.map(el => el[1]);\n this.matcherRe = langRe(_rewriteBackreferences(terminators, { joinWith: '|' }), true);\n this.lastIndex = 0;\n }\n\n /** @param {string} s */\n exec(s) {\n this.matcherRe.lastIndex = this.lastIndex;\n const match = this.matcherRe.exec(s);\n if (!match) { return null; }\n\n // eslint-disable-next-line no-undefined\n const i = match.findIndex((el, i) => i > 0 && el !== undefined);\n // @ts-ignore\n const matchData = this.matchIndexes[i];\n // trim off any earlier non-relevant match groups (ie, the other regex\n // match groups that make up the multi-matcher)\n match.splice(0, i);\n\n return Object.assign(match, matchData);\n }\n }\n\n /*\n Created to solve the key deficiently with MultiRegex - there is no way to\n test for multiple matches at a single location. Why would we need to do\n that? In the future a more dynamic engine will allow certain matches to be\n ignored. An example: if we matched say the 3rd regex in a large group but\n decided to ignore it - we'd need to started testing again at the 4th\n regex... but MultiRegex itself gives us no real way to do that.\n\n So what this class creates MultiRegexs on the fly for whatever search\n position they are needed.\n\n NOTE: These additional MultiRegex objects are created dynamically. For most\n grammars most of the time we will never actually need anything more than the\n first MultiRegex - so this shouldn't have too much overhead.\n\n Say this is our search group, and we match regex3, but wish to ignore it.\n\n regex1 | regex2 | regex3 | regex4 | regex5 ' ie, startAt = 0\n\n What we need is a new MultiRegex that only includes the remaining\n possibilities:\n\n regex4 | regex5 ' ie, startAt = 3\n\n This class wraps all that complexity up in a simple API... `startAt` decides\n where in the array of expressions to start doing the matching. It\n auto-increments, so if a match is found at position 2, then startAt will be\n set to 3. If the end is reached startAt will return to 0.\n\n MOST of the time the parser will be setting startAt manually to 0.\n */\n class ResumableMultiRegex {\n constructor() {\n // @ts-ignore\n this.rules = [];\n // @ts-ignore\n this.multiRegexes = [];\n this.count = 0;\n\n this.lastIndex = 0;\n this.regexIndex = 0;\n }\n\n // @ts-ignore\n getMatcher(index) {\n if (this.multiRegexes[index]) return this.multiRegexes[index];\n\n const matcher = new MultiRegex();\n this.rules.slice(index).forEach(([re, opts]) => matcher.addRule(re, opts));\n matcher.compile();\n this.multiRegexes[index] = matcher;\n return matcher;\n }\n\n resumingScanAtSamePosition() {\n return this.regexIndex !== 0;\n }\n\n considerAll() {\n this.regexIndex = 0;\n }\n\n // @ts-ignore\n addRule(re, opts) {\n this.rules.push([re, opts]);\n if (opts.type === \"begin\") this.count++;\n }\n\n /** @param {string} s */\n exec(s) {\n const m = this.getMatcher(this.regexIndex);\n m.lastIndex = this.lastIndex;\n let result = m.exec(s);\n\n // The following is because we have no easy way to say \"resume scanning at the\n // existing position but also skip the current rule ONLY\". What happens is\n // all prior rules are also skipped which can result in matching the wrong\n // thing. Example of matching \"booger\":\n\n // our matcher is [string, \"booger\", number]\n //\n // ....booger....\n\n // if \"booger\" is ignored then we'd really need a regex to scan from the\n // SAME position for only: [string, number] but ignoring \"booger\" (if it\n // was the first match), a simple resume would scan ahead who knows how\n // far looking only for \"number\", ignoring potential string matches (or\n // future \"booger\" matches that might be valid.)\n\n // So what we do: We execute two matchers, one resuming at the same\n // position, but the second full matcher starting at the position after:\n\n // /--- resume first regex match here (for [number])\n // |/---- full match here for [string, \"booger\", number]\n // vv\n // ....booger....\n\n // Which ever results in a match first is then used. So this 3-4 step\n // process essentially allows us to say \"match at this position, excluding\n // a prior rule that was ignored\".\n //\n // 1. Match \"booger\" first, ignore. Also proves that [string] does non match.\n // 2. Resume matching for [number]\n // 3. Match at index + 1 for [string, \"booger\", number]\n // 4. If #2 and #3 result in matches, which came first?\n if (this.resumingScanAtSamePosition()) {\n if (result && result.index === this.lastIndex) ; else { // use the second matcher result\n const m2 = this.getMatcher(0);\n m2.lastIndex = this.lastIndex + 1;\n result = m2.exec(s);\n }\n }\n\n if (result) {\n this.regexIndex += result.position + 1;\n if (this.regexIndex === this.count) {\n // wrap-around to considering all matches again\n this.considerAll();\n }\n }\n\n return result;\n }\n }\n\n /**\n * Given a mode, builds a huge ResumableMultiRegex that can be used to walk\n * the content and find matches.\n *\n * @param {CompiledMode} mode\n * @returns {ResumableMultiRegex}\n */\n function buildModeRegex(mode) {\n const mm = new ResumableMultiRegex();\n\n mode.contains.forEach(term => mm.addRule(term.begin, { rule: term, type: \"begin\" }));\n\n if (mode.terminatorEnd) {\n mm.addRule(mode.terminatorEnd, { type: \"end\" });\n }\n if (mode.illegal) {\n mm.addRule(mode.illegal, { type: \"illegal\" });\n }\n\n return mm;\n }\n\n /** skip vs abort vs ignore\n *\n * @skip - The mode is still entered and exited normally (and contains rules apply),\n * but all content is held and added to the parent buffer rather than being\n * output when the mode ends. Mostly used with `sublanguage` to build up\n * a single large buffer than can be parsed by sublanguage.\n *\n * - The mode begin ands ends normally.\n * - Content matched is added to the parent mode buffer.\n * - The parser cursor is moved forward normally.\n *\n * @abort - A hack placeholder until we have ignore. Aborts the mode (as if it\n * never matched) but DOES NOT continue to match subsequent `contains`\n * modes. Abort is bad/suboptimal because it can result in modes\n * farther down not getting applied because an earlier rule eats the\n * content but then aborts.\n *\n * - The mode does not begin.\n * - Content matched by `begin` is added to the mode buffer.\n * - The parser cursor is moved forward accordingly.\n *\n * @ignore - Ignores the mode (as if it never matched) and continues to match any\n * subsequent `contains` modes. Ignore isn't technically possible with\n * the current parser implementation.\n *\n * - The mode does not begin.\n * - Content matched by `begin` is ignored.\n * - The parser cursor is not moved forward.\n */\n\n /**\n * Compiles an individual mode\n *\n * This can raise an error if the mode contains certain detectable known logic\n * issues.\n * @param {Mode} mode\n * @param {CompiledMode | null} [parent]\n * @returns {CompiledMode | never}\n */\n function compileMode(mode, parent) {\n const cmode = /** @type CompiledMode */ (mode);\n if (mode.isCompiled) return cmode;\n\n [\n scopeClassName,\n // do this early so compiler extensions generally don't have to worry about\n // the distinction between match/begin\n compileMatch,\n MultiClass,\n beforeMatchExt\n ].forEach(ext => ext(mode, parent));\n\n language.compilerExtensions.forEach(ext => ext(mode, parent));\n\n // __beforeBegin is considered private API, internal use only\n mode.__beforeBegin = null;\n\n [\n beginKeywords,\n // do this later so compiler extensions that come earlier have access to the\n // raw array if they wanted to perhaps manipulate it, etc.\n compileIllegal,\n // default to 1 relevance if not specified\n compileRelevance\n ].forEach(ext => ext(mode, parent));\n\n mode.isCompiled = true;\n\n let keywordPattern = null;\n if (typeof mode.keywords === \"object\" && mode.keywords.$pattern) {\n // we need a copy because keywords might be compiled multiple times\n // so we can't go deleting $pattern from the original on the first\n // pass\n mode.keywords = Object.assign({}, mode.keywords);\n keywordPattern = mode.keywords.$pattern;\n delete mode.keywords.$pattern;\n }\n keywordPattern = keywordPattern || /\\w+/;\n\n if (mode.keywords) {\n mode.keywords = compileKeywords(mode.keywords, language.case_insensitive);\n }\n\n cmode.keywordPatternRe = langRe(keywordPattern, true);\n\n if (parent) {\n if (!mode.begin) mode.begin = /\\B|\\b/;\n cmode.beginRe = langRe(cmode.begin);\n if (!mode.end && !mode.endsWithParent) mode.end = /\\B|\\b/;\n if (mode.end) cmode.endRe = langRe(cmode.end);\n cmode.terminatorEnd = source(cmode.end) || '';\n if (mode.endsWithParent && parent.terminatorEnd) {\n cmode.terminatorEnd += (mode.end ? '|' : '') + parent.terminatorEnd;\n }\n }\n if (mode.illegal) cmode.illegalRe = langRe(/** @type {RegExp | string} */ (mode.illegal));\n if (!mode.contains) mode.contains = [];\n\n mode.contains = [].concat(...mode.contains.map(function(c) {\n return expandOrCloneMode(c === 'self' ? mode : c);\n }));\n mode.contains.forEach(function(c) { compileMode(/** @type Mode */ (c), cmode); });\n\n if (mode.starts) {\n compileMode(mode.starts, parent);\n }\n\n cmode.matcher = buildModeRegex(cmode);\n return cmode;\n }\n\n if (!language.compilerExtensions) language.compilerExtensions = [];\n\n // self is not valid at the top-level\n if (language.contains && language.contains.includes('self')) {\n throw new Error(\"ERR: contains `self` is not supported at the top-level of a language. See documentation.\");\n }\n\n // we need a null object, which inherit will guarantee\n language.classNameAliases = inherit$1(language.classNameAliases || {});\n\n return compileMode(/** @type Mode */ (language));\n}\n\n/**\n * Determines if a mode has a dependency on it's parent or not\n *\n * If a mode does have a parent dependency then often we need to clone it if\n * it's used in multiple places so that each copy points to the correct parent,\n * where-as modes without a parent can often safely be re-used at the bottom of\n * a mode chain.\n *\n * @param {Mode | null} mode\n * @returns {boolean} - is there a dependency on the parent?\n * */\nfunction dependencyOnParent(mode) {\n if (!mode) return false;\n\n return mode.endsWithParent || dependencyOnParent(mode.starts);\n}\n\n/**\n * Expands a mode or clones it if necessary\n *\n * This is necessary for modes with parental dependenceis (see notes on\n * `dependencyOnParent`) and for nodes that have `variants` - which must then be\n * exploded into their own individual modes at compile time.\n *\n * @param {Mode} mode\n * @returns {Mode | Mode[]}\n * */\nfunction expandOrCloneMode(mode) {\n if (mode.variants && !mode.cachedVariants) {\n mode.cachedVariants = mode.variants.map(function(variant) {\n return inherit$1(mode, { variants: null }, variant);\n });\n }\n\n // EXPAND\n // if we have variants then essentially \"replace\" the mode with the variants\n // this happens in compileMode, where this function is called from\n if (mode.cachedVariants) {\n return mode.cachedVariants;\n }\n\n // CLONE\n // if we have dependencies on parents then we need a unique\n // instance of ourselves, so we can be reused with many\n // different parents without issue\n if (dependencyOnParent(mode)) {\n return inherit$1(mode, { starts: mode.starts ? inherit$1(mode.starts) : null });\n }\n\n if (Object.isFrozen(mode)) {\n return inherit$1(mode);\n }\n\n // no special dependency issues, just return ourselves\n return mode;\n}\n\nvar version = \"11.10.0\";\n\nclass HTMLInjectionError extends Error {\n constructor(reason, html) {\n super(reason);\n this.name = \"HTMLInjectionError\";\n this.html = html;\n }\n}\n\n/*\nSyntax highlighting with language autodetection.\nhttps://highlightjs.org/\n*/\n\n\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').CompiledScope} CompiledScope\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSApi} HLJSApi\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').PluginEvent} PluginEvent\n@typedef {import('highlight.js').HLJSOptions} HLJSOptions\n@typedef {import('highlight.js').LanguageFn} LanguageFn\n@typedef {import('highlight.js').HighlightedHTMLElement} HighlightedHTMLElement\n@typedef {import('highlight.js').BeforeHighlightContext} BeforeHighlightContext\n@typedef {import('highlight.js/private').MatchType} MatchType\n@typedef {import('highlight.js/private').KeywordData} KeywordData\n@typedef {import('highlight.js/private').EnhancedMatch} EnhancedMatch\n@typedef {import('highlight.js/private').AnnotatedError} AnnotatedError\n@typedef {import('highlight.js').AutoHighlightResult} AutoHighlightResult\n@typedef {import('highlight.js').HighlightOptions} HighlightOptions\n@typedef {import('highlight.js').HighlightResult} HighlightResult\n*/\n\n\nconst escape = escapeHTML;\nconst inherit = inherit$1;\nconst NO_MATCH = Symbol(\"nomatch\");\nconst MAX_KEYWORD_HITS = 7;\n\n/**\n * @param {any} hljs - object that is extended (legacy)\n * @returns {HLJSApi}\n */\nconst HLJS = function(hljs) {\n // Global internal variables used within the highlight.js library.\n /** @type {Record} */\n const languages = Object.create(null);\n /** @type {Record} */\n const aliases = Object.create(null);\n /** @type {HLJSPlugin[]} */\n const plugins = [];\n\n // safe/production mode - swallows more errors, tries to keep running\n // even if a single syntax or parse hits a fatal error\n let SAFE_MODE = true;\n const LANGUAGE_NOT_FOUND = \"Could not find the language '{}', did you forget to load/include a language module?\";\n /** @type {Language} */\n const PLAINTEXT_LANGUAGE = { disableAutodetect: true, name: 'Plain text', contains: [] };\n\n // Global options used when within external APIs. This is modified when\n // calling the `hljs.configure` function.\n /** @type HLJSOptions */\n let options = {\n ignoreUnescapedHTML: false,\n throwUnescapedHTML: false,\n noHighlightRe: /^(no-?highlight)$/i,\n languageDetectRe: /\\blang(?:uage)?-([\\w-]+)\\b/i,\n classPrefix: 'hljs-',\n cssSelector: 'pre code',\n languages: null,\n // beta configuration options, subject to change, welcome to discuss\n // https://github.com/highlightjs/highlight.js/issues/1086\n __emitter: TokenTreeEmitter\n };\n\n /* Utility functions */\n\n /**\n * Tests a language name to see if highlighting should be skipped\n * @param {string} languageName\n */\n function shouldNotHighlight(languageName) {\n return options.noHighlightRe.test(languageName);\n }\n\n /**\n * @param {HighlightedHTMLElement} block - the HTML element to determine language for\n */\n function blockLanguage(block) {\n let classes = block.className + ' ';\n\n classes += block.parentNode ? block.parentNode.className : '';\n\n // language-* takes precedence over non-prefixed class names.\n const match = options.languageDetectRe.exec(classes);\n if (match) {\n const language = getLanguage(match[1]);\n if (!language) {\n warn(LANGUAGE_NOT_FOUND.replace(\"{}\", match[1]));\n warn(\"Falling back to no-highlight mode for this block.\", block);\n }\n return language ? match[1] : 'no-highlight';\n }\n\n return classes\n .split(/\\s+/)\n .find((_class) => shouldNotHighlight(_class) || getLanguage(_class));\n }\n\n /**\n * Core highlighting function.\n *\n * OLD API\n * highlight(lang, code, ignoreIllegals, continuation)\n *\n * NEW API\n * highlight(code, {lang, ignoreIllegals})\n *\n * @param {string} codeOrLanguageName - the language to use for highlighting\n * @param {string | HighlightOptions} optionsOrCode - the code to highlight\n * @param {boolean} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n *\n * @returns {HighlightResult} Result - an object that represents the result\n * @property {string} language - the language name\n * @property {number} relevance - the relevance score\n * @property {string} value - the highlighted HTML code\n * @property {string} code - the original raw code\n * @property {CompiledMode} top - top of the current mode stack\n * @property {boolean} illegal - indicates whether any illegal matches were found\n */\n function highlight(codeOrLanguageName, optionsOrCode, ignoreIllegals) {\n let code = \"\";\n let languageName = \"\";\n if (typeof optionsOrCode === \"object\") {\n code = codeOrLanguageName;\n ignoreIllegals = optionsOrCode.ignoreIllegals;\n languageName = optionsOrCode.language;\n } else {\n // old API\n deprecated(\"10.7.0\", \"highlight(lang, code, ...args) has been deprecated.\");\n deprecated(\"10.7.0\", \"Please use highlight(code, options) instead.\\nhttps://github.com/highlightjs/highlight.js/issues/2277\");\n languageName = codeOrLanguageName;\n code = optionsOrCode;\n }\n\n // https://github.com/highlightjs/highlight.js/issues/3149\n // eslint-disable-next-line no-undefined\n if (ignoreIllegals === undefined) { ignoreIllegals = true; }\n\n /** @type {BeforeHighlightContext} */\n const context = {\n code,\n language: languageName\n };\n // the plugin can change the desired language or the code to be highlighted\n // just be changing the object it was passed\n fire(\"before:highlight\", context);\n\n // a before plugin can usurp the result completely by providing it's own\n // in which case we don't even need to call highlight\n const result = context.result\n ? context.result\n : _highlight(context.language, context.code, ignoreIllegals);\n\n result.code = context.code;\n // the plugin can change anything in result to suite it\n fire(\"after:highlight\", result);\n\n return result;\n }\n\n /**\n * private highlight that's used internally and does not fire callbacks\n *\n * @param {string} languageName - the language to use for highlighting\n * @param {string} codeToHighlight - the code to highlight\n * @param {boolean?} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n * @param {CompiledMode?} [continuation] - current continuation mode, if any\n * @returns {HighlightResult} - result of the highlight operation\n */\n function _highlight(languageName, codeToHighlight, ignoreIllegals, continuation) {\n const keywordHits = Object.create(null);\n\n /**\n * Return keyword data if a match is a keyword\n * @param {CompiledMode} mode - current mode\n * @param {string} matchText - the textual match\n * @returns {KeywordData | false}\n */\n function keywordData(mode, matchText) {\n return mode.keywords[matchText];\n }\n\n function processKeywords() {\n if (!top.keywords) {\n emitter.addText(modeBuffer);\n return;\n }\n\n let lastIndex = 0;\n top.keywordPatternRe.lastIndex = 0;\n let match = top.keywordPatternRe.exec(modeBuffer);\n let buf = \"\";\n\n while (match) {\n buf += modeBuffer.substring(lastIndex, match.index);\n const word = language.case_insensitive ? match[0].toLowerCase() : match[0];\n const data = keywordData(top, word);\n if (data) {\n const [kind, keywordRelevance] = data;\n emitter.addText(buf);\n buf = \"\";\n\n keywordHits[word] = (keywordHits[word] || 0) + 1;\n if (keywordHits[word] <= MAX_KEYWORD_HITS) relevance += keywordRelevance;\n if (kind.startsWith(\"_\")) {\n // _ implied for relevance only, do not highlight\n // by applying a class name\n buf += match[0];\n } else {\n const cssClass = language.classNameAliases[kind] || kind;\n emitKeyword(match[0], cssClass);\n }\n } else {\n buf += match[0];\n }\n lastIndex = top.keywordPatternRe.lastIndex;\n match = top.keywordPatternRe.exec(modeBuffer);\n }\n buf += modeBuffer.substring(lastIndex);\n emitter.addText(buf);\n }\n\n function processSubLanguage() {\n if (modeBuffer === \"\") return;\n /** @type HighlightResult */\n let result = null;\n\n if (typeof top.subLanguage === 'string') {\n if (!languages[top.subLanguage]) {\n emitter.addText(modeBuffer);\n return;\n }\n result = _highlight(top.subLanguage, modeBuffer, true, continuations[top.subLanguage]);\n continuations[top.subLanguage] = /** @type {CompiledMode} */ (result._top);\n } else {\n result = highlightAuto(modeBuffer, top.subLanguage.length ? top.subLanguage : null);\n }\n\n // Counting embedded language score towards the host language may be disabled\n // with zeroing the containing mode relevance. Use case in point is Markdown that\n // allows XML everywhere and makes every XML snippet to have a much larger Markdown\n // score.\n if (top.relevance > 0) {\n relevance += result.relevance;\n }\n emitter.__addSublanguage(result._emitter, result.language);\n }\n\n function processBuffer() {\n if (top.subLanguage != null) {\n processSubLanguage();\n } else {\n processKeywords();\n }\n modeBuffer = '';\n }\n\n /**\n * @param {string} text\n * @param {string} scope\n */\n function emitKeyword(keyword, scope) {\n if (keyword === \"\") return;\n\n emitter.startScope(scope);\n emitter.addText(keyword);\n emitter.endScope();\n }\n\n /**\n * @param {CompiledScope} scope\n * @param {RegExpMatchArray} match\n */\n function emitMultiClass(scope, match) {\n let i = 1;\n const max = match.length - 1;\n while (i <= max) {\n if (!scope._emit[i]) { i++; continue; }\n const klass = language.classNameAliases[scope[i]] || scope[i];\n const text = match[i];\n if (klass) {\n emitKeyword(text, klass);\n } else {\n modeBuffer = text;\n processKeywords();\n modeBuffer = \"\";\n }\n i++;\n }\n }\n\n /**\n * @param {CompiledMode} mode - new mode to start\n * @param {RegExpMatchArray} match\n */\n function startNewMode(mode, match) {\n if (mode.scope && typeof mode.scope === \"string\") {\n emitter.openNode(language.classNameAliases[mode.scope] || mode.scope);\n }\n if (mode.beginScope) {\n // beginScope just wraps the begin match itself in a scope\n if (mode.beginScope._wrap) {\n emitKeyword(modeBuffer, language.classNameAliases[mode.beginScope._wrap] || mode.beginScope._wrap);\n modeBuffer = \"\";\n } else if (mode.beginScope._multi) {\n // at this point modeBuffer should just be the match\n emitMultiClass(mode.beginScope, match);\n modeBuffer = \"\";\n }\n }\n\n top = Object.create(mode, { parent: { value: top } });\n return top;\n }\n\n /**\n * @param {CompiledMode } mode - the mode to potentially end\n * @param {RegExpMatchArray} match - the latest match\n * @param {string} matchPlusRemainder - match plus remainder of content\n * @returns {CompiledMode | void} - the next mode, or if void continue on in current mode\n */\n function endOfMode(mode, match, matchPlusRemainder) {\n let matched = startsWith(mode.endRe, matchPlusRemainder);\n\n if (matched) {\n if (mode[\"on:end\"]) {\n const resp = new Response(mode);\n mode[\"on:end\"](match, resp);\n if (resp.isMatchIgnored) matched = false;\n }\n\n if (matched) {\n while (mode.endsParent && mode.parent) {\n mode = mode.parent;\n }\n return mode;\n }\n }\n // even if on:end fires an `ignore` it's still possible\n // that we might trigger the end node because of a parent mode\n if (mode.endsWithParent) {\n return endOfMode(mode.parent, match, matchPlusRemainder);\n }\n }\n\n /**\n * Handle matching but then ignoring a sequence of text\n *\n * @param {string} lexeme - string containing full match text\n */\n function doIgnore(lexeme) {\n if (top.matcher.regexIndex === 0) {\n // no more regexes to potentially match here, so we move the cursor forward one\n // space\n modeBuffer += lexeme[0];\n return 1;\n } else {\n // no need to move the cursor, we still have additional regexes to try and\n // match at this very spot\n resumeScanAtSamePosition = true;\n return 0;\n }\n }\n\n /**\n * Handle the start of a new potential mode match\n *\n * @param {EnhancedMatch} match - the current match\n * @returns {number} how far to advance the parse cursor\n */\n function doBeginMatch(match) {\n const lexeme = match[0];\n const newMode = match.rule;\n\n const resp = new Response(newMode);\n // first internal before callbacks, then the public ones\n const beforeCallbacks = [newMode.__beforeBegin, newMode[\"on:begin\"]];\n for (const cb of beforeCallbacks) {\n if (!cb) continue;\n cb(match, resp);\n if (resp.isMatchIgnored) return doIgnore(lexeme);\n }\n\n if (newMode.skip) {\n modeBuffer += lexeme;\n } else {\n if (newMode.excludeBegin) {\n modeBuffer += lexeme;\n }\n processBuffer();\n if (!newMode.returnBegin && !newMode.excludeBegin) {\n modeBuffer = lexeme;\n }\n }\n startNewMode(newMode, match);\n return newMode.returnBegin ? 0 : lexeme.length;\n }\n\n /**\n * Handle the potential end of mode\n *\n * @param {RegExpMatchArray} match - the current match\n */\n function doEndMatch(match) {\n const lexeme = match[0];\n const matchPlusRemainder = codeToHighlight.substring(match.index);\n\n const endMode = endOfMode(top, match, matchPlusRemainder);\n if (!endMode) { return NO_MATCH; }\n\n const origin = top;\n if (top.endScope && top.endScope._wrap) {\n processBuffer();\n emitKeyword(lexeme, top.endScope._wrap);\n } else if (top.endScope && top.endScope._multi) {\n processBuffer();\n emitMultiClass(top.endScope, match);\n } else if (origin.skip) {\n modeBuffer += lexeme;\n } else {\n if (!(origin.returnEnd || origin.excludeEnd)) {\n modeBuffer += lexeme;\n }\n processBuffer();\n if (origin.excludeEnd) {\n modeBuffer = lexeme;\n }\n }\n do {\n if (top.scope) {\n emitter.closeNode();\n }\n if (!top.skip && !top.subLanguage) {\n relevance += top.relevance;\n }\n top = top.parent;\n } while (top !== endMode.parent);\n if (endMode.starts) {\n startNewMode(endMode.starts, match);\n }\n return origin.returnEnd ? 0 : lexeme.length;\n }\n\n function processContinuations() {\n const list = [];\n for (let current = top; current !== language; current = current.parent) {\n if (current.scope) {\n list.unshift(current.scope);\n }\n }\n list.forEach(item => emitter.openNode(item));\n }\n\n /** @type {{type?: MatchType, index?: number, rule?: Mode}}} */\n let lastMatch = {};\n\n /**\n * Process an individual match\n *\n * @param {string} textBeforeMatch - text preceding the match (since the last match)\n * @param {EnhancedMatch} [match] - the match itself\n */\n function processLexeme(textBeforeMatch, match) {\n const lexeme = match && match[0];\n\n // add non-matched text to the current mode buffer\n modeBuffer += textBeforeMatch;\n\n if (lexeme == null) {\n processBuffer();\n return 0;\n }\n\n // we've found a 0 width match and we're stuck, so we need to advance\n // this happens when we have badly behaved rules that have optional matchers to the degree that\n // sometimes they can end up matching nothing at all\n // Ref: https://github.com/highlightjs/highlight.js/issues/2140\n if (lastMatch.type === \"begin\" && match.type === \"end\" && lastMatch.index === match.index && lexeme === \"\") {\n // spit the \"skipped\" character that our regex choked on back into the output sequence\n modeBuffer += codeToHighlight.slice(match.index, match.index + 1);\n if (!SAFE_MODE) {\n /** @type {AnnotatedError} */\n const err = new Error(`0 width match regex (${languageName})`);\n err.languageName = languageName;\n err.badRule = lastMatch.rule;\n throw err;\n }\n return 1;\n }\n lastMatch = match;\n\n if (match.type === \"begin\") {\n return doBeginMatch(match);\n } else if (match.type === \"illegal\" && !ignoreIllegals) {\n // illegal match, we do not continue processing\n /** @type {AnnotatedError} */\n const err = new Error('Illegal lexeme \"' + lexeme + '\" for mode \"' + (top.scope || '') + '\"');\n err.mode = top;\n throw err;\n } else if (match.type === \"end\") {\n const processed = doEndMatch(match);\n if (processed !== NO_MATCH) {\n return processed;\n }\n }\n\n // edge case for when illegal matches $ (end of line) which is technically\n // a 0 width match but not a begin/end match so it's not caught by the\n // first handler (when ignoreIllegals is true)\n if (match.type === \"illegal\" && lexeme === \"\") {\n // advance so we aren't stuck in an infinite loop\n return 1;\n }\n\n // infinite loops are BAD, this is a last ditch catch all. if we have a\n // decent number of iterations yet our index (cursor position in our\n // parsing) still 3x behind our index then something is very wrong\n // so we bail\n if (iterations > 100000 && iterations > match.index * 3) {\n const err = new Error('potential infinite loop, way more iterations than matches');\n throw err;\n }\n\n /*\n Why might be find ourselves here? An potential end match that was\n triggered but could not be completed. IE, `doEndMatch` returned NO_MATCH.\n (this could be because a callback requests the match be ignored, etc)\n\n This causes no real harm other than stopping a few times too many.\n */\n\n modeBuffer += lexeme;\n return lexeme.length;\n }\n\n const language = getLanguage(languageName);\n if (!language) {\n error(LANGUAGE_NOT_FOUND.replace(\"{}\", languageName));\n throw new Error('Unknown language: \"' + languageName + '\"');\n }\n\n const md = compileLanguage(language);\n let result = '';\n /** @type {CompiledMode} */\n let top = continuation || md;\n /** @type Record */\n const continuations = {}; // keep continuations for sub-languages\n const emitter = new options.__emitter(options);\n processContinuations();\n let modeBuffer = '';\n let relevance = 0;\n let index = 0;\n let iterations = 0;\n let resumeScanAtSamePosition = false;\n\n try {\n if (!language.__emitTokens) {\n top.matcher.considerAll();\n\n for (;;) {\n iterations++;\n if (resumeScanAtSamePosition) {\n // only regexes not matched previously will now be\n // considered for a potential match\n resumeScanAtSamePosition = false;\n } else {\n top.matcher.considerAll();\n }\n top.matcher.lastIndex = index;\n\n const match = top.matcher.exec(codeToHighlight);\n // console.log(\"match\", match[0], match.rule && match.rule.begin)\n\n if (!match) break;\n\n const beforeMatch = codeToHighlight.substring(index, match.index);\n const processedCount = processLexeme(beforeMatch, match);\n index = match.index + processedCount;\n }\n processLexeme(codeToHighlight.substring(index));\n } else {\n language.__emitTokens(codeToHighlight, emitter);\n }\n\n emitter.finalize();\n result = emitter.toHTML();\n\n return {\n language: languageName,\n value: result,\n relevance,\n illegal: false,\n _emitter: emitter,\n _top: top\n };\n } catch (err) {\n if (err.message && err.message.includes('Illegal')) {\n return {\n language: languageName,\n value: escape(codeToHighlight),\n illegal: true,\n relevance: 0,\n _illegalBy: {\n message: err.message,\n index,\n context: codeToHighlight.slice(index - 100, index + 100),\n mode: err.mode,\n resultSoFar: result\n },\n _emitter: emitter\n };\n } else if (SAFE_MODE) {\n return {\n language: languageName,\n value: escape(codeToHighlight),\n illegal: false,\n relevance: 0,\n errorRaised: err,\n _emitter: emitter,\n _top: top\n };\n } else {\n throw err;\n }\n }\n }\n\n /**\n * returns a valid highlight result, without actually doing any actual work,\n * auto highlight starts with this and it's possible for small snippets that\n * auto-detection may not find a better match\n * @param {string} code\n * @returns {HighlightResult}\n */\n function justTextHighlightResult(code) {\n const result = {\n value: escape(code),\n illegal: false,\n relevance: 0,\n _top: PLAINTEXT_LANGUAGE,\n _emitter: new options.__emitter(options)\n };\n result._emitter.addText(code);\n return result;\n }\n\n /**\n Highlighting with language detection. Accepts a string with the code to\n highlight. Returns an object with the following properties:\n\n - language (detected language)\n - relevance (int)\n - value (an HTML string with highlighting markup)\n - secondBest (object with the same structure for second-best heuristically\n detected language, may be absent)\n\n @param {string} code\n @param {Array} [languageSubset]\n @returns {AutoHighlightResult}\n */\n function highlightAuto(code, languageSubset) {\n languageSubset = languageSubset || options.languages || Object.keys(languages);\n const plaintext = justTextHighlightResult(code);\n\n const results = languageSubset.filter(getLanguage).filter(autoDetection).map(name =>\n _highlight(name, code, false)\n );\n results.unshift(plaintext); // plaintext is always an option\n\n const sorted = results.sort((a, b) => {\n // sort base on relevance\n if (a.relevance !== b.relevance) return b.relevance - a.relevance;\n\n // always award the tie to the base language\n // ie if C++ and Arduino are tied, it's more likely to be C++\n if (a.language && b.language) {\n if (getLanguage(a.language).supersetOf === b.language) {\n return 1;\n } else if (getLanguage(b.language).supersetOf === a.language) {\n return -1;\n }\n }\n\n // otherwise say they are equal, which has the effect of sorting on\n // relevance while preserving the original ordering - which is how ties\n // have historically been settled, ie the language that comes first always\n // wins in the case of a tie\n return 0;\n });\n\n const [best, secondBest] = sorted;\n\n /** @type {AutoHighlightResult} */\n const result = best;\n result.secondBest = secondBest;\n\n return result;\n }\n\n /**\n * Builds new class name for block given the language name\n *\n * @param {HTMLElement} element\n * @param {string} [currentLang]\n * @param {string} [resultLang]\n */\n function updateClassName(element, currentLang, resultLang) {\n const language = (currentLang && aliases[currentLang]) || resultLang;\n\n element.classList.add(\"hljs\");\n element.classList.add(`language-${language}`);\n }\n\n /**\n * Applies highlighting to a DOM node containing code.\n *\n * @param {HighlightedHTMLElement} element - the HTML element to highlight\n */\n function highlightElement(element) {\n /** @type HTMLElement */\n let node = null;\n const language = blockLanguage(element);\n\n if (shouldNotHighlight(language)) return;\n\n fire(\"before:highlightElement\",\n { el: element, language });\n\n if (element.dataset.highlighted) {\n console.log(\"Element previously highlighted. To highlight again, first unset `dataset.highlighted`.\", element);\n return;\n }\n\n // we should be all text, no child nodes (unescaped HTML) - this is possibly\n // an HTML injection attack - it's likely too late if this is already in\n // production (the code has likely already done its damage by the time\n // we're seeing it)... but we yell loudly about this so that hopefully it's\n // more likely to be caught in development before making it to production\n if (element.children.length > 0) {\n if (!options.ignoreUnescapedHTML) {\n console.warn(\"One of your code blocks includes unescaped HTML. This is a potentially serious security risk.\");\n console.warn(\"https://github.com/highlightjs/highlight.js/wiki/security\");\n console.warn(\"The element with unescaped HTML:\");\n console.warn(element);\n }\n if (options.throwUnescapedHTML) {\n const err = new HTMLInjectionError(\n \"One of your code blocks includes unescaped HTML.\",\n element.innerHTML\n );\n throw err;\n }\n }\n\n node = element;\n const text = node.textContent;\n const result = language ? highlight(text, { language, ignoreIllegals: true }) : highlightAuto(text);\n\n element.innerHTML = result.value;\n element.dataset.highlighted = \"yes\";\n updateClassName(element, language, result.language);\n element.result = {\n language: result.language,\n // TODO: remove with version 11.0\n re: result.relevance,\n relevance: result.relevance\n };\n if (result.secondBest) {\n element.secondBest = {\n language: result.secondBest.language,\n relevance: result.secondBest.relevance\n };\n }\n\n fire(\"after:highlightElement\", { el: element, result, text });\n }\n\n /**\n * Updates highlight.js global options with the passed options\n *\n * @param {Partial} userOptions\n */\n function configure(userOptions) {\n options = inherit(options, userOptions);\n }\n\n // TODO: remove v12, deprecated\n const initHighlighting = () => {\n highlightAll();\n deprecated(\"10.6.0\", \"initHighlighting() deprecated. Use highlightAll() now.\");\n };\n\n // TODO: remove v12, deprecated\n function initHighlightingOnLoad() {\n highlightAll();\n deprecated(\"10.6.0\", \"initHighlightingOnLoad() deprecated. Use highlightAll() now.\");\n }\n\n let wantsHighlight = false;\n\n /**\n * auto-highlights all pre>code elements on the page\n */\n function highlightAll() {\n // if we are called too early in the loading process\n if (document.readyState === \"loading\") {\n wantsHighlight = true;\n return;\n }\n\n const blocks = document.querySelectorAll(options.cssSelector);\n blocks.forEach(highlightElement);\n }\n\n function boot() {\n // if a highlight was requested before DOM was loaded, do now\n if (wantsHighlight) highlightAll();\n }\n\n // make sure we are in the browser environment\n if (typeof window !== 'undefined' && window.addEventListener) {\n window.addEventListener('DOMContentLoaded', boot, false);\n }\n\n /**\n * Register a language grammar module\n *\n * @param {string} languageName\n * @param {LanguageFn} languageDefinition\n */\n function registerLanguage(languageName, languageDefinition) {\n let lang = null;\n try {\n lang = languageDefinition(hljs);\n } catch (error$1) {\n error(\"Language definition for '{}' could not be registered.\".replace(\"{}\", languageName));\n // hard or soft error\n if (!SAFE_MODE) { throw error$1; } else { error(error$1); }\n // languages that have serious errors are replaced with essentially a\n // \"plaintext\" stand-in so that the code blocks will still get normal\n // css classes applied to them - and one bad language won't break the\n // entire highlighter\n lang = PLAINTEXT_LANGUAGE;\n }\n // give it a temporary name if it doesn't have one in the meta-data\n if (!lang.name) lang.name = languageName;\n languages[languageName] = lang;\n lang.rawDefinition = languageDefinition.bind(null, hljs);\n\n if (lang.aliases) {\n registerAliases(lang.aliases, { languageName });\n }\n }\n\n /**\n * Remove a language grammar module\n *\n * @param {string} languageName\n */\n function unregisterLanguage(languageName) {\n delete languages[languageName];\n for (const alias of Object.keys(aliases)) {\n if (aliases[alias] === languageName) {\n delete aliases[alias];\n }\n }\n }\n\n /**\n * @returns {string[]} List of language internal names\n */\n function listLanguages() {\n return Object.keys(languages);\n }\n\n /**\n * @param {string} name - name of the language to retrieve\n * @returns {Language | undefined}\n */\n function getLanguage(name) {\n name = (name || '').toLowerCase();\n return languages[name] || languages[aliases[name]];\n }\n\n /**\n *\n * @param {string|string[]} aliasList - single alias or list of aliases\n * @param {{languageName: string}} opts\n */\n function registerAliases(aliasList, { languageName }) {\n if (typeof aliasList === 'string') {\n aliasList = [aliasList];\n }\n aliasList.forEach(alias => { aliases[alias.toLowerCase()] = languageName; });\n }\n\n /**\n * Determines if a given language has auto-detection enabled\n * @param {string} name - name of the language\n */\n function autoDetection(name) {\n const lang = getLanguage(name);\n return lang && !lang.disableAutodetect;\n }\n\n /**\n * Upgrades the old highlightBlock plugins to the new\n * highlightElement API\n * @param {HLJSPlugin} plugin\n */\n function upgradePluginAPI(plugin) {\n // TODO: remove with v12\n if (plugin[\"before:highlightBlock\"] && !plugin[\"before:highlightElement\"]) {\n plugin[\"before:highlightElement\"] = (data) => {\n plugin[\"before:highlightBlock\"](\n Object.assign({ block: data.el }, data)\n );\n };\n }\n if (plugin[\"after:highlightBlock\"] && !plugin[\"after:highlightElement\"]) {\n plugin[\"after:highlightElement\"] = (data) => {\n plugin[\"after:highlightBlock\"](\n Object.assign({ block: data.el }, data)\n );\n };\n }\n }\n\n /**\n * @param {HLJSPlugin} plugin\n */\n function addPlugin(plugin) {\n upgradePluginAPI(plugin);\n plugins.push(plugin);\n }\n\n /**\n * @param {HLJSPlugin} plugin\n */\n function removePlugin(plugin) {\n const index = plugins.indexOf(plugin);\n if (index !== -1) {\n plugins.splice(index, 1);\n }\n }\n\n /**\n *\n * @param {PluginEvent} event\n * @param {any} args\n */\n function fire(event, args) {\n const cb = event;\n plugins.forEach(function(plugin) {\n if (plugin[cb]) {\n plugin[cb](args);\n }\n });\n }\n\n /**\n * DEPRECATED\n * @param {HighlightedHTMLElement} el\n */\n function deprecateHighlightBlock(el) {\n deprecated(\"10.7.0\", \"highlightBlock will be removed entirely in v12.0\");\n deprecated(\"10.7.0\", \"Please use highlightElement now.\");\n\n return highlightElement(el);\n }\n\n /* Interface definition */\n Object.assign(hljs, {\n highlight,\n highlightAuto,\n highlightAll,\n highlightElement,\n // TODO: Remove with v12 API\n highlightBlock: deprecateHighlightBlock,\n configure,\n initHighlighting,\n initHighlightingOnLoad,\n registerLanguage,\n unregisterLanguage,\n listLanguages,\n getLanguage,\n registerAliases,\n autoDetection,\n inherit,\n addPlugin,\n removePlugin\n });\n\n hljs.debugMode = function() { SAFE_MODE = false; };\n hljs.safeMode = function() { SAFE_MODE = true; };\n hljs.versionString = version;\n\n hljs.regex = {\n concat: concat,\n lookahead: lookahead,\n either: either,\n optional: optional,\n anyNumberOfTimes: anyNumberOfTimes\n };\n\n for (const key in MODES) {\n // @ts-ignore\n if (typeof MODES[key] === \"object\") {\n // @ts-ignore\n deepFreeze(MODES[key]);\n }\n }\n\n // merge all the modes/regexes into our main object\n Object.assign(hljs, MODES);\n\n return hljs;\n};\n\n// Other names for the variable may break build script\nconst highlight = HLJS({});\n\n// returns a new instance of the highlighter to be used for extensions\n// check https://github.com/wooorm/lowlight/issues/47\nhighlight.newInstance = () => HLJS({});\n\nmodule.exports = highlight;\nhighlight.HighlightJS = highlight;\nhighlight.default = highlight;\n","// Process block-level custom containers\n//\nexport default function container_plugin (md, name, options) {\n // Second param may be useful if you decide\n // to increase minimal allowed marker length\n function validateDefault (params/*, markup */) {\n return params.trim().split(' ', 2)[0] === name\n }\n\n function renderDefault (tokens, idx, _options, env, slf) {\n // add a class to the opening tag\n if (tokens[idx].nesting === 1) {\n tokens[idx].attrJoin('class', name)\n }\n\n return slf.renderToken(tokens, idx, _options, env, slf)\n }\n\n options = options || {}\n\n const min_markers = 3\n const marker_str = options.marker || ':'\n const marker_char = marker_str.charCodeAt(0)\n const marker_len = marker_str.length\n const validate = options.validate || validateDefault\n const render = options.render || renderDefault\n\n function container (state, startLine, endLine, silent) {\n let pos\n let auto_closed = false\n let start = state.bMarks[startLine] + state.tShift[startLine]\n let max = state.eMarks[startLine]\n\n // Check out the first character quickly,\n // this should filter out most of non-containers\n //\n if (marker_char !== state.src.charCodeAt(start)) { return false }\n\n // Check out the rest of the marker string\n //\n for (pos = start + 1; pos <= max; pos++) {\n if (marker_str[(pos - start) % marker_len] !== state.src[pos]) {\n break\n }\n }\n\n const marker_count = Math.floor((pos - start) / marker_len)\n if (marker_count < min_markers) { return false }\n pos -= (pos - start) % marker_len\n\n const markup = state.src.slice(start, pos)\n const params = state.src.slice(pos, max)\n if (!validate(params, markup)) { return false }\n\n // Since start is found, we can report success here in validation mode\n //\n if (silent) { return true }\n\n // Search for the end of the block\n //\n let nextLine = startLine\n\n for (;;) {\n nextLine++\n if (nextLine >= endLine) {\n // unclosed block should be autoclosed by end of document.\n // also block seems to be autoclosed by end of parent\n break\n }\n\n start = state.bMarks[nextLine] + state.tShift[nextLine]\n max = state.eMarks[nextLine]\n\n if (start < max && state.sCount[nextLine] < state.blkIndent) {\n // non-empty line with negative indent should stop the list:\n // - ```\n // test\n break\n }\n\n if (marker_char !== state.src.charCodeAt(start)) { continue }\n\n if (state.sCount[nextLine] - state.blkIndent >= 4) {\n // closing fence should be indented less than 4 spaces\n continue\n }\n\n for (pos = start + 1; pos <= max; pos++) {\n if (marker_str[(pos - start) % marker_len] !== state.src[pos]) {\n break\n }\n }\n\n // closing code fence must be at least as long as the opening one\n if (Math.floor((pos - start) / marker_len) < marker_count) { continue }\n\n // make sure tail has spaces only\n pos -= (pos - start) % marker_len\n pos = state.skipSpaces(pos)\n\n if (pos < max) { continue }\n\n // found!\n auto_closed = true\n break\n }\n\n const old_parent = state.parentType\n const old_line_max = state.lineMax\n state.parentType = 'container'\n\n // this will prevent lazy continuations from ever going past our end marker\n state.lineMax = nextLine\n\n const token_o = state.push('container_' + name + '_open', 'div', 1)\n token_o.markup = markup\n token_o.block = true\n token_o.info = params\n token_o.map = [startLine, nextLine]\n\n state.md.block.tokenize(state, startLine + 1, nextLine)\n\n const token_c = state.push('container_' + name + '_close', 'div', -1)\n token_c.markup = state.src.slice(start, pos)\n token_c.block = true\n\n state.parentType = old_parent\n state.lineMax = old_line_max\n state.line = nextLine + (auto_closed ? 1 : 0)\n\n return true\n }\n\n md.block.ruler.before('fence', 'container_' + name, container, {\n alt: ['paragraph', 'reference', 'blockquote', 'list']\n })\n md.renderer.rules['container_' + name + '_open'] = render\n md.renderer.rules['container_' + name + '_close'] = render\n};\n","import { apiUrl } from '@/config';\nimport type { Blob, Guid } from './types';\nimport { ref, type Ref } from 'vue';\n\nconst blobUrl = `${apiUrl}/blob` as const;\nexport type blobUrl = '/news' | '/organization';\ntype BlockBlobUrlInput = {\n blockId: Guid;\n versionId: number;\n};\ntype SuggestionBlobUrlInput = {\n suggestionId: Guid | number;\n};\nexport type IBlobUrlInput =\n | BlockBlobUrlInput\n | SuggestionBlobUrlInput\n | blobUrl\n | 'public';\nfunction isBlockBlobUrlInput(\n location: IBlobUrlInput,\n): location is BlockBlobUrlInput {\n return (location as BlockBlobUrlInput).blockId !== undefined;\n}\nfunction isSuggestionBlobUrlInput(\n location: IBlobUrlInput,\n): location is SuggestionBlobUrlInput {\n return (location as SuggestionBlobUrlInput).suggestionId !== undefined;\n}\nexport function getBlobFilename(location: IBlobUrlInput, fileName: string) {\n const baseUrl = getBlobUrl(location);\n return fileName.replace(baseUrl, '').replace(/^\\/*/, '');\n}\ntype blobEndpointUrl =\n `${typeof blobUrl}${blobUrl | `/block/${Guid}/version/${number}` | `/suggestions/${number | Guid}`}`;\n// prettier-ignore\nexport function getBlobUrl(location: IBlobUrlInput): '' | blobEndpointUrl;\n// prettier-ignore\nexport function getBlobUrl(location: IBlobUrlInput, fileName: string): '' | `${blobEndpointUrl}${string}`;\n// prettier-ignore\nexport function getBlobUrl(location: IBlobUrlInput, fileName?: string): '' | `${blobEndpointUrl}${string}` {\n if (location === 'public') return ''; // Used if there is no blob location\n const suffix = !fileName\n ? ''\n : (fileName.startsWith('/') ? '' : '/') + fileName;\n if (typeof location === 'string') {\n return `${blobUrl}${location}${suffix}`;\n } else if (isBlockBlobUrlInput(location)) {\n return `${blobUrl}/block/${location.blockId}/version/${location.versionId}${suffix}`;\n } else if (isSuggestionBlobUrlInput(location)) {\n return `${blobUrl}/suggestions/${location.suggestionId}${suffix}`;\n } else {\n return '';\n }\n}\n\nexport const uploadBlob = async (\n blobLocation: IBlobUrlInput,\n file: File,\n): Promise => {\n const data = new FormData();\n data.append('file', file);\n\n const response = await fetch(getBlobUrl(blobLocation), {\n method: 'POST',\n body: data,\n credentials: 'include',\n });\n if (!response.ok) throw new Error('error.upload_failed');\n const { fileId } = await response.json();\n\n return fileId;\n};\n\nexport async function importImage(\n blobLocation: IBlobUrlInput,\n env: 'test' | 'prod',\n sourceUrl: string,\n fileId: string,\n) {\n const response = await fetch(\n `${getBlobUrl(blobLocation)}/import_from/${env}/${encodeURIComponent(sourceUrl)}/${fileId}`,\n {\n method: 'PUT',\n credentials: 'include',\n },\n );\n if (response.ok) return undefined;\n const error = await response.text();\n let userError: string;\n // check for standard Azure Blob error format:\n const knownData = error.match(/^(Error|Status|ErrorCode): .*$/gm);\n if (knownData) {\n userError =\n knownData.find((e) => e.startsWith('Status:')) ??\n knownData.find((e) => e.startsWith('ErrorCode:')) ??\n knownData.find((e) => e.startsWith('Error:')) ??\n knownData[0];\n } else {\n userError = error.split('\\n')[0];\n }\n throw new Error(userError, { cause: error });\n}\n\nexport function useBlobs(location: IBlobUrlInput): {\n blobs: Ref;\n refresh: () => Promise;\n} {\n const blobs = ref([]);\n const refresh = async () => (blobs.value = await getBlobs(location));\n refresh();\n return { blobs, refresh };\n}\n\nasync function getBlobs(location: IBlobUrlInput): Promise {\n const response = await fetch(getBlobUrl(location), {\n method: 'GET',\n credentials: 'include',\n });\n return await response.json();\n}\n\nexport async function deleteBlob(\n location: IBlobUrlInput,\n fileId: string,\n): Promise {\n await fetch(getBlobUrl(location, fileId), {\n method: 'DELETE',\n credentials: 'include',\n });\n}\n","import {\n InlineContainerTypes,\n type MdExtensionType,\n type InlineContainerType,\n renderers,\n type MdExtensionAttributeType,\n type OnelineContainerType,\n OnelineContainerTypes,\n type LinkbasedExtensionType,\n linkbasedRenderers,\n LinkbasedExtensionTypes,\n} from '@/utilities/markdown/GnistMarkdownExtension';\nimport type { InsertMdExtensionPayload as InsertMdExtensionPayload } from './CommandHelper';\nimport { getBlobUrl, type IBlobUrlInput } from '@/api/blob';\nimport type { Guid } from '@/api/types';\n\n/** When saving a url pointing to something in blob-storage, the url is saved simply as the `Guid` of that file. */\nfunction isBlobUrl(url: string): url is Guid {\n return !!url.match(\n /^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$/,\n );\n}\n\nexport type mdEnvironment = {\n url: string;\n};\nexport function getMdEnv(\n blobLocation: IBlobUrlInput,\n urlRoot = '',\n): mdEnvironment {\n return {\n url: urlRoot + getBlobUrl(blobLocation, '/'),\n };\n}\nexport function calculateUrl(\n destination: string | null,\n env: mdEnvironment,\n): string {\n destination ??= '';\n if (isBlobUrl(destination)) {\n return env.url + destination;\n } else {\n return destination;\n }\n}\n\nexport function getGroupRe(\n marker: string,\n type: 'text' | 'number' | 'complexText' = 'text',\n groupName = marker,\n): string {\n if (type === 'text')\n return `(?:(?:${marker}=)(?<${groupName}>[^\\\\s\\\\]]*)\\\\s?)?`;\n else if (type === 'number')\n return `(?:(?:${marker}=?)(?<${groupName}>\\\\d*)*\\\\s?)?`;\n else if (type === 'complexText')\n return `(?:(?:${marker}=\")(?<${groupName}>[^\"\\\\]]*)\"\\\\s?)?`;\n else return '';\n}\n\nexport type MdExtensionMode = 'inline' | 'oneline' | 'linkbased';\n\nexport type MdExtensionAttributes<\n M extends MdExtensionType,\n A extends MdExtensionAttributeType = MdExtensionAttributeType,\n> = {\n mode: M;\n oldText: string;\n fullMatch?: string;\n} & Record;\nexport type MdExtensionAttributesPartial<\n M extends MdExtensionType = MdExtensionType,\n A extends MdExtensionAttributeType = MdExtensionAttributeType,\n> = Partial> &\n Pick, 'mode' | 'oldText'>;\n\nexport function serializeMdExtensionAttributes(\n type: MdExtensionType,\n attributedata?: string[],\n /** Used by linkbased renderers to report the link-part of the serialized value */\n linkData?: { linkmode: LinkbasedExtensionType; link: string },\n): InsertMdExtensionPayload {\n const id = type.substring(0, 1).toUpperCase() + type.substring(1);\n const attributes = attributedata\n ? attributedata.filter((i) => i).join(' ') // Remove empty strings\n : '';\n if (InlineContainerTypes.includes(type as InlineContainerType)) {\n return { serialized: `:::${id} ${attributes}:::`, mode: 'inline' };\n } else if (OnelineContainerTypes.includes(type as OnelineContainerType)) {\n return { serialized: `:::${id} [${attributes}]:::`, mode: 'oneline' };\n } else if (LinkbasedExtensionTypes.includes(type as LinkbasedExtensionType)) {\n return {\n serialized: `${linkData?.linkmode === 'image' ? '!' : ''}[${attributes}](${linkData?.link})`,\n mode: 'linkbased',\n };\n } else {\n throw new Error('Unknown container type');\n }\n}\n\nexport function getInlineContainerAttributes<\n M extends InlineContainerType = InlineContainerType,\n>(text: string): MdExtensionAttributes | null {\n const inlineMatch = text.match(/:::(?\\S+) ?(?[^[[:\\n]+):::/);\n if (!inlineMatch) return null;\n const { mode, data } = inlineMatch.groups ?? {};\n const modeKey = mode?.toLowerCase().trim();\n return {\n mode: modeKey as InlineContainerType,\n [modeKey]: { data },\n oldText: text,\n fullMatch: inlineMatch[0],\n } as MdExtensionAttributes;\n}\n\nexport function getLinkBasedExtensionAttributes<\n M extends LinkbasedExtensionType = LinkbasedExtensionType,\n>(text: string, mode: M): MdExtensionAttributes | null {\n const renderer = linkbasedRenderers[mode];\n const attrs = renderer.parse(text, renderer.re);\n if (attrs.failedMatch !== undefined) {\n console.error(\n `This should not happen: text that was selected with RegExp ${attrs.re} did not match that RegExp!`,\n { text, match: attrs.failedMatch },\n );\n return null;\n }\n return {\n mode,\n [mode]: attrs,\n oldText: text,\n } as MdExtensionAttributes;\n}\n\nexport function getOnelineContainerAttributes(\n text: string,\n): MdExtensionAttributesPartial {\n const inlineMatch = text.match(/:::(?\\S+) ?(?[^[[:\\n]+):::/);\n if (inlineMatch !== null) {\n throw new Error(\n 'Found inline match in getContainerAttributes(), this should not happen',\n );\n }\n let modeMatch = text.match(/::::*(?[^:\\s]*) \\[.*?\\]/);\n if (modeMatch === null) modeMatch = text.match(/::::*(?.*)$/);\n const modeKey = modeMatch?.groups?.['mode']\n ?.toLowerCase()\n .trim() as OnelineContainerType;\n const renderReTxts = renderers[modeKey]?.reList?.join('') ?? '';\n let reTxt = '::::*';\n reTxt += '(?[^:\\\\s]*) \\\\[';\n reTxt += renderReTxts;\n reTxt += '.*?\\\\]';\n const match = text.match(new RegExp(reTxt));\n Object.entries(match?.groups ?? {}).forEach(([key, value]) => {\n if (value === 'undefined' || value === 'null') {\n (match?.groups as Record)[key] = undefined;\n }\n });\n const attrs = renderers[modeKey]?.parseRegexMatch?.(match?.groups);\n return {\n mode: modeKey,\n [modeKey]: attrs as MdExtensionAttributeType,\n oldText: text,\n } as MdExtensionAttributesPartial;\n}\n\nexport function fixWidgetNoise(text: string) {\n return text.replace(/\\$\\$widget\\S* (.*?)\\$\\$/g, '$1');\n}\n","import MarkdownIt from 'markdown-it';\nimport MarkdownItContainer from 'markdown-it-container';\nimport type StateInline from 'markdown-it/lib/rules_inline/state_inline.mjs';\nimport type Token from 'markdown-it/lib/token.mjs';\nimport {\n calculateUrl,\n getOnelineContainerAttributes,\n getGroupRe,\n getInlineContainerAttributes,\n type MdExtensionAttributesPartial,\n type MdExtensionAttributes,\n type mdEnvironment,\n} from './utilities';\nimport type { cardTemplateIds } from '@/renderTemplates';\nimport type { Guid, PartialSome, Tag } from '@/api/types';\n\n/** Based on https://github.com/markdown-it/markdown-it/blob/master/lib/rules_inline/html_inline.mjs and https://github.com/markdown-it/markdown-it/blob/master/lib/rules_inline/link.mjs, but due to the specific nature of this thing most stuff is removed. */\nfunction tokenizeWhitelistedHtml(state: StateInline, silent: boolean) {\n const tags: (keyof HTMLElementTagNameMap)[] = ['u'];\n for (const tag of tags) {\n const src = state.src.substring(state.pos);\n const tagRe = new RegExp(`(<${tag}>)(.*)(<\\\\/${tag}>)`);\n const match = src.match(tagRe);\n if (!match) continue;\n const max = state.posMax;\n const labelStart = state.pos + `<${tag}>`.length;\n const labelEnd = labelStart + match[2].length;\n if (!silent) {\n const open_token = state.push('gnist_html_open', '', 0);\n open_token.content = `<${tag}>`;\n state.pos = labelStart;\n state.posMax = labelEnd;\n state.md.inline.tokenize(state); // Handle tag content using normal rules\n const close_token = state.push('gnist_html_close', '', 0);\n close_token.content = ``;\n }\n state.pos = labelEnd + ``.length;\n state.posMax = max;\n return true;\n }\n return false;\n}\nexport type CustomLinkTokenType = 'custom_link';\nexport function tokenizeCustomLink(state: StateInline, silent: boolean) {\n const src = state.src.substring(state.pos, state.posMax);\n const result = customLinkRenderer.parse(src, customLinkRenderer.re);\n if (result.failedMatch !== undefined) {\n return false;\n }\n if (!silent) {\n const matchPos = src.indexOf(result.matchText);\n if (matchPos > 0) {\n const max = state.posMax;\n state.posMax = state.pos + matchPos;\n state.md.inline.tokenize(state); // Handle stuff before link using normal rules\n state.posMax = max;\n }\n const open_token = state.push('custom_link' as CustomLinkTokenType, '', 0);\n open_token.meta = result;\n }\n state.pos += result.matchText.length;\n return true;\n}\nexport function tokenizeInlineContainer(state: StateInline, silent: boolean) {\n const src = state.src.substring(state.pos, state.posMax);\n const attrs = getInlineContainerAttributes(src);\n if (!attrs) {\n return false;\n }\n if (!silent) {\n const matchPos =\n attrs.fullMatch === undefined ? 0 : src.indexOf(attrs.fullMatch);\n if (matchPos > 0) {\n const max = state.posMax;\n state.posMax = state.pos + matchPos;\n state.md.inline.tokenize(state); // Handle stuff before match using normal rules\n state.posMax = max;\n }\n const token = state.push('gnist_inline_container', '', 0);\n token.content = attrs.fullMatch ?? '';\n token.info = attrs.mode;\n }\n state.pos += attrs.fullMatch?.length ?? 0;\n return true;\n}\n\nexport function WhitelistHtmlTags(md: MarkdownIt) {\n // Important insert rule *after* markdownItBr (which must be added earlier as well), to avoid duplicate results from tokenize\n md.inline.ruler.after('emphasis', 'gnist_html', tokenizeWhitelistedHtml);\n // If the rule above added one of these tokens, render the token content raw\n md.renderer.rules['gnist_html_open'] = (tokens, idx) => tokens[idx].content;\n md.renderer.rules['gnist_html_close'] = (tokens, idx) => tokens[idx].content;\n}\nexport function InlineContainers(md: MarkdownIt) {\n md.inline.ruler.after(\n 'emphasis',\n 'gnist_inline_container',\n tokenizeInlineContainer,\n );\n md.renderer.rules['gnist_inline_container'] = (tokens, idx) => {\n const rendered = renderContainer(\n tokens[idx].content,\n tokens[idx].info as MdItContainerContainerType,\n 'inline',\n );\n return typeof rendered === 'string' ? rendered : rendered.outerHTML;\n };\n}\n\nexport function CustomLink(md: MarkdownIt) {\n md.inline.ruler.after('emphasis', 'custom_link', tokenizeCustomLink);\n md.renderer.rules['custom_link'] = (tokens, idx, _, env) =>\n customLinkRenderer.render(tokens[idx].meta as LinkAttributes, env).container\n .outerHTML;\n}\n\nexport function CustomImageRenderer(\n token: Token,\n env: mdEnvironment,\n): string | null {\n const content = `![${token.content}](${token.attrs?.[token.attrIndex('src')][1] ?? ''})`;\n const attrs = customImageRenderer.parse(content, customImageRenderer.re);\n if (attrs.failedMatch !== undefined) {\n return token.content;\n }\n return customImageRenderer.render(attrs, env).container.outerHTML;\n}\nfunction handleMdItContainer(tokens: Token[], idx: number): string {\n const token = tokens[idx];\n const type: 'open' | 'close' | null = token.type.endsWith('_open')\n ? 'open'\n : token.type.endsWith('_close')\n ? 'close'\n : null;\n if (type === 'close') return ''; // We only support markdown-it-containers in scenarios where the whole \"container\" is on the same line, thus there should never be anything rendered for the closing token (the closing tag should be rendered with the open token)\n const name = token.type.split('_')[1]; // markdown-it-container will always name tokens on the form container__\n const rendered = renderContainer(\n token.info,\n name as MdItContainerContainerType,\n type,\n );\n return typeof rendered === 'string' ? rendered : rendered.outerHTML;\n}\n\nexport function renderContainer(\n info: string,\n name: MdItContainerContainerType,\n type: 'open' | 'inline' | null,\n): HTMLElement | string {\n name = name.toLowerCase() as MdItContainerContainerType;\n const renderer = containerRenderers[name] ?? {};\n if (!renderer) return info; // Unsupported container\n const { openHandler } = renderer;\n const attrs =\n type === 'inline'\n ? getInlineContainerAttributes(info)\n : getOnelineContainerAttributes(':::' + info);\n if (attrs === null) {\n throw new Error('Failed to parse container data');\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return openHandler(attrs[name as keyof typeof attrs] as any); // This typing is too much for typescript to handle - but it works out in the end!\n}\n\nexport type RenderLinkBasedResult =\n ReturnType>['render']> & {\n attrs?: MdExtensionAttributes;\n clickTarget?: HTMLElement;\n };\nexport function renderLinkBasedItem<\n M extends LinkbasedExtensionType = LinkbasedExtensionType,\n>(\n attrs: MdExtensionAttributes,\n mode: M,\n env?: mdEnvironment,\n prependNode?: HTMLElement,\n): RenderLinkBasedResult {\n const renderer = linkbasedRenderers[mode] as linkbasedRender<\n MdExtensionAttributeType\n >;\n return {\n ...renderer.render(\n attrs[mode] as MdExtensionAttributeType,\n env,\n prependNode,\n ),\n attrs,\n clickTarget: prependNode,\n };\n}\n\nexport function AddGnistMarkdownContainers(md: MarkdownIt) {\n for (const containerKey in containerRenderers) {\n const name =\n containerKey.substring(0, 1).toUpperCase() + containerKey.substring(1);\n md.use(MarkdownItContainer, name, {\n render: function (tokens: Token[], idx: number) {\n return handleMdItContainer(tokens, idx);\n },\n /** @returns false if this should not be considered a container, true otherwise (see https://github.com/markdown-it/markdown-it-container/blob/master/index.mjs#L53) */\n validate: function (\n /** The remainder of the current line, after the markup (\"initial colons\") */\n params: string,\n ) {\n // return true;\n if (params.match(/:::/)) {\n return false; // \"inline container\", should not be handled by MdItContainers\n } else {\n return params.trim().split(' ', 2)[0] === name; // default validation from https://github.com/markdown-it/markdown-it-container/blob/master/index.mjs#L7\n }\n },\n });\n }\n}\n\nfunction getRe(\n render_id: MdExtensionType,\n marker: string,\n type: 'text' | 'number' | 'complexText' = 'text',\n groupName = marker,\n): string {\n groupName = `${render_id}_${groupName}`;\n return getGroupRe(marker, type, groupName);\n}\n\ntype ReId = `${MdExtensionType}_${string}`;\n\ntype containerRender = {\n openHandler: (data: T) => HTMLElement;\n /** Used for converting actual attribute values to the text representation we store in markdown */\n getNewAttributes?: (attrs: T) => string[];\n /** Use this to define what regexes should be used to read attributes from markdown */\n reList?: string[];\n /** Use this to parse the regex groups read from the markdown and return the actual attribute values */\n parseRegexMatch?: (groups: Record | undefined) => T;\n};\n\ntype inlineContainerRender = containerRender;\n\nconst iconRenderer: inlineContainerRender = {\n openHandler: ({ data }) => {\n const span = document.createElement('span');\n span.className = 'material-symbols-rounded';\n span.ariaHidden = 'true';\n span.role = 'img';\n span.innerText = data?.replace(/\\\\_/g, '_');\n return span;\n },\n getNewAttributes: (attrs) => [attrs.data],\n};\n\nexport type YoutubeAttributes = {\n src: string;\n controls: boolean;\n width: number;\n height: number;\n embedCode?: string;\n};\nexport function getYoutubeEmbedCode({\n src,\n controls,\n height,\n width,\n}: YoutubeAttributes) {\n const iframe = document.createElement('iframe');\n iframe.width = `${width}`;\n iframe.height = `${height}`;\n iframe.src = `${src}${controls ? '' : ';controls=0'}`;\n iframe.title = 'YouTube video player';\n iframe.frameBorder = '0';\n iframe.allowFullscreen = true;\n iframe.allow =\n 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share';\n iframe.style.maxWidth = '100%';\n return iframe;\n}\nexport function interpretYoutubeEmbedCode(code: string): YoutubeAttributes {\n const [src, controls] = (\n code.match(/(?:src=\")([^\"]*)(?:\")/)?.[1] ?? ''\n ).split(';');\n const width = parseInt(code.match(/(?:width=\")([^\"]*)(?:\")/)?.[1] ?? '');\n const height = parseInt(code.match(/(?:height=\")([^\"]*)(?:\")/)?.[1] ?? '');\n return {\n src: src,\n controls: controls?.toLowerCase() !== 'controls=0',\n width: isNaN(width) ? 560 : width,\n height: isNaN(height) ? 315 : height,\n embedCode: code,\n } satisfies YoutubeAttributes;\n}\nconst youtubeRenderer: containerRender = {\n openHandler: (attrs) => getYoutubeEmbedCode(attrs),\n getNewAttributes: (attrs) => [\n `src=${encodeURIComponent(attrs.src)}`,\n `controls=${attrs.controls}`,\n `width=${attrs.width}`,\n `height=${attrs.height}`,\n ],\n reList: [\n getRe('youtube', 'src'),\n getRe('youtube', 'controls'),\n getRe('youtube', 'width', 'number'),\n getRe('youtube', 'height', 'number'),\n ],\n parseRegexMatch: (groups) => {\n const attrs: YoutubeAttributes = {\n src: decodeURIComponent(groups?.['youtube_src'] ?? ''),\n controls: groups?.['youtube_controls'] !== 'false',\n height: groups?.['youtube_height']\n ? parseInt(groups?.['youtube_height'])\n : 315,\n width: groups?.['youtube_width']\n ? parseInt(groups?.['youtube_width'])\n : 560,\n };\n attrs.embedCode = getYoutubeEmbedCode(attrs).outerHTML;\n return attrs;\n },\n};\n\ntype FailedType = {\n failedMatch: RegExpMatchArray | null;\n re: RegExp;\n};\nexport type linkbasedRender = {\n parse: (\n text: string,\n re: RegExp,\n ) =>\n | (T & { matchText: string } & {\n [key in keyof FailedType]: undefined;\n })\n | (Partial & FailedType);\n render: (\n attrs: T,\n env?: { url: string },\n settingsBox?: HTMLElement,\n ) => { rendered: R; container: HTMLElement };\n re: RegExp;\n /** Used for converting actual attribute values to the text representation we store in markdown */\n getNewAttributes?: (attrs: T) => string[];\n};\n\nexport const linkStyles = [\n 'default',\n 'DefaultButton',\n 'PrimaryButton',\n 'DangerButton',\n 'SpecialButton',\n] as const;\ntype LinkStyle = (typeof linkStyles)[number];\nexport type LinkAttributes = {\n label: string;\n link: string;\n style: LinkStyle;\n justify: JustifyOption;\n largeButton?: boolean;\n};\nconst noBangBefore = '(? = {\n re: new RegExp(\n `${lineDoesNotStartWithTable}${noBangBefore}\\\\[${notEmpty}(?(` +\n getGroupRe('alt', 'complexText') +\n '|((?[^\\\\]]*?)\\\\s?))' +\n getGroupRe('style') +\n getGroupRe('justify') +\n '(?<large>large)?' +\n ')\\\\]\\\\((?<link>[^)]*?)\\\\)',\n ),\n parse(text, re) {\n const match = text.match(re);\n if (!match?.groups) {\n return { failedMatch: match, re };\n }\n const { alt, title, link, style, justify, large } = match.groups;\n return {\n label: alt ?? title,\n link,\n style: linkStyles.includes(style as LinkStyle)\n ? (style as LinkStyle)\n : 'default',\n justify: justifyOptions.includes(justify as JustifyOption)\n ? (justify as JustifyOption)\n : 'none',\n largeButton: !!large,\n matchText: match[0],\n failedMatch: undefined,\n re: undefined,\n };\n },\n render(data, env) {\n const linkBox = document.createElement('a');\n linkBox.href = env ? calculateUrl(data.link, env) : data.link;\n // If we are embedded inside another page, open links in a new tab to avoid issues\n if (window !== window.top) {\n linkBox.target = '_blank';\n }\n linkBox.textContent = data.label;\n if (data.style === 'DefaultButton') {\n linkBox.className = 'gnist-button';\n } else if (data.style === 'PrimaryButton') {\n linkBox.className = 'gnist-button gnist-button-primary';\n } else if (data.style === 'DangerButton') {\n linkBox.className = 'gnist-button gnist-button-danger';\n } else if (data.style === 'SpecialButton') {\n linkBox.className = 'gnist-button gnist-button-special';\n } else if (data.style !== 'default' && data.style !== undefined) {\n linkBox.className = data.style;\n }\n linkBox.className += ' border-none';\n if (data.largeButton) {\n linkBox.className += ' gnist-button-large';\n }\n if (data.justify !== 'none' || data.largeButton) {\n const container = document.createElement('div');\n container.className = `flex ${data.justify}`;\n container.appendChild(linkBox);\n return { rendered: linkBox, container };\n }\n return { rendered: linkBox, container: linkBox };\n },\n getNewAttributes: (attrs) => {\n const attributeList: string[] = [];\n attributeList.push(`alt=\"${attrs.label}\"`);\n if (attrs.style && attrs.style !== 'default') {\n attributeList.push(`style=${attrs.style}`);\n }\n if (attrs.justify && attrs.justify !== 'none') {\n attributeList.push(`justify=${attrs.justify}`);\n }\n if (attrs.largeButton) {\n attributeList.push('large');\n }\n if (attributeList.length === 1) {\n return [attrs.label];\n } else {\n return attributeList;\n }\n },\n};\n\nexport const floatOptions = ['left', 'right', 'none'] as const;\nexport type FloatOption = (typeof floatOptions)[number];\nexport const justifyOptions = [\n 'none',\n 'justify-start',\n 'justify-center',\n 'justify-end',\n] as const;\ntype JustifyOption = (typeof justifyOptions)[number];\nexport function justifyToAlign(justify: JustifyOption): FloatOption {\n if (justify === 'justify-start') {\n return 'left';\n } else if (justify === 'justify-end') {\n return 'right';\n } else {\n return 'none';\n }\n}\n\nexport type ImageAttributes = {\n maxWidth?: number;\n align: FloatOption;\n alt: string;\n link: string;\n decorative?: boolean;\n};\nexport const customImageRenderer: linkbasedRender<ImageAttributes> = {\n re: new RegExp(\n `${lineDoesNotStartWithTable}!\\\\[${notEmpty}((` +\n getGroupRe('alt', 'complexText') +\n '|((?<title>[^\\\\]]*?)\\\\s?))' +\n getGroupRe('maxwidth', 'number') +\n getGroupRe('align') +\n '(?<decorative>decorative)?' +\n ')\\\\]\\\\((?<link>[^)]*?)\\\\)',\n ),\n parse: (text, re) => {\n const match = text.match(re);\n if (!match?.groups) {\n return { failedMatch: match, re };\n }\n const { alt, title, link, maxwidth, align, decorative } = match.groups;\n return {\n maxWidth: maxwidth ? parseInt(maxwidth) : undefined,\n align: floatOptions.includes(align as FloatOption)\n ? (align as FloatOption)\n : 'none',\n alt: alt ?? title,\n link,\n matchText: match[0],\n failedMatch: undefined,\n re: undefined,\n decorative: !!decorative,\n };\n },\n render: (data, env, settingsBox) => {\n if (!env) {\n throw new Error('missing mdEnv!');\n }\n const container = document.createElement('div');\n if (settingsBox) {\n container.appendChild(settingsBox);\n }\n const img = document.createElement('img');\n img.src = calculateUrl(data.link, env);\n img.alt = data.decorative ? '' : data.alt;\n img.contentEditable = 'false';\n img.className = 'WidgetImage';\n if (data.maxWidth) {\n container.style.maxWidth = `${data.maxWidth}%`;\n container.style.minWidth = '7rem';\n }\n if (data.align) {\n container.style.float = data.align;\n }\n if (data.decorative) {\n img.role = 'presentation';\n }\n\n container.appendChild(img);\n return { rendered: img, container };\n },\n getNewAttributes: (attrs) => [\n `alt=\"${attrs.alt}\"`,\n attrs.maxWidth ? `maxwidth=${attrs.maxWidth}` : '',\n attrs.align && attrs.align !== 'none' ? `align=${attrs.align}` : '',\n attrs.decorative ? 'decorative' : '',\n ],\n};\n\nexport type DoclistVueAttributes = {\n categoryIds?: number[];\n doclistRoute: string;\n includeBacklog: boolean;\n style?: string;\n showOrgFilter: boolean;\n showSearch: boolean;\n showCategoryFilter: boolean;\n showTagFilter: boolean;\n maxItems?: number;\n cardTemplateId?: cardTemplateIds;\n tags: PartialSome<Tag, 'text'>[];\n notTags?: PartialSome<Tag, 'text'>[];\n searchText?: string;\n orgIds?: Guid[];\n};\n\nexport type SearchbarVueAttributes = {\n doclistRoute: string;\n style?: string;\n searchText?: string;\n placeholder?: string;\n};\n\nexport type InlineContainerAttributes = { data: string };\nconst inlineRenderers = {\n icon: iconRenderer,\n} as const satisfies Record<string, inlineContainerRender>;\nexport const linkbasedRenderers = {\n image: customImageRenderer,\n link: customLinkRenderer,\n} as const;\nconst onelineRenderers = {\n youtube: youtubeRenderer,\n} as const;\nconst containerRenderers = {\n ...inlineRenderers,\n ...onelineRenderers,\n} as const;\nexport const renderers = {\n ...inlineRenderers,\n ...linkbasedRenderers,\n ...onelineRenderers,\n} as const;\n\nexport type InlineContainerType = keyof typeof inlineRenderers;\nexport type OnelineContainerType = keyof typeof onelineRenderers;\ntype MdItContainerContainerType = keyof typeof containerRenderers;\nexport type LinkbasedExtensionType = keyof typeof linkbasedRenderers;\nexport type MdExtensionType = keyof typeof renderers;\nexport const LinkbasedExtensionTypes = Object.keys(\n linkbasedRenderers,\n) as LinkbasedExtensionType[];\nexport const InlineContainerTypes = Object.keys(\n inlineRenderers,\n) as InlineContainerType[];\nexport const OnelineContainerTypes = Object.keys(\n onelineRenderers,\n) as OnelineContainerType[];\n\nexport type MdExtensionAttributeType<M extends MdExtensionType> = Record<\n string,\n unknown\n> &\n (M extends keyof typeof inlineRenderers\n ? InlineContainerAttributes\n : M extends 'image'\n ? ImageAttributes\n : M extends 'link'\n ? LinkAttributes\n : M extends 'youtube'\n ? YoutubeAttributes\n : unknown);\nexport function isAttrsType<\n M extends MdExtensionType,\n A extends MdExtensionAttributeType<M> = MdExtensionAttributeType<M>,\n>(attrs: unknown, mode: M): attrs is MdExtensionAttributes<M, A> {\n return (attrs as MdExtensionAttributesPartial).mode == mode;\n}\nexport function isLinkbasedsAttrsType(\n attrs: unknown,\n): attrs is MdExtensionAttributes<\n LinkbasedExtensionType,\n MdExtensionAttributeType<LinkbasedExtensionType>\n> {\n return LinkbasedExtensionTypes.includes(\n (attrs as MdExtensionAttributesPartial).mode as LinkbasedExtensionType,\n );\n}\n","import MarkdownIt, { type Options } from 'markdown-it';\nimport MarkdownItAnchor from 'markdown-it-anchor';\nimport markdownItBr from '@iktakahiro/markdown-it-br';\nimport slugify from 'slugify';\nimport hljs from 'highlight.js/lib/core';\nimport type Token from 'markdown-it/lib/token.mjs';\nimport Renderer, { type RenderRule } from 'markdown-it/lib/renderer.mjs';\nimport {\n AddGnistMarkdownContainers,\n CustomImageRenderer,\n CustomLink,\n InlineContainers,\n WhitelistHtmlTags,\n} from '@/utilities/markdown/GnistMarkdownExtension';\nimport {\n calculateUrl,\n type mdEnvironment,\n} from '@/utilities/markdown/utilities';\n\nexport const md = new MarkdownIt({\n linkify: true,\n highlight: function (str, lang) {\n if (lang && hljs.getLanguage(lang)) {\n try {\n return hljs.highlight(str, { language: lang }).value;\n } catch (e) {\n console.log(e);\n }\n }\n return ''; // use external default escaping\n },\n});\n\nconst proxy: RenderRule = (tokens, idx, options, env, self) =>\n self.renderToken(tokens, idx, options);\n\nmd.use(MarkdownItAnchor, { slugify: slugify });\nmd.use(InlineContainers); // This must be added before containers, so \"inline containers\" are tokenized before \"block containers\". If not, \"inline containers\" might be interpreted as block containers.\nAddGnistMarkdownContainers(md);\nmd.use(markdownItBr);\nmd.use(WhitelistHtmlTags);\nmd.use(CustomLink);\n\nmd.renderer.rules.fence = wrapCodeRenderer(md.renderer.rules.fence);\nmd.renderer.rules.code_block = wrapCodeRenderer(md.renderer.rules.code_block);\n\nconst defaultImageRender: RenderRule | undefined = md.renderer.rules.image;\nmd.renderer.rules.image = imageRenderer;\n\nconst defaultLinkOpenRender = md.renderer.rules.link_open || proxy;\nmd.renderer.rules.link_open = linkOpenRenderer;\n\n// Wrap a render function to add `hljs` class to code blocks\nfunction wrapCodeRenderer(renderer?: RenderRule): RenderRule | undefined {\n if (!renderer) return undefined;\n return function wrappedRenderer(...args) {\n return renderer(...args)\n .replace('<code class=\"', '<code class=\"hljs ')\n .replace('<code>', '<code class=\"hljs\">');\n };\n}\n\n// Overrides the markdown image renderer to show images in markdown without using absolute paths\nfunction imageRenderer(\n tokens: Token[],\n idx: number,\n options: Options,\n env: mdEnvironment,\n self: Renderer,\n): string {\n const token = tokens[idx];\n\n if (token.attrs) {\n token.attrs[token.attrIndex('src')][1] = calculateUrl(\n token.attrs[token.attrIndex('src')][1],\n env,\n );\n }\n\n return (\n CustomImageRenderer(token, env) ??\n defaultImageRender?.(tokens, idx, options, env, self) ??\n ''\n );\n}\n\n// Overrides the markdown link renderer to show links in markdown without using absolute paths\nfunction linkOpenRenderer(\n tokens: Token[],\n idx: number,\n options: Options,\n env: mdEnvironment,\n self: Renderer,\n): string {\n const token = tokens[idx];\n\n if (token.attrs) {\n token.attrs[token.attrIndex('href')][1] = calculateUrl(\n token.attrs[token.attrIndex('href')][1],\n env,\n );\n }\n return defaultLinkOpenRender(tokens, idx, options, env, self);\n}\n","<script setup lang=\"ts\">\nimport { useAttrs } from 'vue';\n\ndefineProps<{\n show?: boolean;\n}>();\ndefineOptions({\n inheritAttrs: false,\n});\nconst attrs = useAttrs();\n</script>\n\n<template>\n <template v-if=\"show\">\n <div v-bind=\"attrs\">\n <slot />\n </div>\n </template>\n <template v-else>\n <slot />\n </template>\n</template>\n","<script setup lang=\"ts\">\nimport { useAttrs } from 'vue';\nimport { md } from '@/utilities/markdown/MarkdownIt';\nimport { getMdEnv } from '@/utilities/markdown/utilities';\nimport OptionalDiv from '@/components/OptionalDiv.vue';\nimport type { Schema } from '@/api/types';\nimport type { IBlobUrlInput } from '@/api/blob';\n\nconst props = defineProps<{\n schema?: Schema;\n value: string;\n /** Use \"public\" if images are not stored as blobs (requires absolute url's for all content that would have been blobs) */\n blobLocation: IBlobUrlInput;\n /** Set this to remove href attribute from links */\n removeLinkHref?: boolean;\n}>();\n\n/** Since we have a top level header outside markdown, we change all headers down one level */\nconst fixHeaders = (md: string) => {\n return md\n .replace(/^##### /gm, '###### ')\n .replace(/^#### /gm, '##### ')\n .replace(/^### /gm, '#### ')\n .replace(/^## /gm, '### ')\n .replace(/^# /gm, '## ');\n};\nconst fixExtensions = (md: string) => {\n return md.replace(/(:::)([^:\\n]*\\[[^:\\n]*])(:::)/g, '$1$2\\n$3');\n};\n\nfunction renderMd(mdValue: string) {\n let renderedMd = md.render(\n fixHeaders(fixExtensions(mdValue)),\n getMdEnv(props.blobLocation),\n );\n if (props.removeLinkHref) {\n renderedMd = renderedMd.replace(/(<a[^>]*)( href=\"[^\"]*\")/g, '$1');\n }\n return renderedMd;\n}\n\ndefineOptions({\n inheritAttrs: false,\n});\nconst attrs = useAttrs();\n</script>\n\n<template>\n <OptionalDiv v-if=\"props.value.trim()\" :show=\"schema?.showTitle\">\n <h1 v-if=\"schema?.showTitle\">{{ schema.title }}</h1>\n <!-- eslint-disable-next-line vue/no-v-html -->\n <div v-bind=\"attrs\" class=\"html-render\" v-html=\"renderMd(props.value)\" />\n </OptionalDiv>\n</template>\n","<script lang=\"ts\">\nexport type IInputLabelProps = {\n label?: string;\n /** Set to true if the label is visually placed somewhere else, but should be kept here for accessibility */\n srOnly?: boolean;\n /** Set to true if there is no visible label, but the space that should be used by the label should be filled (e.g. to align with other inputs) */\n useHeight?: boolean;\n tooltip?: string;\n labelEnd?: string;\n labelClass?: string | string[];\n tooltipClass?: string | string[];\n required?: boolean;\n /** Used for connecting label and input */\n forName?: string;\n descriptionStyle?: 'tooltip' | 'inline';\n minlength?: number;\n maxlength?: number;\n placeholder?: string;\n isBlockField?: boolean;\n limitLabelStart?: boolean;\n dynamicTextKey?: string;\n description?: string;\n mdDescription?: boolean;\n link?: string;\n};\nexport default {\n inheritAttrs: false,\n};\n\nexport function useDynamicLabelTexts(\n props: Pick<\n IInputLabelProps,\n | 'label'\n | 'dynamicTextKey'\n | 'tooltip'\n | 'placeholder'\n | 'description'\n | 'forName'\n >,\n) {\n const { t, te } = useI18n();\n const labelId =\n props.label ??\n (props.dynamicTextKey ? `${props.dynamicTextKey}.label` : '');\n const tooltipId = props.tooltip ?? `${props.dynamicTextKey}.tooltip`;\n const placeholderId =\n props.placeholder ?? `${props.dynamicTextKey}.placeholder`;\n const descriptionId =\n props.description ?? `${props.dynamicTextKey}.description`;\n return computed(() => ({\n label: t(labelId),\n tooltip: te(tooltipId) ? t(tooltipId) : props.tooltip,\n placeholder: te(placeholderId) ? t(placeholderId) : props.placeholder,\n description: te(descriptionId)\n ? t(descriptionId)\n : te(tooltipId)\n ? t(tooltipId)\n : props.description,\n showDescriptionButton: te(descriptionId) || !!props.description,\n forName:\n props.forName ??\n (props.label ?? props.dynamicTextKey)?.split('.').slice(-1)[0],\n }));\n}\n</script>\n\n<script setup lang=\"ts\">\nimport MaterialIcon from '@/components/MaterialIcon.vue';\nimport { useResizeListener } from '@/utilities/useResizeListener';\nimport { computed, ref, useAttrs, type StyleValue } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport ButtonComponent from '../ButtonComponent.vue';\nimport IconLink from '../IconLink.vue';\nimport MarkdownRenderer from '@/components/block/MarkdownRenderer.vue';\nimport { useRouter } from 'vue-router';\n\nconst { t } = useI18n();\n\nconst props = defineProps<IInputLabelProps>();\nconst attrs = useAttrs();\nconst fallthroughAttrs = computed(\n (): { class?: unknown; style?: StyleValue } => {\n return { class: attrs.class, style: attrs.style as StyleValue };\n },\n);\n\nconst texts = useDynamicLabelTexts(props);\nconst router = useRouter();\nconst linkTarget = props.link ? router.resolve(props.link) : undefined;\nconst showDescription = ref(false);\n\nconst { isBelowSmall } = useResizeListener();\n</script>\n\n<template>\n <div\n v-if=\"texts.label\"\n class=\"GnistInputLabel flex min-w-0 items-center justify-between leading-8\"\n :class=\"{ 'h-8': useHeight }\"\n v-bind=\"fallthroughAttrs\"\n :data-is-block-field=\"isBlockField ? true : undefined\"\n >\n <span\n :title=\"t(texts.label)\"\n class=\"flex min-w-0\"\n :class=\"{\n 'w-full': !limitLabelStart,\n tooltip: isBelowSmall,\n }\"\n :data-tip=\"t(texts.label)\"\n >\n <slot>\n <span\n class=\"block min-w-0 truncate text-left\"\n :class=\"[labelClass, { 'sr-only': srOnly }]\"\n >\n {{ t(texts.label) }}\n </span>\n </slot>\n <span\n v-if=\"required\"\n class=\"text-gnist-red-dark\"\n :class=\"[labelClass, { 'sr-only': srOnly }]\"\n :title=\"t('validation.required')\"\n >\n  *\n </span>\n <span\n v-if=\"texts.tooltip && descriptionStyle !== 'inline'\"\n :data-tip=\"t(texts.tooltip)\"\n class=\"tooltip static ml-1 whitespace-break-spaces font-normal sm:relative\"\n :class=\"tooltipClass\"\n >\n <MaterialIcon\n class=\"text-2xl hover:text-secondary\"\n :aria-describedby=\"`desc_${texts.forName}`\"\n >\n info\n </MaterialIcon>\n </span>\n </span>\n <slot name=\"labelEnd\">\n <span\n v-if=\"labelEnd !== undefined\"\n class=\"LabelEnd block self-end whitespace-nowrap\"\n >\n {{ labelEnd }}\n </span>\n </slot>\n <span\n v-if=\"linkTarget\"\n class=\"static ml-1 whitespace-break-spaces font-normal sm:relative\"\n >\n <IconLink\n label=\"buttons.external_help\"\n icon=\"open_in_new\"\n icon-class=\"text-2xl hover:text-gnist-gray\"\n :aria-describedby=\"`desc_${texts.forName}`\"\n :to=\"linkTarget\"\n target=\"_blank\"\n />\n </span>\n <span\n v-if=\"texts.showDescriptionButton\"\n class=\"static ml-1 whitespace-break-spaces font-normal sm:relative\"\n >\n <ButtonComponent\n text=\"buttons.show_description\"\n icon=\"help_outline\"\n icon-class=\"text-2xl hover:text-gnist-gray\"\n :aria-describedby=\"`desc_${texts.forName}`\"\n @click=\"showDescription = !showDescription\"\n />\n </span>\n </div>\n <span\n v-if=\"texts.description\"\n :id=\"`desc_${texts.forName}`\"\n class=\"LabelDescription my-2 whitespace-pre-wrap text-wrap text-sm text-gnist-black\"\n :class=\"{ 'sr-only': descriptionStyle !== 'inline' && !showDescription }\"\n >\n <template v-if=\"!mdDescription\">\n {{ texts.description }}\n </template>\n <MarkdownRenderer\n v-else\n :value=\"texts.description\"\n blob-location=\"public\"\n class=\"whitespace-normal bg-gnist-gray-light-light p-2 [&_>_:first-child]:pt-0\"\n />\n </span>\n</template>\n","<script\n setup\n lang=\"ts\"\n generic=\"T extends Translated<BlockLocaleValue> | string | string[] | number\"\n>\nimport { useI18n } from 'vue-i18n';\nimport InputLabel, {\n useDynamicLabelTexts,\n type IInputLabelProps,\n} from './InputLabel.vue';\nimport { computed, ref, watch } from 'vue';\nimport type { BlockLocaleValue, Translated, VueClass } from '@/api/types';\n\nconst props = defineProps<\n IInputLabelProps & {\n modelValue?: T | null;\n parseval?: (val: unknown) => T;\n validate?: ((val: T) => boolean) | RegExp;\n validationLabel?: string;\n multiline?: boolean;\n rows?: number;\n min?: number;\n max?: number;\n disabled?: boolean;\n showValidationMessage?: boolean;\n inputClass?: VueClass;\n type?: 'text' | 'number' | 'email' | 'password' | 'tel';\n noChrome?: boolean;\n }\n>();\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: T): void;\n (e: 'update:valid', valid: boolean): void;\n (e: 'focus'): void;\n (e: 'blur'): void;\n}>();\nconst { t } = useI18n();\nconst value = computed(() =>\n props.modelValue === null || props.modelValue === undefined\n ? ''\n : typeof props.modelValue === 'string' ||\n (Array.isArray(props.modelValue) &&\n !props.modelValue.some((i) => typeof i !== 'string'))\n ? (props.modelValue as string | string[])\n : JSON.stringify(props.modelValue),\n);\n\nfunction onChange(val: string) {\n let parsedVal = props.parseval?.(val);\n if (props.type === 'number') parsedVal ??= parseInt(val) as T;\n parsedVal ??= val as T;\n emit('update:modelValue', parsedVal);\n if (typeof props.validate === 'function') {\n emit('update:valid', props.validate(parsedVal));\n }\n}\n\nconst length = computed(() => {\n if (Array.isArray(value.value)) return value.value.length;\n return value.value?.length ?? 0;\n});\nconst singleLineRef = ref<HTMLInputElement | null>(null);\nconst multiLineRef = ref<HTMLTextAreaElement | null>(null);\nwatch(\n () => value.value,\n () => {\n const activeRef = props.multiline\n ? multiLineRef.value\n : singleLineRef.value;\n if (props.showValidationMessage) activeRef?.reportValidity();\n emit('update:valid', activeRef?.checkValidity() ?? false);\n },\n);\nconst texts = useDynamicLabelTexts(props);\n</script>\n<template>\n <label :for=\"texts.forName\" class=\"flex flex-col whitespace-nowrap\">\n <InputLabel\n v-bind=\"props\"\n :label-end=\"!!maxlength ? `${length} / ${maxlength}` : undefined\"\n />\n <input\n v-if=\"!multiline\"\n :id=\"texts.forName\"\n ref=\"singleLineRef\"\n :value=\"value\"\n :type=\"type ?? 'text'\"\n :name=\"texts.forName\"\n :title=\"t(validationLabel ?? texts.label ?? '')\"\n class=\"my-2 grow border p-2\"\n :class=\"[\n inputClass,\n { 'bg-transparent': noChrome, 'border-none': noChrome },\n ]\"\n :required=\"required\"\n :minlength=\"minlength\"\n :maxlength=\"maxlength\"\n :min=\"min\"\n :max=\"max\"\n :placeholder=\"t(texts.placeholder ?? '')\"\n :disabled=\"disabled\"\n :pattern=\"\n typeof validate === 'function'\n ? undefined\n : validate?.toString().replace(/\\/(.*)\\/\\S*/, '$1')\n \"\n :aria-describedby=\"texts.forName ? `desc_${texts.forName}` : undefined\"\n :data-cy-id=\"`InputText_${texts.forName}`\"\n @input=\"(ev) => onChange((ev.target as HTMLInputElement).value)\"\n @focus=\"\n if (showValidationMessage) singleLineRef?.reportValidity();\n emit('focus');\n \"\n @blur=\"emit('blur')\"\n />\n <textarea\n v-else\n :id=\"texts.forName\"\n ref=\"multiLineRef\"\n :value=\"value\"\n :name=\"texts.forName\"\n :title=\"t(validationLabel ?? texts.label ?? '')\"\n :rows=\"rows\"\n class=\"my-2 w-full border p-2\"\n :class=\"[\n inputClass,\n { 'bg-transparent': noChrome, 'border-none': noChrome },\n ]\"\n :required=\"required\"\n :disabled=\"disabled\"\n :minlength=\"minlength\"\n :maxlength=\"maxlength\"\n :placeholder=\"t(texts.placeholder ?? '')\"\n :pattern=\"\n typeof validate === 'function'\n ? undefined\n : validate?.toString().replace(/\\/(.*)\\/\\S*/, '$1')\n \"\n :aria-describedby=\"texts.forName ? `desc_${texts.forName}` : undefined\"\n :data-cy-id=\"`InputText_${texts.forName}`\"\n @input=\"(ev) => onChange((ev.target as HTMLTextAreaElement).value)\"\n @focus=\"\n if (showValidationMessage) multiLineRef?.reportValidity();\n emit('focus');\n \"\n @blur=\"emit('blur')\"\n />\n </label>\n</template>\n\n<style scoped>\ninput[disabled],\ntextarea[disabled] {\n @apply bg-gnist-gray-light;\n}\n</style>\n","export function formatDate(\n date: Date | string | undefined,\n withTime = true,\n emptyValue = '',\n) {\n if (!date) return emptyValue;\n if (typeof date === 'string') date = new Date(date);\n const dateString = date.toLocaleDateString('no-NO', {\n day: '2-digit',\n month: '2-digit',\n year: '2-digit',\n });\n const timeString = date.toLocaleTimeString('no-NO', {\n hour: '2-digit',\n minute: '2-digit',\n });\n return dateString + (withTime ? ' ' + timeString : '');\n}\n","import {\n getPropertyRecursive,\n type ArrayItem,\n type RecurChildType,\n type KeyOfRecursive,\n} from '@/api/types';\nimport {\n computed,\n ref,\n type ComputedRef,\n type Ref,\n type UnwrapRef,\n watch,\n} from 'vue';\n\nexport type Comparator<T> = (a: T, b: T) => number;\nexport type SortDirection = 'asc' | 'desc';\n\nexport function undefinedCompare<T>(\n comparator: Comparator<T>,\n): Comparator<T | undefined> {\n return (a: T | undefined, b: T | undefined) => {\n if (\n (typeof a === 'undefined' || a === null) &&\n (typeof b === 'undefined' || b === null)\n )\n return 0;\n if (typeof a === 'undefined' || a === null) return -1;\n if (typeof b === 'undefined' || b === null) return 1;\n return comparator(a, b);\n };\n}\n\n/**\n * Implements the default compare function as used by Array.sort without parameters\n * @param a The first value to compare\n * @param b The second value to compare\n */\nexport function defaultCompare<T>(a: T, b: T): number {\n if (a < b) return -1;\n if (b < a) return 1;\n return 0;\n}\n\n/**\n * Compares two strings case-insensitive\n * @param a The first string value\n * @param b The second string value\n */\nexport const stringCompareCaseInsensitive: Comparator<string> = (\n a: string,\n b: string,\n): number => {\n return defaultCompare(a?.toLowerCase() ?? '', b?.toLowerCase() ?? '');\n};\n\n/**\n * Creates a new Comparator function that compares a property of two objects using the specified Comparator function.\n * @param property The property to extract from the objects\n * @param comparator The Comparator function that should be used to compare the properties.\n */\nexport function propertyCompare<T, K extends KeyOfRecursive<T, true>>(\n property: K,\n comparator: Comparator<RecurChildType<T, K>>,\n): Comparator<T> {\n return (a: T, b: T) =>\n comparator(\n getPropertyRecursive(a, property),\n getPropertyRecursive(b, property),\n );\n}\n\n/**\n * Orders an array, similar to sort, but does not mutate the input.\n * @param input The array to be sorted\n * @param comparator Compare function used in the same way as in sort\n * @param direction Sort ascending ('asc') or descending ('desc'). Default is 'asc'.\n */\nexport function order<T>(\n input: Array<T>,\n comparator: Comparator<T>,\n direction: SortDirection = 'asc',\n) {\n const copy = [...input];\n copy.sort(comparator);\n if (direction === 'asc') return copy;\n else return copy.reverse();\n}\n\nexport function zip<T>(\n a: Array<T>,\n b: Array<T>,\n): Array<[T | undefined, T | undefined]> {\n return a.length >= b.length\n ? a.map((aVal, i) => [aVal, b[i]])\n : b.map((bVal, i) => [a[i], bVal]);\n}\n\n/**\n * Compares two Arrays, by first ordering each array, and then compare each corresponding elements of the arrays\n * @param comparator Comparator used to compare each element of the array\n */\nexport function arrayCompare<T>(\n comparator: Comparator<T>,\n): Comparator<Array<T>> {\n return (a: Array<T>, b: Array<T>): number => {\n const aSorted = order(a, comparator, 'asc');\n const bSorted = order(b, comparator, 'asc');\n const undefComp = undefinedCompare(comparator);\n for (const [aVal, bVal] of zip(aSorted, bSorted)) {\n const elementCompare = undefComp(aVal, bVal);\n if (elementCompare !== 0) return elementCompare;\n }\n return 0;\n };\n}\n\ntype Grouped<T> = T & { isGroupHeader?: boolean; groupSize?: number };\nexport function useSort<T, SortField extends KeyOfRecursive<T, true>>(\n values: Ref<T[] | null | undefined> | ComputedRef<T[] | null | undefined>,\n sortFields: Readonly<SortField[]> | undefined,\n defaultSortfield?: SortField,\n defaultSortDirection: SortDirection = 'asc',\n comparers?: {\n [key in SortField]?: Comparator<\n RecurChildType<T, key> extends Array<unknown> | undefined\n ? ArrayItem<RecurChildType<T, key>>\n : RecurChildType<T, key>\n >;\n },\n skipSortOnContentChange = false,\n useGroupCountOnSortField?: (currentSortField: SortField) => boolean,\n): {\n sortOnField: (field: KeyOfRecursive<T, true>) => void;\n getHeaderClasses: (key: KeyOfRecursive<T, true>) => string;\n sortedValues: Ref<Grouped<T>[] | undefined>;\n isGrouped: Ref<boolean>;\n} {\n const isGrouped = ref(false);\n if (sortFields === undefined || sortFields.length === 0) {\n return {\n sortOnField: () => null,\n getHeaderClasses: () => '',\n sortedValues: computed(() => (values.value as Grouped<T>[]) ?? undefined),\n isGrouped,\n };\n }\n const sortFieldRef = ref<SortField>(defaultSortfield ?? sortFields[0]);\n const sortDirection = ref<SortDirection>(defaultSortDirection);\n const headerClasses = computed(() => {\n return Object.fromEntries(\n sortFields.map((field) => [\n field,\n sortFieldRef.value === field ? sortDirection.value : '',\n ]),\n ) as { [key in SortField]: string };\n });\n function getHeaderClasses(key: KeyOfRecursive<T, true>) {\n return key in headerClasses.value\n ? 'cursor-pointer ' + headerClasses.value[key as SortField]\n : 'cursor-default';\n }\n\n function sortOnField(field: KeyOfRecursive<T, true>): void {\n if (!sortFields!.includes(field as SortField)) return;\n if (sortFieldRef.value === field) {\n sortDirection.value = sortDirection.value === 'asc' ? 'desc' : 'asc';\n } else {\n sortDirection.value = 'asc';\n sortFieldRef.value = field as UnwrapRef<SortField>;\n }\n }\n\n const sortedValues = ref<Grouped<T>[] | undefined>();\n watch(\n [sortFieldRef, sortDirection, values],\n ([newField, newDirection], [oldField, oldDirection]) => {\n const orderChanged =\n newField !== oldField || newDirection !== oldDirection;\n const countChanged = values.value?.length !== sortedValues.value?.length;\n if (!orderChanged && !countChanged && skipSortOnContentChange) {\n return;\n }\n sortedValues.value = sortValues();\n },\n { immediate: true, deep: true },\n );\n function sortValues(): Grouped<T>[] | undefined {\n if (!values.value) return;\n const sortField = sortFieldRef.value as SortField;\n const testValue = getPropertyRecursive(\n values.value?.find((val) => !!getPropertyRecursive(val, sortField)),\n sortField,\n );\n if (!testValue) return values.value as Grouped<T>[]; // If all values are falsy, we don't need to try sorting\n let sorted: Grouped<T>[];\n if (Array.isArray(testValue)) {\n const itemComparer = (comparers?.[sortField] ??\n (typeof testValue[0] === 'string'\n ? stringCompareCaseInsensitive\n : defaultCompare)) as Comparator<\n ArrayItem<RecurChildType<T, SortField>>\n >;\n sorted = order(\n values.value,\n propertyCompare(\n sortField,\n undefinedCompare(arrayCompare(itemComparer)) as Comparator<\n RecurChildType<T, SortField>\n >,\n ),\n sortDirection.value,\n ) as Grouped<T>[];\n } else {\n const itemComparer = (comparers?.[sortField] ??\n (typeof testValue === 'string'\n ? stringCompareCaseInsensitive\n : defaultCompare)) as Comparator<RecurChildType<T, SortField>>;\n sorted = order<T>(\n values.value,\n propertyCompare(sortField, itemComparer),\n sortDirection.value,\n ) as Grouped<T>[];\n }\n isGrouped.value = !!useGroupCountOnSortField?.(sortField);\n if (isGrouped.value) {\n let previousItem: Grouped<T> | undefined = undefined;\n let previousValue: RecurChildType<T, SortField> | undefined = undefined;\n let count = 0;\n for (let i = sorted.length - 1; i >= 0; i--) {\n const currentValue = getPropertyRecursive(sorted[i] as T, sortField);\n if (previousItem) {\n if (previousValue !== currentValue) {\n previousItem.isGroupHeader = true;\n previousItem.groupSize = count;\n count = 0;\n } else {\n delete previousItem.isGroupHeader;\n delete previousItem.groupSize;\n }\n }\n count++;\n previousValue = currentValue;\n previousItem = sorted[i];\n }\n if (previousItem) {\n previousItem.isGroupHeader = true;\n previousItem.groupSize = count;\n }\n }\n return sorted;\n }\n\n return {\n sortOnField,\n getHeaderClasses,\n sortedValues,\n isGrouped,\n };\n}\n","<template>\n <div\n aria-hidden=\"true\"\n class=\"spinner rounded-half border-8 border-solid border-gnist-gray border-opacity-10\"\n data-cy-id=\"LoadingSpinner\"\n />\n</template>\n\n<style scoped>\n.spinner {\n animation: spinning 1s linear infinite;\n border-left-color: rgb(var(--gnist-color-blue) / 0.3);\n}\n\n@keyframes spinning {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n</style>\n","<script\n setup\n lang=\"ts\"\n generic=\"\n T extends NonNullable<unknown>,\n TId extends KeysOfUnion<T> | undefined,\n SortField extends KeyOfRecursive<T, true>\n \"\n>\nimport type {\n ArrayItem,\n FgColors,\n KeyOfRecursive,\n KeysOfUnion,\n localeValue,\n OnlyKeysWithValsOfType,\n PartialSome,\n RecurChildType,\n VueClass,\n} from '@/api/types';\nimport {\n useSort,\n type Comparator,\n type SortDirection,\n} from '@/utilities/order';\nimport { computed, ref, toRef, useAttrs } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport LoadingSpinner from './LoadingSpinner.vue';\nimport ButtonComponent from '@/components/ButtonComponent.vue';\nimport ModalComponent from '@/components/ModalComponent.vue';\nimport { translateStringOrLocale } from '@/i18n';\n\ntype SelectedItemType =\n | (undefined extends TId ? T : PartialSome<T, NonNullable<TId>>)\n | null;\n\nconst props = defineProps<{\n rows: T[] | null | undefined;\n i18nKey: string;\n usesDynamicTextKeys?: boolean;\n showSpinner?: boolean;\n getKey: (item: T, idx: number) => string | number;\n sortFields?: Readonly<SortField[]> | SortField;\n defaultSortfield?: SortField;\n defaultSortDirection?: SortDirection;\n comparers?: {\n [key in SortField]?: Comparator<\n RecurChildType<T, key> extends Array<unknown> | undefined\n ? ArrayItem<RecurChildType<T, key>>\n : RecurChildType<T, key>\n >;\n };\n skipSortOnContentChange?: boolean;\n groupColumnHeader?: boolean;\n columns: (SortField | `${SortField}.title` | null)[];\n /** Use if you have complex logic for deciding the column headers */\n getColumnHeader?: (column: SortField) => string;\n size?: 'table-xs' | 'table-sm' | 'table-md' | 'table-lg';\n columnHeaderClass?: VueClass;\n rowClass?: VueClass;\n /** Defaults to 'both' */\n pin?: 'rows' | 'cols' | 'both' | 'none';\n noZebra?: boolean;\n textColor?: FgColors;\n headerTextColor?: FgColors;\n noHeader?: boolean;\n delete?: {\n onDelete: (row: T) => Promise<void> | void;\n identificatorLabel?: string;\n title?: string;\n warning?: string;\n getIdentificator: (row: T) => localeValue | string;\n noConfirm?: boolean;\n };\n edit?: {\n title?: string;\n isSelectedItemValid: boolean;\n modalProps?: Omit<\n InstanceType<typeof ModalComponent>['$props'],\n 'showModal' | 'title'\n >;\n onSave: () => Promise<void> | void;\n };\n create?: {\n title?: string;\n idProperty: TId;\n onCreateClick: () => Promise<SelectedItemType> | SelectedItemType;\n buttonBelow?: boolean;\n };\n initialRowClass?: VueClass;\n}>();\n\ndefineOptions({\n inheritAttrs: false,\n});\nconst attrs = useAttrs();\n\nconst emit = defineEmits<{\n (e: 'update:selectedItem', row: SelectedItemType): void;\n (e: 'on:updateTriggered'): void;\n (e: 'remove:row', row: SelectedItemType): void;\n}>();\n\nconst slots = defineSlots<{\n beforeCreate: () => HTMLTableCellElement;\n afterCreate: () => HTMLTableCellElement;\n /** Should return the *content* (not `<th></th>`) for the column header (the first column) if you want a column header.\n * If you don't want a column header, do not use this slot. **Important:** the column header will stick if you scroll horizontally in mobile mode, so it is recommended to use this slot. */\n columnHeader?: (props: {\n item: ArrayItem<(typeof sortedValues)['value']>;\n }) => Element;\n /** Should return the Table Data cells for all column except the column header (if you have one), inlcuding `<td></td>` for each column. */\n columns: (props: {\n item: ArrayItem<(typeof sortedValues)['value']>;\n rowIndex: number;\n items: T[];\n }) => HTMLTableCellElement;\n editor: () => HTMLTableCellElement;\n}>();\n\nconst { t } = useI18n();\n\nconst _sortFields = computed((): SortField[] | undefined =>\n props.sortFields\n ? Array.isArray(props.sortFields)\n ? props.sortFields\n : [props.sortFields]\n : undefined,\n);\n\nconst { sortOnField, getHeaderClasses, sortedValues, isGrouped } = useSort(\n toRef(props, 'rows'),\n _sortFields.value,\n props.defaultSortfield ?? _sortFields.value?.[0],\n props.defaultSortDirection,\n props.comparers,\n props.skipSortOnContentChange,\n (field) => props.groupColumnHeader && field === props.columns[0],\n);\n\nconst columnList = computed(\n (): ({ key: SortField; label: string } | undefined)[] => {\n return props.columns.concat(props.delete ? [null] : []).map((col) => {\n const key = col?.replace('.title', '') as SortField;\n return col\n ? {\n key,\n label:\n props.getColumnHeader?.(key) ??\n t(\n `${props.i18nKey}.${col}${props.usesDynamicTextKeys ? '.label' : ''}`,\n ),\n }\n : undefined;\n });\n },\n);\n\nconst showDetailsModal = ref(false);\n\nfunction viewDetails(item: SelectedItemType, updateTriggerEvent?: MouseEvent) {\n if (updateTriggerEvent?.defaultPrevented) return;\n if (updateTriggerEvent) {\n emit('on:updateTriggered');\n }\n emit('update:selectedItem', item);\n if (!props.edit) return;\n showDetailsModal.value = true;\n}\n\nfunction closeDetails(keepNewRow?: boolean) {\n showDetailsModal.value = false;\n if (newItem.value && keepNewRow !== true) {\n emit('remove:row', newItem.value);\n }\n // Delay resetting the selected item to avoid information disappearing from the dialog before it's closed\n setTimeout(() => emit('update:selectedItem', null), 200);\n newItem.value = undefined;\n}\n\nconst newItem = ref<SelectedItemType>();\nasync function onCreateButtonClick() {\n newItem.value = await props.create?.onCreateClick();\n if (!newItem.value) return;\n viewDetails(newItem.value);\n}\n\nasync function onSave() {\n await props.edit?.onSave();\n closeDetails(true);\n}\n\nconst showDeleteModal = ref(false);\nconst itemToDelete = ref<T>();\nasync function doDelete() {\n if (!itemToDelete.value) return;\n await props.delete?.onDelete(itemToDelete.value);\n emit('remove:row', itemToDelete.value);\n showDeleteModal.value = false;\n itemToDelete.value = undefined;\n}\n\nfunction getDeleteText(\n key:\n | keyof OnlyKeysWithValsOfType<NonNullable<typeof props.delete>, string>\n | 'getIdentificator',\n) {\n if (key === 'getIdentificator') {\n if (!itemToDelete.value) {\n return t('tableComponent.delete.identificator');\n } else {\n return translateStringOrLocale(\n props.delete?.getIdentificator(itemToDelete.value) ??\n 'tableComponent.delete.identificator',\n ).value;\n }\n } else {\n return t(props.delete?.[key] ?? `tableComponent.delete.${key}`);\n }\n}\n</script>\n\n<template>\n <div v-if=\"!create?.buttonBelow\" :class=\"initialRowClass\">\n <slot name=\"beforeCreate\" />\n <ButtonComponent\n v-if=\"create\"\n :text=\"t(create?.title ?? 'tableComponent.create')\"\n @click=\"onCreateButtonClick\"\n />\n <slot name=\"afterCreate\" />\n </div>\n <div class=\"GnistTable\" v-bind=\"attrs\">\n <table\n class=\"table overflow-auto\"\n :class=\"[\n size,\n {\n 'text-gnist-black': !textColor,\n [`text-gnist-${textColor}`]: textColor,\n 'table-pin-rows':\n pin === 'rows' || pin === 'both' || pin === undefined,\n 'table-pin-cols':\n pin === 'cols' || pin === 'both' || pin === undefined,\n },\n ]\"\n >\n <thead\n v-if=\"!noHeader\"\n class=\"z-20\"\n :class=\"{\n 'text-gnist-black': !headerTextColor,\n [`text-gnist-${headerTextColor}`]: headerTextColor,\n }\"\n >\n <tr>\n <template v-for=\"(column, index) in columnList\" :key=\"column\">\n <th\n v-if=\"index === 0\"\n class=\"z-10\"\n :class=\"[\n column && getHeaderClasses(column.key),\n { 'w-0': !column },\n ]\"\n @click=\"column && sortOnField(column.key)\"\n >\n {{ column?.label ?? '' }}\n </th>\n <td\n v-else\n :class=\"[\n column && getHeaderClasses(column.key),\n { 'w-0': !column },\n ]\"\n @click=\"column && sortOnField(column.key)\"\n >\n {{ column?.label ?? '' }}\n </td>\n </template>\n </tr>\n </thead>\n <tbody>\n <tr v-if=\"!sortedValues\">\n <td\n :colspan=\"columns.length\"\n class=\"w-full items-center p-8 text-center\"\n >\n <div class=\"flex w-full flex-col items-center\">\n <LoadingSpinner v-if=\"showSpinner\" class=\"h-16 w-16\" />\n </div>\n </td>\n </tr>\n <template v-else>\n <tr\n v-for=\"(row, index) in sortedValues\"\n :key=\"getKey(row, index)\"\n class=\"bg-gnist-white hover:bg-gnist-blue-light-light\"\n :class=\"[\n rowClass,\n {\n 'even:bg-gnist-gray-light-light': !noZebra,\n 'cursor-pointer': edit,\n },\n ]\"\n @click=\"(ev) => viewDetails(row as SelectedItemType, ev)\"\n >\n <th\n v-if=\"slots.columnHeader && (row.isGroupHeader || !isGrouped)\"\n :rowspan=\"isGrouped ? row.groupSize : undefined\"\n :scope=\"isGrouped ? 'rowgroup' : undefined\"\n class=\"ColumnHeader z-10\"\n :class=\"[\n columnHeaderClass,\n { 'bg-gnist-white align-top': isGrouped },\n ]\"\n >\n <slot name=\"columnHeader\" :item=\"row\" />\n </th>\n <slot\n name=\"columns\"\n :item=\"row\"\n :row-index=\"index\"\n :items=\"sortedValues\"\n />\n <td\n v-if=\"props.delete\"\n class=\"ButtonRow cursor-default\"\n @click.stop\n >\n <ButtonComponent\n :text=\"t('buttons.delete')\"\n class=\"gnist-button gnist-button-danger\"\n @click.prevent=\"\n (ev) => {\n ev.preventDefault();\n itemToDelete = row;\n if (props.delete?.noConfirm) {\n doDelete();\n } else {\n showDeleteModal = true;\n }\n }\n \"\n />\n </td>\n </tr>\n </template>\n </tbody>\n </table>\n <ModalComponent\n :show-modal=\"showDeleteModal\"\n :title=\"getDeleteText('title')\"\n @close=\"\n () => {\n itemToDelete = undefined;\n showDeleteModal = false;\n }\n \"\n @handle-click=\"doDelete\"\n >\n <template #default>\n <p class=\"py-2\">\n <strong>{{ getDeleteText('identificatorLabel') }}: </strong>\n {{ getDeleteText('getIdentificator') }}\n </p>\n <p>\n {{ getDeleteText('warning') }}\n </p>\n </template>\n </ModalComponent>\n <ModalComponent\n :show-modal=\"showDetailsModal\"\n :title=\"t(props.edit?.title ?? 'tableComponent.detailsTitle')\"\n v-bind=\"props.edit?.modalProps\"\n @close=\"closeDetails\"\n >\n <template #default>\n <slot name=\"editor\" />\n </template>\n <template #buttons>\n <div className=\"flex justify-end\">\n <div class=\"gnist-button-group\">\n <ButtonComponent\n :text=\"t('buttons.cancel')\"\n @click=\"closeDetails\"\n />\n <ButtonComponent\n type=\"primary\"\n :text=\"t('buttons.save')\"\n :disabled=\"!edit?.isSelectedItemValid\"\n @click=\"onSave\"\n />\n </div>\n </div>\n </template>\n </ModalComponent>\n </div>\n <div v-if=\"create?.buttonBelow\" :class=\"initialRowClass\">\n <slot name=\"beforeCreate\" />\n <ButtonComponent\n v-if=\"create\"\n :text=\"t(create?.title ?? 'tableComponent.create')\"\n @click=\"onCreateButtonClick\"\n />\n <slot name=\"afterCreate\" />\n </div>\n</template>\n\n<style>\n.GnistTable {\n @apply max-h-[90vh] w-full max-w-full;\n @apply overflow-x-auto;\n @apply border-b;\n}\n.GnistTable:not([class*='max-h-']) {\n @apply sm:max-h-[unset];\n @apply sm:overflow-x-visible;\n}\n.ColumnHeader {\n min-width: clamp(30vw, 4rem, 40vw);\n @apply md:min-w-min;\n max-width: 40vw;\n}\n.ColumnHeader:not([class*='bg-']) {\n background-color: inherit;\n}\n.GnistTable .table-lg :where(thead, tfoot) {\n font-size: 1rem;\n}\n</style>\n","<script setup lang=\"ts\">\nimport ButtonComponent from '@/components/ButtonComponent.vue';\nimport MaterialIcon from '@/components/MaterialIcon.vue';\nimport ModalComponent from '@/components/ModalComponent.vue';\nimport TextInput from '@/components/forms/InputText.vue';\n\nimport type { ArrayItem } from '@/api/types';\nimport { defaultBlocksRouteName } from '@/utilities/routeUtils';\nimport {\n commentDocownerDiscard,\n useUnassessedComments,\n} from '@/api/commentoClient';\nimport { computed, ref, watch } from 'vue';\nimport { formatDate } from '@/utilities/formatDate';\nimport { socialPageRouteId } from '@/config';\nimport {\n stringCompareCaseInsensitive,\n undefinedCompare,\n} from '@/utilities/order';\nimport { translateStringOrLocale } from '@/i18n';\nimport { useI18n } from 'vue-i18n';\nimport {\n getChatPage,\n getChatPageParamFromId,\n suggestionPageIdPrefix,\n suggestionPageParam,\n type CommentAssessment,\n type chatPageId,\n} from '@/api/commentoTypes';\nimport type { RouteLocationNamedRaw } from 'vue-router';\nimport { SocialPageType } from '@/enums/SocialPageType';\nimport TableComponent from './TableComponent.vue';\n\nconst props = defineProps<{\n label: string;\n includeAllBlocks: boolean;\n getNonBlockComments: boolean;\n hideTypePrefix?: boolean;\n useModeratorEndpoint?: boolean;\n}>();\n\nconst emit = defineEmits<{\n (e: 'loaded', value: NonNullable<typeof discussions.value>): void;\n}>();\n\nconst { t } = useI18n();\n\nconst { result: discussions, loaded } = useUnassessedComments(\n 'DocumentOwner',\n props.includeAllBlocks,\n props.getNonBlockComments,\n);\nwatch(loaded, () => emit('loaded', discussions.value ?? []));\n\nconst comments = computed(() =>\n discussions.value?.map((d) => {\n const comment: CommentAssessment & {\n discussion:\n | {\n name: string;\n typePrefix: string;\n to: RouteLocationNamedRaw;\n type: SocialPageType;\n }\n | undefined;\n } = { ...d, discussion: undefined };\n if (d.block) {\n comment.discussion = {\n name: translateStringOrLocale(d.block.name).value,\n typePrefix: 'social.documents',\n to: {\n name: socialPageRouteId,\n params: {\n pageId: defaultBlocksRouteName,\n blockId: d.block.blockId,\n },\n },\n type: SocialPageType.BlockPage,\n };\n } else if (d.suggestion) {\n comment.discussion = {\n name: translateStringOrLocale(d.suggestion.title).value,\n typePrefix: 'social.suggestions',\n to: {\n name: socialPageRouteId + suggestionPageParam,\n params: {\n pageId: suggestionPageParam,\n discussionId: suggestionPageIdPrefix + d.suggestion.id,\n },\n },\n type: SocialPageType.SuggestionPage,\n };\n } else if (d.pagePath) {\n const chatpage = getChatPage(\n getChatPageParamFromId(d.pagePath as chatPageId),\n );\n comment.discussion = {\n name: t(chatpage.chatPageName),\n typePrefix: 'social.forum',\n to: {\n name: socialPageRouteId,\n params: {\n pageId: chatpage.id,\n blockId: 'comment', // Hack to match correct route when linking directly to a comment for a chatPage\n },\n },\n type: SocialPageType.ChatPage,\n };\n }\n if (!comment.discussion?.to.params) return comment;\n comment.discussion.to.params.commentId = d.commentHex;\n return comment;\n }),\n);\n\ntype CommentColumnKey = keyof ArrayItem<typeof comments.value>;\ntype CommentActionKey = 'NoAction' | 'Respond';\nconst commentColumns: (CommentColumnKey | CommentActionKey)[] = [\n 'block',\n 'date',\n 'user',\n 'html',\n 'Respond',\n 'NoAction',\n];\nconst reason = ref<string>('');\nconst discard = ref<{ hex: string } | null>(null);\n</script>\n\n<template>\n <section class=\"gnist-page-width py-8\">\n <h2 class=\"mb-4\">\n {{ t(label) }}\n </h2>\n <TableComponent\n sixe=\"table-xs\"\n column-header-class=\"max-w-20 md:max-w-full\"\n :rows=\"comments\"\n show-spinner\n i18n-key=\"admin.management.commenttable\"\n :get-key=\"(comment) => comment.commentHex\"\n :columns=\"commentColumns as CommentColumnKey[]\"\n :sort-fields=\"['discussion']\"\n :comparers=\"{\n discussion: undefinedCompare((a, b) =>\n stringCompareCaseInsensitive(a.name ?? '', b.name ?? ''),\n ),\n }\"\n >\n <template #columnHeader=\"{ item: comment }\">\n <RouterLink\n v-if=\"comment.discussion\"\n :to=\"comment.discussion.to\"\n class=\"break-words font-normal underline\"\n >\n <MaterialIcon class=\"no-underline\" aria-hidden=\"true\">\n tag\n </MaterialIcon>\n <template v-if=\"!hideTypePrefix\">\n {{ t(comment.discussion.typePrefix) }}:\n </template>\n {{ comment.discussion.name }}\n </RouterLink>\n </template>\n <template #columns=\"{ item: comment }\">\n <template v-if=\"comment.discussion\">\n <td class=\"whitespace-nowrap\">\n {{ formatDate(comment.date) }}\n </td>\n <td class=\"whitespace-nowrap\">\n {{ comment.user.name }}\n </td>\n <td>\n <!-- eslint-disable vue/no-v-html -->\n <div v-html=\"comment.html\" />\n </td>\n <td>\n <RouterLink\n class=\"underline\"\n :to=\"{\n ...comment.discussion.to,\n query: {\n edit: `${true}`,\n },\n }\"\n target=\"_blank\"\n @click=\"\n discussions =\n discussions?.filter(\n (d) => d.commentHex !== comment.commentHex,\n ) ?? null\n \"\n >\n <ButtonComponent\n type=\"primary\"\n :text=\"t('admin.management.docownerReply')\"\n />\n </RouterLink>\n </td>\n <td>\n <ButtonComponent\n :text=\"t('admin.management.commenttable.NoAction')\"\n @click=\"() => (discard = { hex: comment.commentHex })\"\n />\n </td>\n </template>\n </template>\n </TableComponent>\n <ModalComponent\n :show-modal=\"discard !== null\"\n :title=\"t('admin.management.docownerDiscard')\"\n @close=\"() => (discard = null)\"\n @handle-click=\"\n async () => {\n const discardHex = discard?.hex;\n if (!discardHex) return;\n await commentDocownerDiscard(\n { commentHex: discardHex },\n useModeratorEndpoint ? 'moderator-discard' : 'docowner-discard',\n reason,\n );\n discard = null;\n if (!discussions) return;\n discussions = discussions.filter((d) => d.commentHex !== discardHex);\n }\n \"\n >\n <template #default>\n <TextInput\n v-model=\"reason\"\n label=\"social.moderator.reasonLabel\"\n multiline\n />\n </template>\n </ModalComponent>\n </section>\n</template>\n","<script setup lang=\"ts\" generic=\"T extends string\">\nimport { useI18n } from 'vue-i18n';\n\ndefineProps<{\n tabs: Readonly<T[]>;\n modelValue: T;\n i18nKey: string;\n}>();\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: T): void;\n}>();\nconst { t } = useI18n();\n</script>\n\n<!--\n * This component uses Daisy UI Tabs (https://daisyui.com/components/tab/), but *without* the radio-button selector.\n * To use the radio-button selector, take a look at how that is used in relation to BlockContentTab.vue.\n-->\n<template>\n <div role=\"tablist\" class=\"tabs tabs-lifted\">\n <a\n v-for=\"tab in tabs\"\n :key=\"tab\"\n role=\"tab\"\n class=\"tab block truncate\"\n :class=\"{ 'tab-active': modelValue === tab }\"\n @click=\"emit('update:modelValue', tab)\"\n >\n {{ t(`${i18nKey}.${tab}`) }}\n </a>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport ButtonComponent from '@/components/ButtonComponent.vue';\nimport CommentAssessmentOverview from '@/components/CommentAssessmentOverview.vue';\nimport ContentPage from '../components/ContentPage.vue';\nimport MaterialIcon from '@/components/MaterialIcon.vue';\nimport ModalComponent from '@/components/ModalComponent.vue';\nimport TextInput from '@/components/forms/InputText.vue';\n\nimport { useI18n } from 'vue-i18n';\nimport { type ArrayItem } from '@/api/types';\nimport { formatDate } from '@/utilities/formatDate';\nimport {\n stringCompareCaseInsensitive,\n undefinedCompare,\n} from '@/utilities/order';\nimport {\n commentModeratorDelete,\n commentModeratorVerify,\n useUnassessedComments,\n} from '@/api/commentoClient';\nimport { computed, ref } from 'vue';\nimport { translateStringOrLocale } from '@/i18n';\nimport { defaultBlocksRouteName } from '@/utilities/routeUtils';\nimport {\n getChatPages,\n suggestionPageParam,\n suggestionPageIdPrefix,\n} from '@/api/commentoTypes';\nimport { socialPageRouteId } from '@/config';\nimport SimpleTabSelector from '@/components/SimpleTabSelector.vue';\nimport TableComponent from '@/components/TableComponent.vue';\n\nconst { t } = useI18n();\nconst { result: discussions } = useUnassessedComments('Moderator');\nconst chatPages = getChatPages();\n\nconst comments = computed(() =>\n discussions.value?.map((d) => ({\n ...d,\n block: d.block\n ? { ...d.block, name: translateStringOrLocale(d.block.name).value }\n : undefined,\n suggestion: d.suggestion\n ? {\n ...d.suggestion,\n title: translateStringOrLocale(d.suggestion.title).value,\n }\n : undefined,\n chatPage: chatPages.find((p) => d.pagePath?.endsWith(p.id)),\n })),\n);\n\ntype ColumnKey = keyof ArrayItem<typeof comments.value>;\ntype ActionKey = 'OK' | 'Delete';\nconst commentColumns: (ColumnKey | ActionKey)[] = [\n 'block',\n 'date',\n 'user',\n 'html',\n 'OK',\n 'Delete',\n];\n\nlet onCloseModal: (() => Promise<string>) | (() => string) | null = null;\nconst showModal = ref(false);\nconst modalTitle = ref<string>('');\nconst modalButtonText = ref<string>('');\nconst reason = ref<string>('');\n\nfunction deleteComment(comment: { commentHex: string; html: string }) {\n reason.value = '';\n modalTitle.value = t('discussion.deleteCommentConfirmation');\n modalButtonText.value = t('buttons.delete');\n onCloseModal = async () => {\n await commentModeratorDelete(comment, reason.value);\n return comment.commentHex;\n };\n showModal.value = true;\n}\nfunction verifyComment(commentHex: string) {\n reason.value = '';\n modalTitle.value = t('discussion.verifyCommentConfirmation');\n modalButtonText.value = t('buttons.ok');\n onCloseModal = async () => {\n await commentModeratorVerify({ commentHex }, reason.value);\n return commentHex;\n };\n showModal.value = true;\n}\nconst tabs = [\n 'moderatorList',\n 'notdocsForumHeader',\n 'moderatordocsForumHeader',\n] as const;\nconst activeTab = ref<(typeof tabs)[number]>('moderatorList');\n</script>\n\n<template>\n <ContentPage\n :title=\"t('social.moderator.title')\"\n :description=\"t('social.moderator.description')\"\n :hide-description-mobile=\"true\"\n class=\"bg-gnist-gray-light-light\"\n >\n <SimpleTabSelector\n v-model=\"activeTab\"\n :tabs=\"tabs\"\n i18n-key=\"admin.management\"\n />\n <section v-show=\"activeTab === 'moderatorList'\" class=\"py-8\">\n <h2 class=\"mb-4\">\n {{ t('admin.management.moderatorList') }}\n </h2>\n <TableComponent\n size=\"table-xs\"\n column-header-class=\"max-w-20 md:max-w-full\"\n :rows=\"comments\"\n show-spinner\n i18n-key=\"admin.management.commenttable\"\n :get-key=\"(comment) => comment.commentHex\"\n :columns=\"commentColumns as ColumnKey[]\"\n sort-fields=\"block\"\n :comparers=\"{\n block: undefinedCompare((a, b) =>\n stringCompareCaseInsensitive(a.name ?? '', b.name ?? ''),\n ),\n }\"\n >\n <template #columnHeader=\"{ item: comment }\">\n <template v-if=\"comment.block\">\n <RouterLink\n :to=\"{\n name: socialPageRouteId,\n params: {\n pageId: defaultBlocksRouteName,\n blockId: comment.block.blockId,\n commentId: comment.commentHex,\n },\n }\"\n class=\"break-words font-normal underline hover:bg-gnist-gray-light\"\n target=\"_blank\"\n >\n <MaterialIcon class=\"no-underline\" aria-hidden=\"true\">\n tag\n </MaterialIcon>\n {{ t('social.documents') }}: {{ comment.block.name }}\n </RouterLink>\n </template>\n <template v-if=\"comment.chatPage\">\n <RouterLink\n class=\"break-words font-normal underline hover:bg-gnist-gray-light\"\n :to=\"{\n name: socialPageRouteId,\n params: {\n pageId: comment.chatPage.id,\n blockId: 'comment', // Hack to match correct route when linking directly to a comment for a chatPage\n commentId: comment.commentHex,\n },\n }\"\n target=\"_blank\"\n >\n <MaterialIcon class=\"no-underline\" aria-hidden=\"true\">\n tag\n </MaterialIcon>\n {{ t('social.forum') }}:\n {{ t(comment.chatPage.chatPageName) }}\n </RouterLink>\n </template>\n <template v-if=\"comment.suggestion\">\n <RouterLink\n class=\"break-words font-normal underline hover:bg-gnist-gray-light\"\n :to=\"{\n name: socialPageRouteId + suggestionPageParam,\n params: {\n pageId: suggestionPageParam,\n discussionId: suggestionPageIdPrefix + comment.suggestion.id,\n commentId: comment.commentHex,\n },\n }\"\n target=\"_blank\"\n >\n <MaterialIcon class=\"no-underline\" aria-hidden=\"true\">\n tag\n </MaterialIcon>\n {{ t('social.suggestions') }}:\n {{ comment.suggestion.title }}\n </RouterLink>\n </template>\n </template>\n <template #columns=\"{ item: comment }\">\n <td class=\"whitespace-nowrap\">\n {{ formatDate(comment.date) }}\n </td>\n <td class=\"whitespace-nowrap\">\n {{ comment.user.name }}\n </td>\n <td>\n <!-- eslint-disable vue/no-v-html -->\n <div v-html=\"comment.html\" />\n </td>\n <td>\n <ButtonComponent\n type=\"primary\"\n :text=\"t('discussion.verify')\"\n @click=\"() => verifyComment(comment.commentHex)\"\n />\n </td>\n <td>\n <ButtonComponent\n :text=\"t('discussion.remove')\"\n @click=\"() => deleteComment(comment)\"\n />\n </td>\n </template>\n </TableComponent>\n\n <ModalComponent\n :show-modal=\"showModal\"\n :title=\"modalTitle\"\n :button-text=\"modalButtonText\"\n primary-button-type=\"primary\"\n @close=\"() => (showModal = false)\"\n @handle-click=\"\n async () => {\n showModal = false;\n const commentHex = await onCloseModal?.();\n if (!discussions || !commentHex) return;\n discussions = discussions.filter(\n (i) => i.commentHex !== commentHex,\n );\n onCloseModal = null;\n }\n \"\n >\n <template #default>\n <TextInput\n v-model=\"reason\"\n label=\"social.moderator.reasonLabel\"\n multiline\n />\n </template>\n </ModalComponent>\n </section>\n <CommentAssessmentOverview\n v-show=\"activeTab === 'notdocsForumHeader'\"\n label=\"admin.management.notdocsForumHeader\"\n :include-all-blocks=\"false\"\n :get-non-block-comments=\"true\"\n use-moderator-endpoint\n />\n <CommentAssessmentOverview\n v-show=\"activeTab === 'moderatordocsForumHeader'\"\n label=\"admin.management.moderatordocsForumHeader\"\n :include-all-blocks=\"true\"\n :get-non-block-comments=\"false\"\n use-moderator-endpoint\n />\n </ContentPage>\n</template>\n","import { apiUrl } from '@/config';\nimport {\n compose,\n composeWithRefresh,\n type ComposableResult,\n type ComposableResultWithRefresh,\n composeLazy,\n} from './composable';\nimport {\n translateCategory,\n type Block,\n type BlockCreateDTO,\n type Guid,\n type TranslatedCategory,\n type UpdateBlock,\n} from './types';\nimport { translateStringOrLocaleWithDefault } from '@/i18n';\nimport { throwErrorPageTrigger } from '@/utilities/throwErrorPageTrigger';\n\nconst blockUrl = apiUrl + '/blocks';\n\nconst allBlocksLazy = composeLazy(() =>\n getTranslatedBlocks({ mode: 'adminview' }, true),\n);\n\nexport function useBlock(\n id: Guid,\n useDraftReaderEndpoint = false,\n): ComposableResultWithRefresh<Block> {\n const refresh = async () => getBlock(id, undefined, useDraftReaderEndpoint);\n return composeWithRefresh(refresh);\n}\n\nexport async function getBlock(\n id: Guid,\n versionNumber?: string,\n useDraftReaderEndpoint?: boolean,\n): Promise<Block> {\n const search =\n typeof versionNumber === 'string' ? `?versionNumber=${versionNumber}` : '';\n const response = await fetch(\n `${blockUrl}/${id}${useDraftReaderEndpoint ? '/withdrafts' : ''}${search}`,\n {\n method: 'GET',\n credentials: 'include',\n },\n );\n throwErrorPageTrigger(response);\n if (!response.ok) throw new Error(await response.text());\n return await response.json();\n}\n\nexport type TranslatedBlock = Omit<\n Block,\n 'name' | 'description' | 'category'\n> & {\n name: string;\n description: string;\n category?: TranslatedCategory;\n};\nexport function translateBlock(block: Block): TranslatedBlock {\n return {\n ...block,\n name: translateStringOrLocaleWithDefault(\n block.name,\n 'language.unknownValue',\n ).value,\n description: translateStringOrLocaleWithDefault(\n block.description,\n 'language.unknownValue',\n ).value,\n category: block.category ? translateCategory(block.category) : undefined,\n };\n}\n\nexport type GetBlocksOptions =\n | { mode: 'normal'; includeBacklog?: boolean }\n | {\n mode: 'adminview';\n forManagementList?: boolean;\n forMyDocumentsList?: boolean;\n }\n | { mode: 'approval' };\n\nexport function useBlocks(\n options: GetBlocksOptions,\n): ComposableResult<TranslatedBlock[]> {\n return compose(getTranslatedBlocks(options));\n}\nexport function useBlockListLazy(): ComposableResult<TranslatedBlock[]> {\n allBlocksLazy.init();\n return allBlocksLazy;\n}\n\nasync function getTranslatedBlocks(\n options: GetBlocksOptions,\n sort = false,\n): Promise<TranslatedBlock[]> {\n const blocks = await getBlocks(options);\n const translatedBlocks = blocks.map((block) => translateBlock(block));\n if (sort) translatedBlocks.sort((a, b) => a.name.localeCompare(b.name));\n return translatedBlocks;\n}\n\nasync function getBlocks(options: GetBlocksOptions): Promise<Block[]> {\n const url =\n options.mode == 'approval'\n ? `${blockUrl}/approvals/list`\n : options.mode === 'adminview'\n ? `${blockUrl}/editlist`\n : `${blockUrl}`;\n const opts = { ...options } as Partial<GetBlocksOptions>;\n delete opts.mode;\n const query =\n Object.keys(options).length > 0\n ? `?${new URLSearchParams(options as Record<string, string>)}`\n : '';\n const response = await fetch(`${url}${query}`, {\n method: 'GET',\n credentials: 'include',\n });\n throwErrorPageTrigger(response);\n if (!response.ok) throw new Error(await response.text());\n return await response.json();\n}\n\nexport const createBlock = async (block: BlockCreateDTO): Promise<Block> => {\n const response = await fetch(blockUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify(block),\n });\n if (!response.ok) throw new Error('error.create_block_failed');\n return await response.json();\n};\n\nexport const updateBlock = async (block: UpdateBlock): Promise<void> => {\n const response = await fetch(blockUrl + '/' + block.blockId, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify(block),\n });\n if (!response.ok) throw new Error('error.update_block_failed');\n};\n\nexport async function deleteBlock(blockId: Guid): Promise<void> {\n const response = await fetch(`${blockUrl}/${blockId}`, {\n method: 'DELETE',\n credentials: 'include',\n });\n if (!response.ok) throw new Error('error.delete_block_failed');\n}\n","<script lang=\"ts\" setup>\nimport { ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nconst { t } = useI18n();\n\nconst showHelp = ref(false);\n</script>\n<template>\n <div class=\"border-1 border-solid border-black\">\n <button\n class=\"discussion-markdown-button\"\n type=\"button\"\n @click=\"() => (showHelp = !showHelp)\"\n >\n <b>M ↓</b>   Markdown\n </button>\n <div\n v-if=\"showHelp\"\n class=\"discussion-markdown-help grid grid-cols-2 grid-cols-[max-content_auto] gap-x-8 border p-2\"\n >\n <div>\n <i>{{ t('discussion.markdown.italics') }}</i>\n </div>\n <div>\n {{ t('discussion.markdown.surroundText') }}\n <pre>*{{ t('discussion.markdown.asterisks') }}*</pre>\n </div>\n\n <div>\n <b>{{ t('discussion.markdown.bold') }}</b>\n </div>\n <div>\n {{ t('discussion.markdown.surroundText') }}\n <pre>**{{ t('discussion.markdown.doubleAsterisks') }}**</pre>\n </div>\n\n <div>\n <a href=\"https://example.com\" class=\"underline\">{{\n t('discussion.markdown.hyperlink')\n }}</a>\n </div>\n <div>\n <pre>[hyperlink](https://example.com)</pre>\n {{ t('discussion.markdown.bareUrl') }}\n </div>\n\n <div>\n <pre>{{ t('discussion.markdown.code') }}</pre>\n </div>\n <div>\n {{ t('discussion.markdown.surroundText') }}\n <pre>`{{ t('discussion.markdown.backticks') }}`</pre>\n </div>\n\n <div>\n <s>{{ t('discussion.markdown.strikethrough') }}</s>\n </div>\n <div>\n {{ t('discussion.markdown.surroundText') }}\n <pre>~~{{ t('discussion.markdown.tildes') }}~~</pre>\n </div>\n\n <div>\n <blockquote>{{ t('discussion.markdown.quote') }}</blockquote>\n </div>\n <div>\n {{ t('discussion.markdown.prefix') }}\n <pre>></pre>\n </div>\n </div>\n </div>\n</template>\n<style scoped>\n.discussion-markdown-help pre {\n display: inline;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, ref } from 'vue';\nimport ButtonComponent from '../ButtonComponent.vue';\nimport MarkdownHelp from './MarkdownHelp.vue';\nimport type { Comment } from '@/api/commentoTypes';\nimport { useI18n } from 'vue-i18n';\n\nconst { t } = useI18n();\n\nconst props = defineProps<{\n existingComment?: Comment;\n}>();\n\nconst emit = defineEmits<{\n (e: 'submitComment', content: string): void;\n}>();\n\nconst commentContent = ref<string>(props.existingComment?.markdown ?? '');\n\nconst canSave = computed(() => {\n return commentContent.value != '';\n});\n\nfunction submit() {\n emit('submitComment', commentContent.value);\n commentContent.value = '';\n}\n</script>\n\n<template>\n <form class=\"block pt-1\" @submit.prevent=\"submit\">\n <div class=\"relative flex items-center justify-center\">\n <label for=\"comment\" class=\"sr-only\">{{\n t('discussion.addComment')\n }}</label>\n <textarea\n id=\"comment\"\n v-model=\"commentContent\"\n name=\"comment\"\n class=\"min-h inline-block h-32 w-full overflow-auto whitespace-pre-wrap rounded border border-[rgba(50,50,93,.1)] p-2 text-[#525f7f] outline-0 placeholder:text-center placeholder:leading-[6rem]\"\n :placeholder=\"t('discussion.addComment')\"\n />\n </div>\n <div class=\"flex w-full items-start py-4\">\n <MarkdownHelp />\n <div class=\"grow\" />\n <ButtonComponent\n :submit=\"true\"\n type=\"primary\"\n :disabled=\"!canSave\"\n :text=\"\n props.existingComment\n ? t('discussion.saveChanges')\n : t('discussion.addComment')\n \"\n />\n </div>\n </form>\n</template>\n","<script lang=\"ts\">\nconst badgeRoles = [\n 'administrator',\n 'editor',\n 'docowner',\n 'moderator',\n] as const satisfies Readonly<RoleName[]>;\ntype BadgeRole = (typeof badgeRoles)[number];\nexport function hasBadgeRole(user: Pick<User, 'roles'> | null): boolean {\n if (!user?.roles) return false;\n return !!user.roles?.find((r) => badgeRoles.includes(r as BadgeRole));\n}\n/** The badge should only display one role. This decides which. */\nfunction getBadgeRole(comment: ThreadComment): BadgeRole | null {\n if (\n comment.commenterUserRoles?.includes('docowner') &&\n comment.commenterOwnsPageBlock === true\n ) {\n return 'docowner';\n } else if (comment.commenterUserRoles?.includes('moderator')) {\n return 'moderator';\n } else if (comment.commenterUserRoles?.includes('editor')) {\n return 'editor';\n } else if (comment.commenterUserRoles?.includes('administrator')) {\n return 'administrator';\n } else return null;\n}\n</script>\n<script setup lang=\"ts\">\nimport type { RoleName } from '@/api/auth';\nimport type { ThreadComment } from '@/api/commentoTypes';\nimport type { Colors, User } from '@/api/types';\nimport { computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nconst { t } = useI18n();\n\nconst colorMapping: { [key in BadgeRole]: Colors } = {\n administrator: 'sp-blue-light',\n editor: 'orange',\n moderator: 'green',\n docowner: 'purple',\n};\n\nconst props = defineProps<{\n comment: ThreadComment;\n}>();\nconst badgeValue = computed((): BadgeRole | null =>\n getBadgeRole(props.comment),\n);\n</script>\n\n<template>\n <p\n v-if=\"badgeValue\"\n class=\"badge badge-outline badge-sm border-gnist-gray\"\n :class=\"[`bg-gnist-${colorMapping[badgeValue]}`]\"\n >\n {{ t(`userAdmin.manualRoles.values.${badgeValue}`, badgeValue) }}\n </p>\n</template>\n","export function firstParam<T>(param: T | T[] | null | undefined): T | null {\n if (param === null || param === undefined) return null;\n if (Array.isArray(param)) return param.length > 0 ? param[0] : null;\n return param;\n}\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { colorFromString, timeDifference } from './util';\nimport {\n commentDelete,\n commentEdit,\n commentNew,\n pageUpdate,\n vote,\n commentModeratorDelete,\n} from '@/api/commentoClient';\nimport type { Discussion, ThreadComment } from '@/api/commentoTypes';\nimport WriteComment from './WriteComment.vue';\nimport RoleBadge, { hasBadgeRole } from '../RoleBadge.vue';\nimport MaterialIcon from '@/components/MaterialIcon.vue';\nimport { useI18n } from 'vue-i18n';\nimport { useStoreAbility } from '@/abilities';\nimport { useCurrentUser } from '@/api/auth';\nimport type { SocialPageType } from '@/enums/SocialPageType';\nimport { useRoute } from 'vue-router';\nimport { firstParam } from '@/utilities/firstParam';\n\nconst userInfo = useCurrentUser();\nconst hasBadge = hasBadgeRole(userInfo.value);\n\nconst props = defineProps<{\n comment: ThreadComment;\n discussion: Discussion;\n discussionType: SocialPageType;\n}>();\n\nconst { can } = useStoreAbility();\n\nconst { t } = useI18n();\n\nconst route = useRoute();\nconst isLinkComment = route.params.commentId === props.comment.commentHex;\nconst showReplyToComment = ref<boolean>(\n firstParam(route.query['edit']) !== null && isLinkComment,\n);\n\nfunction toggleReply() {\n showReplyToComment.value = !showReplyToComment.value;\n}\n\nconst showEditComment = ref<boolean>(false);\n\nfunction toggleEdit() {\n showEditComment.value = !showEditComment.value;\n}\n\nconst isCommentAuthor = computed(() => {\n return props.comment.commenter?.userId === userInfo.value?.id;\n});\n\nconst isAuthenticated = computed(() => !!userInfo.value);\n\nfunction saveComment(markdown: string) {\n if (userInfo.value) {\n commentEdit(\n props.comment,\n markdown,\n props.discussion.attributes.id,\n props.discussionType,\n );\n\n toggleEdit();\n }\n}\n\nasync function saveCommentReply(markdown: string) {\n if (userInfo.value) {\n await commentNew(\n props.discussion,\n props.comment.commentHex,\n markdown,\n userInfo.value,\n props.discussion.attributes.id,\n props.discussionType,\n );\n }\n\n toggleReply();\n}\n\nfunction deleteComment() {\n if (confirm(t('discussion.deleteCommentConfirmation'))) {\n commentDelete(props.comment);\n }\n}\n\nfunction moderatorDeleteComment() {\n if (confirm(t('discussion.deleteCommentConfirmation'))) {\n commentModeratorDelete(props.comment);\n }\n}\n\nconst upvoteClass = computed(() => {\n return {\n '!font-normal': props.comment.direction <= 0,\n '!font-bold': props.comment.direction > 0,\n };\n});\n\nconst downvoteClass = computed(() => {\n return {\n '!font-normal': props.comment.direction >= 0,\n '!font-bold': props.comment.direction < 0,\n };\n});\n\nfunction voteUp() {\n if (userInfo.value) {\n vote(props.comment, props.comment.direction == 1 ? 0 : 1);\n }\n}\n\nfunction voteDown() {\n if (userInfo.value) {\n vote(props.comment, props.comment.direction == -1 ? 0 : -1);\n }\n}\n\nconst color = computed(() => {\n return colorFromString(props.comment.commenter?.userId ?? t('anonymous'));\n});\n\nconst timeAgo = computed(() => {\n return timeDifference(new Date(), new Date(props.comment.creationDate), t);\n});\n\nconst isSticky = computed(() => {\n return (\n props.comment.commentHex == props.discussion.attributes.stickyCommentHex\n );\n});\n\nfunction setSticky(): void {\n pageUpdate(\n props.discussion,\n props.discussion.attributes.isLocked,\n props.comment.commentHex,\n );\n}\n\nfunction removeSticky(): void {\n pageUpdate(props.discussion, props.discussion.attributes.isLocked, 'none');\n}\n\nconst collapsed = ref<boolean>(false);\n\nfunction toggleCollapse() {\n collapsed.value = !collapsed.value;\n}\n</script>\n\n<template>\n <div\n :id=\"`comment-${comment.commentHex}`\"\n class=\"comment-card border border-solid border-gnist-gray bg-gnist-white pl-4 pt-4 text-gnist-black transition-all duration-1000\"\n :class=\"{ 'bg-gnist-yellow bg-opacity-25': isLinkComment }\"\n :style=\"`border-left: 4px solid ${color};`\"\n >\n <div\n class=\"mb-1 grid grid-cols-[min-content_1fr_1rem_max-content] grid-rows-[1fr_max-content] justify-between gap-y-1 md:gap-y-0\"\n >\n <div\n class=\"text-xml col-start-1 row-start-1 mr-2 flex h-10 w-10 items-center justify-center rounded-full text-gnist-white md:row-span-2\"\n :style=\"`background: ${color}`\"\n aria-hidden=\"true\"\n >\n {{ (comment.commenter?.name ?? t('anonymous')).charAt(0) }}\n </div>\n <div class=\"flex flex-col-reverse gap-x-2 lg:flex-row\">\n <div\n class=\"col-span-2 col-start-2 row-start-1 lg:leading-snug\"\n :class=\"hasBadge ? 'line-clamp-2' : 'line-clamp-3'\"\n >\n {{ comment.commenter?.name ?? t('anonymous') }}\n </div>\n <RoleBadge :comment=\"comment\" class=\"lg:self-center\" />\n </div>\n <div\n class=\"text-grey col-span-3 col-start-1 row-start-2 ml-2 text-xs md:col-start-2 md:ml-0\"\n >\n <span class=\"comment-score inline\">\n {{ comment.score }} {{ t('discussion.points') }}\n </span>\n <span class=\"inline\">\n {{ `  ·  ${timeAgo}` }}\n </span>\n </div>\n\n <div\n class=\"col-span-2 col-start-3 row-start-1 flex md:row-span-2 md:row-start-1\"\n >\n <template v-if=\"!comment.deleted\">\n <button\n v-if=\"isCommentAuthor\"\n :title=\"t('discussion.remove')\"\n class=\"w-[36px] rounded-full px-2 hover:bg-gnist-gray-light-light\"\n @click=\"deleteComment\"\n >\n <MaterialIcon aria-hidden=\"true\" class=\"text-lg text-gnist-red\">\n delete\n </MaterialIcon>\n </button>\n <button\n v-else-if=\"can('delete', 'Comment')\"\n :title=\"t('discussion.remove')\"\n class=\"w-[36px] rounded-full px-2 hover:bg-gnist-gray-light-light\"\n @click=\"moderatorDeleteComment\"\n >\n <MaterialIcon aria-hidden=\"true\" class=\"text-lg text-gnist-red\">\n delete\n </MaterialIcon>\n </button>\n\n <button\n v-if=\"\n comment.parentHex === 'root' &&\n !isSticky &&\n can('update', 'Discussion')\n \"\n :title=\"t('discussion.sticky')\"\n class=\"w-[36px] rounded-full px-2 hover:bg-gnist-gray-light-light\"\n @click=\"setSticky\"\n >\n <span\n aria-hidden=\"true\"\n role=\"img\"\n class=\"material-symbols-rounded text-xl text-gnist-gray\"\n >grade</span\n >\n </button>\n\n <button\n v-if=\"isSticky && can('update', 'Discussion')\"\n :title=\"t('discussion.unsticky')\"\n class=\"w-[36px] rounded-full px-2 hover:bg-gnist-gray-light-light\"\n :disabled=\"!can('update', 'Discussion')\"\n @click=\"removeSticky\"\n >\n <MaterialIcon aria-hidden=\"true\" class=\"text-xl text-[#f59f00]\">\n star\n </MaterialIcon>\n </button>\n\n <button\n v-if=\"isAuthenticated && isCommentAuthor && !showEditComment\"\n :title=\"t('discussion.edit')\"\n class=\"w-[36px] rounded-full px-2 hover:bg-gnist-gray-light-light\"\n @click=\"toggleEdit\"\n >\n <MaterialIcon aria-hidden=\"true\" class=\"text-grey text-lg\">\n edit\n </MaterialIcon>\n </button>\n\n <button\n v-if=\"showEditComment\"\n :title=\"t('discussion.close')\"\n class=\"w-[36px] rounded-full px-2 hover:bg-gnist-gray-light-light\"\n @click=\"toggleEdit\"\n >\n <MaterialIcon aria-hidden=\"true\" class=\"text-grey text-xl\">\n close\n </MaterialIcon>\n </button>\n\n <button\n v-if=\"isAuthenticated && !isCommentAuthor && !showReplyToComment\"\n :title=\"t('discussion.reply')\"\n class=\"w-[36px] rounded-full px-2 hover:bg-gnist-gray-light-light\"\n @click=\"toggleReply\"\n >\n <MaterialIcon aria-hidden=\"true\" class=\"text-grey text-xl\">\n reply\n </MaterialIcon>\n </button>\n\n <button\n v-if=\"isAuthenticated && showReplyToComment\"\n :title=\"t('discussion.close')\"\n class=\"w-[36px] rounded-full px-2 hover:bg-gnist-gray-light-light\"\n @click=\"toggleReply\"\n >\n <MaterialIcon aria-hidden=\"true\" class=\"text-grey text-xl\">\n close\n </MaterialIcon>\n </button>\n\n <button\n v-if=\"isAuthenticated && !isCommentAuthor\"\n :title=\"t('discussion.upvote')\"\n class=\"comment-upvote w-[36px] rounded-full hover:bg-gnist-gray-light-light\"\n @click=\"voteUp\"\n >\n <MaterialIcon\n aria-hidden=\"true\"\n class=\"text-grey text-3xl\"\n :class=\"upvoteClass\"\n >\n expand_less\n </MaterialIcon>\n </button>\n\n <button\n v-if=\"isAuthenticated && !isCommentAuthor\"\n :title=\"t('discussion.downvote')\"\n class=\"w-[36px] rounded-full hover:bg-gnist-gray-light-light\"\n @click=\"voteDown\"\n >\n <MaterialIcon\n aria-hidden=\"true\"\n class=\"text-grey text-3xl\"\n :class=\"downvoteClass\"\n >\n expand_more\n </MaterialIcon>\n </button>\n </template>\n\n <button\n v-if=\"!collapsed && comment.children.length > 0\"\n :title=\"t('discussion.collapse')\"\n class=\"w-[36px] rounded-full px-2 hover:bg-gnist-gray-light-light\"\n @click=\"toggleCollapse\"\n >\n <MaterialIcon aria-hidden=\"true\" class=\"text-grey text-xl\">\n remove\n </MaterialIcon>\n </button>\n\n <button\n v-if=\"collapsed && comment.children.length > 0\"\n :title=\"t('discussion.expand')\"\n class=\"w-[36px] rounded-full px-2 hover:bg-gnist-gray-light-light\"\n @click=\"toggleCollapse\"\n >\n <MaterialIcon aria-hidden=\"true\" class=\"text-grey text-xl\">\n add\n </MaterialIcon>\n </button>\n </div>\n </div>\n\n <div>\n <div class=\"comment-body mx-2 pb-4 text-gnist-black lg:ml-12\">\n <!-- eslint-disable vue/no-v-html -->\n <div\n v-if=\"!showEditComment || !isAuthenticated\"\n v-html=\"comment.html\"\n />\n <!--eslint-enable-->\n <WriteComment\n v-if=\"isAuthenticated && showEditComment\"\n class=\"mr-4 mt-4\"\n :existing-comment=\"comment\"\n @submit-comment=\"saveComment\"\n />\n <WriteComment\n v-if=\"isAuthenticated && showReplyToComment\"\n class=\"mr-4 mt-4\"\n @submit-comment=\"saveCommentReply\"\n />\n </div>\n <div\n v-if=\"comment.children.length && !collapsed\"\n class=\"comment-children\"\n >\n <CommentCard\n v-for=\"child in comment.children\"\n :key=\"child.commentHex\"\n :comment=\"child\"\n :discussion=\"discussion\"\n :discussion-type=\"discussionType\"\n />\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.comment-body :deep(p) {\n margin-top: 6px;\n margin-bottom: 6px;\n}\n\n.comment-body :deep(a) {\n text-decoration: underline;\n}\n\n.comment-body :deep(blockquote) {\n margin: 0 0 0 8px;\n padding: 0 0 0 5px;\n border-left: 2px solid #adb5bd;\n color: #707880;\n}\n\n.comment-children .comment-card {\n border-right-width: 0;\n border-bottom-width: 0;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport { colorFromString } from './util';\nimport { useCurrentUser } from '@/api/auth';\nimport { useI18n } from 'vue-i18n';\n\nconst { t } = useI18n();\n\nconst userInfo = useCurrentUser();\n\nconst color = computed(() => {\n return colorFromString(userInfo.value?.id ?? t('anonymous'));\n});\n</script>\n\n<template>\n <div class=\"mb-1 flex h-10 flex-row\">\n <div\n class=\"text-xml mr-2.5 flex h-10 w-10 items-center justify-center rounded-full text-gnist-white\"\n :style=\"`background: ${color}`\"\n >\n {{ (userInfo?.firstName ?? t('anonymous')).charAt(0) }}\n </div>\n <div class=\"text-p2 flex items-center\">\n {{ `${userInfo?.firstName} ${userInfo?.lastName}` }}\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { SortStrategy } from '@/api/commentoTypes';\nimport { useI18n } from 'vue-i18n';\n\nconst { t } = useI18n();\n\ndefineProps<{\n sortStrategy: SortStrategy | null;\n}>();\n\ndefineEmits<{\n (e: 'setSortStrategy', sortStrategy: SortStrategy): void;\n}>();\n</script>\n\n<template>\n <div>\n <div\n class=\"commenter-sort-policy-buttons-container mt-4 flex justify-end text-sm\"\n >\n <div class=\"commenter-sort-policy-buttons\">\n <button>\n <a\n class=\"commenter-sort-policy-button commenter-sort-policy-button-selected mx-2\"\n :class=\"{ 'text-[#3b5bdb]': sortStrategy == 'score-desc' }\"\n @click=\"$emit('setSortStrategy', 'score-desc')\"\n >{{ t('discussion.upvotes') }}</a\n >\n </button>\n <button>\n <a\n class=\"commenter-sort-policy-button mx-2\"\n :class=\"{ 'text-[#3b5bdb]': sortStrategy == 'creationdate-desc' }\"\n @click=\"$emit('setSortStrategy', 'creationdate-desc')\"\n >{{ t('discussion.newest') }}</a\n >\n </button>\n <button>\n <a\n class=\"commenter-sort-policy-button mx-2\"\n :class=\"{ 'text-[#3b5bdb]': sortStrategy == 'creationdate-asc' }\"\n @click=\"$emit('setSortStrategy', 'creationdate-asc')\"\n >{{ t('discussion.oldest') }}</a\n >\n </button>\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport CommentCard from './CommentCard.vue';\nimport WriteComment from './WriteComment.vue';\nimport Commenter from './CommentCommenter.vue';\nimport { commentNew, useDiscussion, pageUpdate } from '@/api/commentoClient';\nimport type {\n ThreadComment,\n SortFunction,\n SortStrategy,\n commentPageId,\n} from '@/api/commentoTypes';\nimport CommentSortPolicy from './CommentSortPolicy.vue';\nimport { nextTick, ref, watch } from 'vue';\nimport { useStoreAbility } from '@/abilities';\nimport { useCurrentUser } from '@/api/auth';\nimport { useI18n } from 'vue-i18n';\nimport type { SocialPageType } from '@/enums/SocialPageType';\nimport { watchEffect } from 'vue';\n\nconst { t } = useI18n();\n\nconst props = defineProps<{\n discussionId: commentPageId;\n /** Used when creating new discussions outside of the forum */\n defaultDiscussionType?: SocialPageType;\n}>();\n\nconst { result: discussion } = useDiscussion(props.discussionId);\nconst userInfo = useCurrentUser();\nconst { can } = useStoreAbility();\n\nconst threads = ref<ThreadComment[]>();\nwatchEffect(() => {\n const filtered = discussion.value?.threads.filter(\n (x) => x.commentHex != discussion.value?.attributes.stickyCommentHex,\n );\n\n filtered?.forEach((thread) => removeDeletedComments(thread));\n threads.value = filtered?.filter(\n (thread) => !thread.deleted || thread.children.length > 0,\n );\n});\n\nconst removeDeletedComments = (comment: ThreadComment) => {\n if (!comment.children || comment.children.length === 0) {\n return;\n }\n\n comment.children.forEach(removeDeletedComments);\n\n comment.children = comment.children.filter(\n (c) => !c.deleted || c.children.length > 0,\n );\n};\n\nfunction threadLockToggle() {\n if (discussion.value) {\n pageUpdate(\n discussion.value,\n !discussion.value.attributes.isLocked,\n discussion.value.attributes.stickyCommentHex,\n );\n }\n}\n\nasync function createComment(commentText: string) {\n if (discussion.value && userInfo.value) {\n const newComment = await commentNew(\n discussion.value,\n 'root',\n commentText,\n userInfo.value,\n discussion.value.attributes.id,\n discussion.value.attributes.pageType ?? props.defaultDiscussionType,\n );\n await nextTick();\n document\n .getElementById('comment-' + newComment.commentHex)\n ?.scrollIntoView({ behavior: 'smooth' });\n }\n}\n\nconst sortStrategy = ref<SortStrategy | null>(null);\n\nfunction sortThreads(comments: ThreadComment[] | undefined, fn: SortFunction) {\n comments?.sort(fn);\n comments?.forEach((c) => sortThreads(c.children, fn));\n}\n\nfunction getSortFunction(strategy: SortStrategy): SortFunction {\n switch (strategy) {\n case 'score-desc':\n return (a: ThreadComment, b: ThreadComment) => b.score - a.score;\n case 'creationdate-desc':\n return (a: ThreadComment, b: ThreadComment) =>\n Date.parse(b.creationDate) - Date.parse(a.creationDate);\n case 'creationdate-asc':\n return (a: ThreadComment, b: ThreadComment) =>\n Date.parse(a.creationDate) - Date.parse(b.creationDate);\n default:\n throw new Error('error.sort_strategy_not_found');\n }\n}\n\nfunction sortComments() {\n if (sortStrategy.value) {\n sortThreads(discussion.value?.threads, getSortFunction(sortStrategy.value));\n }\n}\n\nfunction setSortStrategy(strategy: SortStrategy) {\n sortStrategy.value = strategy;\n}\n\n// Set default sort strategy when discussion is loaded\nwatch(discussion, (newValue) => {\n sortStrategy.value = newValue?.defaultSortPolicy ?? null;\n});\n\n// Trigger sort when sort strategy changed by user\nwatch(sortStrategy, () => {\n sortComments();\n});\n</script>\n\n<template>\n <div class=\"discussion-main text-gnist-black\">\n <Commenter v-if=\"userInfo\" class=\"mt-4\" />\n <div v-else>\n {{ t('discussion.logInToComment') }}\n </div>\n\n <div\n v-if=\"can('update', 'Discussion')\"\n class=\"discussion-moderator-tools mt-4\"\n >\n <span\n class=\"discussion-moderator-tools-header text-sm font-bold uppercase text-[#3b5bdb]\"\n >{{ t('discussion.moderatorTools') }}</span\n >\n <button\n class=\"discussion-moderator-tools-lock-thread ml-3 text-sm font-bold uppercase\"\n @click=\"threadLockToggle\"\n >\n {{\n discussion?.attributes.isLocked\n ? t('discussion.unlockThread')\n : t('discussion.lockThread')\n }}\n </button>\n </div>\n\n <WriteComment\n v-if=\"discussion && userInfo && !discussion.attributes.isLocked\"\n class=\"mt-3\"\n @submit-comment=\"createComment\"\n />\n\n <div v-if=\"discussion?.attributes.isLocked\" class=\"pt-8 text-red-600\">\n {{ t('discussion.lockedThreadExplaination') }}\n </div>\n\n <div v-if=\"discussion && discussion.threads.length > 0\">\n <CommentSortPolicy\n :sort-strategy=\"sortStrategy\"\n @set-sort-strategy=\"setSortStrategy\"\n />\n <CommentCard\n v-if=\"discussion.stickiedComment\"\n :comment=\"discussion.stickiedComment\"\n :discussion=\"discussion\"\n :discussion-type=\"discussion.attributes.pageType\"\n />\n\n <CommentCard\n v-for=\"comment in threads\"\n :key=\"comment.commentHex\"\n :comment=\"comment\"\n :discussion=\"discussion\"\n :discussion-type=\"discussion.attributes.pageType\"\n class=\"mt-4\"\n />\n </div>\n <p v-else class=\"mt-2 border-t pt-4 font-semibold\">0 kommentarer</p>\n </div>\n</template>\n<style>\n.discussion-main {\n text-rendering: optimizeLegibility;\n}\n</style>\n","import { ref, type Ref, unref, watch, computed } from 'vue';\n\nexport function useWaitForObservedElement(\n elementId: string | Ref<string>,\n target?: HTMLElement | Ref<HTMLElement | undefined | null>,\n useQuerySelector = false,\n watchVisibility?: 'waitOnce' | 'watch',\n): Ref<HTMLElement | null> {\n target ??= document.getElementById('app') ?? undefined;\n const el = ref<HTMLElement | null>(null);\n if (!target) return el;\n let disconnectCreationObserver: (() => void) | null = null;\n watch(\n [() => unref(elementId), () => unref(target)],\n () => {\n disconnectCreationObserver?.();\n const _target = unref(target);\n if (!_target) return;\n disconnectCreationObserver = startObserveCreation(\n _target,\n el,\n elementId,\n useQuerySelector,\n );\n },\n { immediate: true },\n );\n const isVisible = ref(false);\n let disconnectVisibilityObserver: (() => void) | null = null;\n watch(el, () => {\n if (watchVisibility === undefined) return;\n disconnectVisibilityObserver?.();\n if (!el.value) return;\n disconnectVisibilityObserver = startObserveVisibility(\n el.value,\n isVisible,\n watchVisibility,\n );\n });\n return computed(() => {\n if (!el.value) {\n return null;\n } else if (watchVisibility !== undefined && !isVisible.value) {\n return null;\n } else {\n return el.value;\n }\n });\n}\n\nfunction getElement(\n target: HTMLElement,\n elementId: string | Ref<string>,\n useQuerySelector: boolean,\n): HTMLElement | null {\n const _elementId = unref(elementId);\n if (_elementId) {\n if (useQuerySelector) {\n return target.querySelector(_elementId);\n } else {\n return document.getElementById(_elementId);\n }\n } else {\n return target;\n }\n}\n\nfunction startObserveCreation(\n target: HTMLElement,\n el: Ref<HTMLElement | null>,\n elementId: string | Ref<string>,\n useQuerySelector: boolean,\n) {\n const element = getElement(target, elementId, useQuerySelector);\n if (element) {\n el.value = element;\n return () => null;\n }\n const observer = new MutationObserver(function () {\n const element = getElement(target, elementId, useQuerySelector);\n if (element) {\n el.value = element;\n observer.disconnect();\n }\n });\n observer.observe(target, { childList: true, subtree: true });\n return () => observer.disconnect();\n}\n\nfunction startObserveVisibility(\n element: HTMLElement,\n isVisible: Ref<boolean>,\n watchVisibility: 'waitOnce' | 'watch',\n) {\n isVisible.value = element.checkVisibility();\n const attrObserver = new MutationObserver(function () {\n isVisible.value = element.checkVisibility();\n if (isVisible.value && watchVisibility !== 'watch') {\n attrObserver.disconnect();\n }\n });\n attrObserver.observe(element, {\n attributes: true,\n attributeFilter: ['style', 'class'],\n childList: false,\n characterData: false,\n });\n return () => attrObserver.disconnect();\n}\n","import { useWaitForObservedElement } from './useWaitForObservedElement';\nimport { watchEffect } from 'vue';\n\nexport function useScrollToIdWhenPresent(elementId: string) {\n const el = useWaitForObservedElement(elementId);\n watchEffect(() => {\n if (el.value) el.value.scrollIntoView({ behavior: 'smooth' }); // Scroll to element when appearing in DOM\n });\n}\n","<script setup lang=\"ts\">\nimport {\n computed,\n onUnmounted,\n ref,\n watchEffect,\n type WatchStopHandle,\n} from 'vue';\nimport { useBlock } from '@/api/blocks';\nimport {\n getChatPage,\n type commentPageId,\n type commentPageParam,\n suggestionPageParam,\n type suggestionPageId,\n suggestionPageIdPrefix,\n type ChatPage,\n} from '@/api/commentoTypes';\nimport {\n EMPTY_GUID,\n type Guid,\n type Suggestion,\n type Block,\n type localeValue,\n} from '@/api/types';\nimport DiscussionBoard from '@/components/discussion/DiscussionBoard.vue';\nimport { throwOnError } from '@/api/composable';\nimport { useI18n } from 'vue-i18n';\nimport { defaultBlocksRouteName } from '@/utilities/routeUtils';\nimport { useSuggestion } from '@/api/suggestion';\nimport { translateStringOrLocale } from '@/i18n';\nimport { useScrollToIdWhenPresent } from '@/utilities/useScrollToIdWhenPresent';\n\nconst { t } = useI18n();\n\nconst props = withDefaults(\n defineProps<{\n pageId?: commentPageParam;\n blockId?: Guid;\n commentId?: string;\n discussionId?: suggestionPageId;\n }>(),\n {\n pageId: 'general',\n blockId: EMPTY_GUID,\n commentId: undefined,\n discussionId: 'suggestion0',\n },\n);\n\n// We creates new watches asynchronously when the useBlock result changes. These\n// must be cleaned up manually to prevent memory leak.\nlet previousWatcher: WatchStopHandle | null = null;\nconst unregisterWatcher = () => {\n if (previousWatcher) {\n previousWatcher();\n previousWatcher = null;\n }\n};\nonUnmounted(unregisterWatcher);\n\ntype ForumSuggestion = Omit<Suggestion, 'title'> & {\n name: localeValue;\n};\ntype TranslatablePage = Block | ForumSuggestion;\ntype Page = TranslatablePage | ChatPage;\nconst page = ref<TranslatablePage | Page | null>();\nwatchEffect(() => {\n unregisterWatcher();\n\n if (props.pageId === defaultBlocksRouteName) {\n const { result: block } = throwOnError(useBlock(props.blockId as Guid));\n previousWatcher = watchEffect(() => {\n page.value = block.value;\n });\n } else if (props.pageId === suggestionPageParam) {\n const suggestionId = parseInt(\n props.discussionId?.replace(suggestionPageIdPrefix, ''),\n );\n if (isNaN(suggestionId)) throw new Error('error.missing_discussion_param');\n const { result: suggestion } = throwOnError(useSuggestion(suggestionId));\n previousWatcher = watchEffect(() => {\n page.value = !suggestion.value\n ? null\n : { ...suggestion.value, name: suggestion.value.title };\n });\n } else {\n page.value = getChatPage(props.pageId);\n }\n});\n\nconst pageSettings = computed(() => {\n if (!page.value) return undefined;\n\n const blockId = props.blockId != EMPTY_GUID ? props.blockId : '0';\n\n return {\n pageName:\n (page.value as ChatPage).chatPageName ??\n translateStringOrLocale((page.value as TranslatablePage).name).value,\n pageDescription:\n (page.value as ChatPage).chatPageDescription ??\n translateStringOrLocale((page.value as TranslatablePage).description)\n .value,\n commentPageId: (props.pageId === defaultBlocksRouteName\n ? blockId\n : props.pageId === suggestionPageParam\n ? props.discussionId\n : '/' + props.pageId) as commentPageId,\n };\n});\n\nuseScrollToIdWhenPresent('comment-' + props.commentId);\n</script>\n\n<template>\n <div class=\"p-2\">\n <div role=\"banner\">\n <h2>\n {{ t(pageSettings?.pageName ?? '') }}\n </h2>\n <p class=\"py-4\">\n {{ t(pageSettings?.pageDescription ?? '') }}\n </p>\n </div>\n <div v-if=\"pageSettings?.commentPageId\">\n <DiscussionBoard\n :key=\"pageSettings.commentPageId\"\n :discussion-id=\"pageSettings.commentPageId\"\n class=\"mt-10\"\n />\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport ContentPage from '../components/ContentPage.vue';\nimport SubNav from '@/components/SubNav.vue';\nimport { useI18n } from 'vue-i18n';\n\nconst { t } = useI18n();\n</script>\n\n<template>\n <ContentPage :title=\"t('analytics.title')\">\n <div class=\"flex w-full flex-col items-center\">\n <SubNav\n :menu=\"[\n { routeName: 'viewCount', label: 'analytics.siteUsage' },\n { routeName: 'apiM', label: 'analytics.apiM' },\n { routeName: 'siteContent', label: 'analytics.siteContent' },\n ]\"\n />\n <RouterView />\n </div>\n </ContentPage>\n</template>\n<style></style>\n","<script lang=\"ts\">\nexport interface IDropdownItem<T> {\n value: T;\n key: string;\n text: string;\n group: string;\n}\n\nexport function toGroupedDropdownItems<V, T = string>(\n values: V[] | readonly V[] | null | undefined,\n get: (item: V) => [key: string, text: string, group: string, value?: T],\n includeEmpty = false,\n emptyValue: T = '' as T,\n emptyLabel = '',\n): IDropdownItem<T>[] {\n const list = [\n ...(includeEmpty ? [{ value: emptyValue, key: '', text: emptyLabel, group: '' }] : []),\n ...(values?.map((c): IDropdownItem<T> => {\n const [key, text, group, value] = get(c);\n return { key, text, group: group, value: value ?? (key as T) };\n }) ?? []),\n ];\n\n // Group by comparison taken from Stackoverflow: https://stackoverflow.com/a/37049593\n const cmp = (a: IDropdownItem<T>, b: IDropdownItem<T>, n: keyof IDropdownItem<string>) => {\n return String(a[n]).localeCompare(String(b[n]));\n };\n\n list.sort((a, b) => cmp(a, b, 'group') || cmp(a, b, 'text'));\n\n let prevGroup = '';\n for(let i = 0; i < list.length; i++) {\n if(list[i].group && list[i].group != prevGroup) {\n list.splice(i, 0, { key: list[i].group, text: '', value: {} as T, group: list[i].group});\n prevGroup = list[i].group;\n }\n };\n return list;\n}\n\n\nexport function stringToDropdownItems(\n values: string[] | readonly string[] | null | undefined,\n includeEmpty = false,\n emptyValue = '',\n): IDropdownItem<string>[] {\n return toDropdownItems(values, (i) => [i, i], includeEmpty, emptyValue);\n}\nexport function toDropdownItems<V, T = string>(\n values: V[] | readonly V[] | null | undefined,\n get: (item: V) => [key: string, text: string, value?: T],\n includeEmpty = false,\n emptyValue: T = '' as T,\n emptyLabel = '',\n): IDropdownItem<T>[] {\n return [\n ...(includeEmpty ? [{ value: emptyValue, key: '', text: emptyLabel, group: '' }] : []),\n ...(values?.map((c): IDropdownItem<T> => {\n const [key, text, value] = get(c);\n return { key, text, value: value ?? (key as T), group: '' };\n }) ?? []),\n ];\n}\n</script>\n<script\n setup\n lang=\"ts\"\n generic=\"\n T extends string | number | boolean | object | undefined | null | symbol\n \"\n>\nimport { useI18n } from 'vue-i18n';\nimport { computed, ref, toRaw, watch, watchEffect } from 'vue';\nimport InputLabel, {\n useDynamicLabelTexts,\n type IInputLabelProps,\n} from './InputLabel.vue';\nimport {\n Listbox,\n ListboxButton,\n ListboxOptions,\n ListboxOption,\n} from '@headlessui/vue';\nimport MaterialIcon from '../MaterialIcon.vue';\n\nconst props = withDefaults(\n defineProps<\n IInputLabelProps & {\n modelValue: T | T[] | undefined;\n options:\n | IDropdownItem<T>[]\n | {\n values: T[];\n getOption: (item: T) => [key: string, text: string, value?: T];\n };\n multiple?: { emptyLabel: string; maxItems?: number };\n getkey: (val?: T | null) => number | string | null | undefined;\n buttonclass?: string | string[];\n disabled?: boolean;\n allowEmptyValue?: boolean;\n disableEmptyOption?: boolean;\n changeUndefinedToNull?: boolean;\n noChrome?: boolean;\n }\n >(),\n {\n label: undefined,\n multiple: undefined,\n buttonclass: () => [],\n placeholder: undefined,\n disabled: false,\n required: false,\n allowEmptyValue: false,\n disableEmptyOption: false,\n },\n);\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: typeof props.modelValue): void;\n (e: 'update:valid', valid: boolean): void;\n (e: 'focus'): void;\n (e: 'blur'): void;\n}>();\ndefineSlots<{\n option(props: { item: IDropdownItem<T> }): unknown;\n button(props: { selectedItems: (T | null | undefined)[] }): unknown;\n}>();\nconst { t } = useI18n();\n\nconst _options = computed(() =>\n Array.isArray(props.options)\n ? props.options\n : toDropdownItems(props.options.values, props.options.getOption),\n);\n\nconst getValue = (key: string | undefined): T | undefined => {\n return toRaw(getOption(key)?.value);\n};\nconst _getKey = (val: T | null | undefined): string => {\n const key = props.getkey(val);\n if (!key) return '';\n else return key.toString();\n};\nconst getOption = (key: string | number | undefined) => {\n if (!key) return undefined;\n return _options.value.find((i) => i.key == key);\n};\nconst unSelect = (item: IDropdownItem<T>) => {\n if(props.multiple !== undefined) return;\n if (isSelected(item)) {\n onListboxChange(undefined);\n }\n};\nconst onListboxChange = (val: string | string[] | undefined) => {\n if (Array.isArray(val)) {\n const results = val\n .map((v) => getValue(v))\n .filter((r) => r !== undefined) as T[];\n emit('update:modelValue', results);\n } else {\n const result = getValue(val);\n if (Array.isArray(props.modelValue)) {\n emit('update:modelValue', result ? [result] : []);\n } else {\n emit('update:modelValue', result);\n }\n }\n};\nconst arrSelectedItems = computed((): (T | null | undefined)[] => {\n if (!props.modelValue && !props.allowEmptyValue) {\n return [];\n } else if (Array.isArray(props.modelValue)) {\n return props.modelValue;\n } else if (props.changeUndefinedToNull && props.modelValue === undefined) {\n return [null];\n } else {\n return [props.modelValue];\n }\n});\nconst arrSelectedKeys = computed(() =>\n arrSelectedItems.value.map((i) => _getKey(i)),\n);\nconst canSelectArray = computed(\n () => !!props.multiple && props.multiple?.maxItems !== 1,\n);\nconst isSelected = (opt: IDropdownItem<T>): boolean => {\n const optKey = _getKey(opt.value);\n return (\n arrSelectedItems.value?.find((i) => _getKey(i) == optKey) !== undefined\n );\n};\nwatch(\n () => props.modelValue,\n () => {\n emit(\n 'update:valid',\n !props.required ||\n !(\n (Array.isArray(props.modelValue) && props.modelValue.length == 0) ||\n !props.modelValue\n ),\n );\n },\n);\nconst listboxButtonRef = ref<InstanceType<typeof ListboxButton>>();\nconst attrObserver = ref<MutationObserver>();\nconst isOpen = ref(false);\nwatchEffect(() => {\n if (!listboxButtonRef.value) return;\n if (attrObserver.value) {\n attrObserver.value.disconnect();\n }\n attrObserver.value = new MutationObserver(function (records) {\n isOpen.value = !!(\n records[0]?.target as HTMLElement\n )?.dataset.headlessuiState?.includes('open');\n });\n attrObserver.value.observe(listboxButtonRef.value.$el, {\n attributes: true,\n attributeFilter: ['data-headlessui-state'],\n childList: false,\n characterData: false,\n });\n});\nwatch(isOpen, () => {\n if (isOpen.value) emit('focus');\n else emit('blur');\n});\nconst texts = useDynamicLabelTexts(props);\n</script>\n<template>\n <div>\n <label :for=\"texts.forName\" class=\"flex flex-col whitespace-nowrap\">\n <InputLabel v-bind=\"props\" />\n </label>\n <Listbox\n v-if=\"true\"\n :id=\"texts.forName\"\n :name=\"texts.forName\"\n as=\"div\"\n :multiple=\"canSelectArray\"\n :disabled=\"disabled\"\n :class=\"{ 'bg-gnist-white': !noChrome }\"\n :model-value=\"arrSelectedKeys\"\n @update:model-value=\"\n (val: string | string[] | undefined) => onListboxChange(val)\n \"\n >\n <ListboxButton\n ref=\"listboxButtonRef\"\n class=\"my-2 flex w-full items-center justify-between p-2 pb-0\"\n :class=\"\n [\n arrSelectedItems?.length > 0\n ? 'text-gnist-black'\n : 'text-gnist-gray',\n { border: !noChrome },\n ].concat(buttonclass)\n \"\n :data-cy-id=\"`ListBox_${texts.forName}`\"\n >\n <span\n class=\"ml-2 inline-flex w-full max-w-full shrink overflow-hidden text-ellipsis whitespace-nowrap pb-2\"\n >\n <slot name=\"button\" :selected-items=\"arrSelectedItems\">\n <template\n v-for=\"(sv, index) of arrSelectedItems\"\n :key=\"_getKey(sv)\"\n >\n {{ t(getOption(_getKey(sv) ?? 'empty')?.text ?? '')\n }}{{ index + 1 < arrSelectedItems.length ? ',' : '' }} \n </template>\n </slot>\n <span v-if=\"arrSelectedItems.length == 0\" class=\"items-center\">\n {{ t(multiple?.emptyLabel ?? '') }}\n </span>\n </span>\n <div class=\"flex items-center self-start\">\n <MaterialIcon\n aria-hidden=\"true\"\n class=\"self-baseline text-2xl leading-none text-gnist-gray\"\n >\n expand_more\n </MaterialIcon>\n </div>\n </ListboxButton>\n <ListboxOptions\n class=\"absolute overflow-auto inset-x-0 top-10 z-10 mx-1 my-1 min-w-max max-h-96 rounded bg-gnist-white p-1 shadow-md text-gnist-gray-dark\"\n :data-cy-id=\"`ListBoxOptions_${texts.forName}`\"\n >\n <ListboxOption\n v-if=\"texts.placeholder\"\n :disabled=\"true\"\n class=\"list-item\"\n :class=\"canSelectArray ? 'p-2' : 'px-2 py-1'\"\n >\n {{ t(texts.placeholder) }}\n </ListboxOption>\n <ListboxOption\n v-for=\"(r, index) in _options\"\n v-slot=\"{ active }\"\n :key=\"index\"\n :value=\"r.key\"\n :selected=\"isSelected(r)\"\n :data-cy-value=\"_getKey(r.value)\"\n class=\"list-item\"\n :disabled=\"r.group !== null && r.text == ''\"\n @click=\"unSelect(r)\"\n >\n <div\n :class=\"[\n canSelectArray ? 'p-2' : 'px-2 py-1',\n 'flex flex-row',\n { 'bg-[#767676]': active }, // Default active background for dropdowns (at least in Chrome)\n { 'text-gnist-white': active },\n { 'text-gnist-black': !active },\n { 'bg-[#c7c7c7]': !active && isSelected(r) },\n ]\"\n >\n <div\n v-if=\"r.group !== null && r.text == ''\"\n >\n <slot name=\"option\" :item=\"r\">\n <span>{{ r.group }}</span>\n </slot>\n </div>\n <div\n v-else\n class=\"flex flex-row gap-2\"\n >\n <div\n v-if=\"canSelectArray\"\n class=\"h-6 w-6 p-0.5 rounded border\"\n >\n <MaterialIcon\n v-if=\"isSelected(r) && !(r.group !== null && r.text == '')\"\n aria-hidden=\"true\"\n class=\"self-baseline text-gnist-black\"\n >\n check\n </MaterialIcon>\n </div>\n <slot name=\"option\" :item=\"r\">\n <span>{{ r.text ? t(r.text) : ' ' }}</span>\n </slot>\n </div>\n </div>\n </ListboxOption>\n </ListboxOptions>\n </Listbox>\n </div>\n</template>\n\n<style scoped>\nselect[disabled],\n:deep([data-headlessui-state='disabled']) {\n @apply bg-gnist-gray-light;\n}\n</style>\n","export function deepClone<T>(source: T): T {\n if (!source) return source;\n return JSON.parse(JSON.stringify(source));\n}\n","export function blockValueEquals<T>(\n a: T,\n b: T,\n removeSourceProp = false,\n): boolean {\n if (removeSourceProp && typeof a === 'object' && typeof b === 'object') {\n return (\n stringifyBlockValue({ ...a, _source: undefined }) ===\n stringifyBlockValue({ ...b, _source: undefined })\n );\n }\n return stringifyBlockValue(a) === stringifyBlockValue(b);\n}\nexport function stringifyBlockValue<T>(\n val: T | null | undefined,\n): string | undefined {\n if (val === null || val === undefined) return undefined;\n return JSON.stringify(val)\n ?.replace(/\"localeUpdates\":\\{[^}]*\\}/g, '')\n .replace(/\"localeUpdates\":\"[^\"]*\"/g, '');\n}\n","import { ref, watch, type UnwrapRef, type Ref, unref, toRef } from 'vue';\nimport { deepClone } from '@/utilities/deepClone';\nimport { blockValueEquals } from './blockValueEquals';\n\nexport function useNestedMVDefault<T>(\n props: { modelValue: T | undefined },\n onChange: (value: T | undefined) => void,\n defaultValue: T,\n /** If a function is supplied, it will be evaluated for *all* updates (not just replaced state). A boolean will only have an impact if state was replaced. */\n triggerOnInternalStateReplaced?: boolean | TriggerLogicDelegate<T>,\n) {\n return useInternalState<T>(\n toRef(props, 'modelValue'),\n defaultValue,\n onChange,\n undefined,\n undefined,\n triggerOnInternalStateReplaced ?? false,\n false,\n );\n}\ntype TriggerLogicDelegate<T> = (\n stateReplaced: boolean,\n newVal: UnwrapRef<T>,\n oldVal: UnwrapRef<T>,\n) => 'skipUpdate' | 'applyUpdate';\nexport function useNestedMV<T>(\n props: { modelValue: T },\n onChange: (value: T) => void,\n /** If a function is supplied, it will be evaluated for *all* updates (not just replaced state). A boolean will only have an impact if state was replaced. */\n triggerOnInternalStateReplaced?: boolean | TriggerLogicDelegate<T>,\n) {\n return useInternalState(\n toRef(props, 'modelValue'),\n props.modelValue,\n onChange,\n undefined,\n undefined,\n triggerOnInternalStateReplaced ?? false,\n true,\n );\n}\n\n/** Should always be called synchronously to ensure watchers will be cleaned up */\nexport function useInternalState<TExternal, TInternal = TExternal>(\n extState: Ref<TExternal | null | undefined>,\n defaultState: TInternal,\n onChange: (value: TExternal) => void,\n /** Must be supplied if TExternal is not the same as TInternal */\n getInternalState?: (\n newExtState: TExternal,\n internalState: TInternal,\n ) => TInternal | null,\n /** Must be supplied if TInternal is not the same as TExternal */\n getExternalState?: (newIntState: TInternal) => TExternal,\n /** If a function is supplied, it will be evaluated for *all* updates (not just replaced state). A boolean will only have an impact if state was replaced. */\n triggerOnInternalStateReplaced:\n | boolean\n | TriggerLogicDelegate<TInternal> = false,\n updateOnNullUndefined = false,\n) {\n const state = ref<TInternal>(defaultState);\n\n // Update internal state if external state has changed\n watch(\n () => unref(extState),\n (newExtState) => {\n if (!newExtState && !updateOnNullUndefined) return;\n const newState = !newExtState\n ? newExtState\n : getInternalState?.(newExtState, state.value as TInternal) ??\n newExtState;\n if (!newState && !updateOnNullUndefined) return;\n state.value = newState as UnwrapRef<TInternal>;\n },\n { immediate: true },\n );\n\n const oldState = ref(deepClone(state.value) as TInternal);\n const replacedState = ref(oldState.value as TInternal);\n function setOldState(newState: UnwrapRef<TInternal>) {\n replacedState.value = oldState.value;\n oldState.value = deepClone(newState);\n }\n const stateReplaced = ref(false);\n // This extra bit is to handle blockvalues containing \"helper properties\" that we don't want to trigger updates\n watch(\n () => state.value,\n (newVal, oldVal) => {\n stateReplaced.value = newVal !== oldVal;\n if (!blockValueEquals(state.value, oldState.value, true)) {\n setOldState(state.value);\n }\n },\n { deep: true },\n );\n\n // Update external state if internal state has changed\n watch(\n () => oldState.value,\n () => {\n if (!state.value && !updateOnNullUndefined) return;\n const shouldReturn =\n typeof triggerOnInternalStateReplaced === 'function'\n ? triggerOnInternalStateReplaced(\n stateReplaced.value,\n state.value,\n replacedState.value,\n ) === 'skipUpdate'\n : !triggerOnInternalStateReplaced && stateReplaced.value;\n if (shouldReturn) return; // Internal state was updated due to changes in external state (thus the entire object was replaced). DO NOT update external state (as that will trigger a cascade).\n onChange(\n getExternalState\n ? getExternalState(state.value as TInternal)\n : (state.value as unknown as TExternal),\n );\n },\n { deep: true },\n );\n\n return state;\n}\n","<script setup lang=\"ts\">\nimport type {\n BlockImage,\n PartialSome,\n Translated,\n validationInfo,\n} from '@/api/types';\nimport MaterialIcon from '@/components/MaterialIcon.vue';\nimport { computed, ref, watchEffect } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport InputLabel, {\n useDynamicLabelTexts,\n type IInputLabelProps,\n} from './InputLabel.vue';\nimport { uploadBlob, type IBlobUrlInput, getBlobUrl } from '@/api/blob';\nimport TextInput from '@/components/forms/InputText.vue';\nimport { useNestedMVDefault } from '@/utilities/useInternalState';\n\nconst { t } = useI18n();\n\nconst props = defineProps<\n IInputLabelProps & {\n modelValue: PartialSome<Translated<BlockImage>, 'alt'> | undefined;\n blobLocation: IBlobUrlInput;\n showValidationMessage?: boolean;\n /** Used for connecting label and input */\n forName: string;\n hideDescriptionInput?: boolean;\n border?: boolean;\n }\n>();\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: typeof props.modelValue): void;\n (e: 'reportValidationError', name: string, hasError: boolean): void;\n}>();\n\nconst uploadInput = ref<HTMLInputElement>();\nconst urlRef = ref<HTMLInputElement>();\nconst imageError = ref<boolean>(false);\nconst loading = ref<boolean>(false);\nconst confirmDelete = ref<boolean>(false);\n\nconst uploadFileNotUrl = ref<boolean>(true);\n\nconst value = useNestedMVDefault(\n props,\n (val) => emit('update:modelValue', val),\n { name: '', alt: '' },\n);\n\nconst previewUrl = computed(() => {\n if (!value.value?.name) return undefined;\n if (uploadFileNotUrl.value == false) {\n return value.value.name;\n } else {\n return getBlobUrl(props.blobLocation, value.value.name);\n }\n});\n\nconst handleImageUpload = async (e: Event): Promise<void> => {\n const files = (e.target as HTMLInputElement).files;\n if (files && files[0]) {\n loading.value = true;\n imageError.value = false;\n\n try {\n const filename = await uploadBlob(props.blobLocation, files[0]);\n imageError.value = false;\n value.value.name = filename;\n value.value.alt = value.value?.alt ?? '';\n } catch {\n imageError.value = true;\n }\n }\n};\n\nconst validationMessage = computed(() =>\n validationErrors.value\n .map((i) => t(`validation.${i.key}`, i.args))\n .join('\\n'),\n);\n\nfunction satisfiesRequiredRule(): validationInfo | null {\n const condition = !!(!props.required || value.value?.name);\n return condition ? null : { key: 'required', args: {} };\n}\n\nconst validationErrors = computed((): validationInfo[] => {\n return [satisfiesRequiredRule()].filter(\n (i) => i !== null,\n ) as validationInfo[];\n});\n\nfunction performValidation() {\n emit(\n 'reportValidationError',\n props.forName,\n validationErrors.value.length > 0,\n );\n}\n\nwatchEffect(() => {\n performValidation();\n});\n\nfunction onDelete() {\n confirmDelete.value = false;\n if (!value.value) return;\n value.value.name = '';\n}\nconst texts = useDynamicLabelTexts(props);\n</script>\n\n<template>\n <div class=\"flex flex-col whitespace-nowrap\">\n <label :for=\"forName\">\n <InputLabel v-bind=\"props\" />\n </label>\n\n <div :class=\"[border ? 'border px-2' : '']\">\n <div class=\"tabs-bordered w-fit my-2 font-medium\">\n <button\n class=\"tab tab-rounded-lg tab-border-2\"\n :class=\"uploadFileNotUrl ? 'tab-active' : ''\"\n @click=\"uploadFileNotUrl = true; value.name = ''\">\n {{t('block.schema.uploadImage')}}\n </button>\n <button\n class=\"tab tab-rounded-lg tab-border-2\"\n :class=\"uploadFileNotUrl ? '' : 'tab-active'\"\n @click=\"uploadFileNotUrl = false; value.name = ''\">\n {{t('block.schema.uploadUrl')}}\n </button>\n </div>\n\n <div class=\"flex\">\n <div\n v-if=\"uploadFileNotUrl\">\n <button\n class=\"gnist-button mb-3 mt-2\"\n :disabled=\"loading\"\n @click.prevent=\"uploadInput?.click()\"\n >\n {{\n value?.name\n ? t('block.schema.changeImage')\n : t('block.schema.chooseImage')\n }}\n </button>\n <span\n v-if=\"showValidationMessage && validationMessage\"\n :data-tip=\"validationMessage\"\n class=\"tooltip tooltip-right tooltip-open tooltip-warning\"\n >\n </span>\n </div>\n <div\n v-if=\"!uploadFileNotUrl\">\n\n <input\n :id=\"forName\"\n ref=\"urlRef\"\n v-model=\"value.name\"\n type=\"url\"\n class=\"w-full border p-2 mb-3 mt-2\"\n :placeholder=\"t('block.schema.linkUrlPlaceholder')\"\n :required=\"required\"\n data-cy-id=\"InputLinkUrl\"\n @focus=\"if (showValidationMessage && validationMessage) urlRef?.reportValidity();\"\n />\n </div>\n </div>\n\n <input\n :id=\"forName\"\n ref=\"uploadInput\"\n type=\"file\"\n accept=\"image/*\"\n class=\"hidden\"\n :data-cy-id=\"`InputImage_${texts.forName}`\"\n @change=\"handleImageUpload\"\n />\n <p v-if=\"imageError\" class=\"my-2 text-gnist-orange\">\n {{ t('block.schema.imageError') }}\n </p>\n\n <div\n v-if=\"previewUrl\"\n class=\"relative flex min-h-16 max-w-80 items-center justify-center bg-white\"\n >\n <img\n :src=\"previewUrl\"\n :data-cy-id=\"`InputImagePreview_${texts.forName}`\"\n @load=\"loading = false\"\n />\n <div class=\"absolute right-2 top-1\">\n <button v-if=\"confirmDelete\" @click.prevent=\"onDelete\">\n <MaterialIcon\n class=\"w-7 cursor-pointer rounded-full border bg-white text-xl hover:scale-110 hover:text-green-800\"\n >\n check\n </MaterialIcon>\n </button>\n <button v-if=\"confirmDelete\" @click.prevent=\"confirmDelete = false\">\n <MaterialIcon\n class=\"ml-1 w-7 cursor-pointer rounded-full border bg-white text-xl hover:scale-110 hover:text-red-700\"\n >\n close\n </MaterialIcon>\n </button>\n <button v-if=\"!confirmDelete\" @click.prevent=\"confirmDelete = true\">\n <MaterialIcon\n class=\"w-7 cursor-pointer rounded-full border bg-white text-xl hover:scale-110 hover:text-red-700\"\n >\n delete\n </MaterialIcon>\n </button>\n </div>\n </div>\n <progress v-if=\"loading\" class=\"progress w-80\" />\n </div>\n\n <div v-if=\"!hideDescriptionInput && value && previewUrl\">\n <TextInput\n v-model=\"value.alt\"\n :for-name=\"`InputImageAlt_${texts.forName}`\"\n :label=\"t('block.schema.imageDescription')\"\n class=\"mb-2 mt-6 w-80 border p-2\"\n :placeholder=\"t('block.schema.imageDescription')\"\n :required=\"required\"\n :minlength=\"minlength\"\n :maxlength=\"maxlength\"\n />\n </div>\n </div>\n</template>\n","/**\n * Will compare if two arrays are equal, e.g. have the same elements in the same place\n * For arrays of objects, this will use a referential comparison and not a deep compare\n */\nexport function arrayEquals<T, V = T>(\n a?: T[],\n b?: T[],\n getCompareValue?: (item: T) => V,\n): boolean {\n if (!a && !b) return true;\n else if (!a || !b) return false;\n if (!getCompareValue) {\n return (\n a.length === b.length && a.every((element, index) => element === b[index])\n );\n }\n const bb = b.map((i) => getCompareValue(i));\n return (\n a.length === b.length &&\n a.every((element, index) => getCompareValue(element) === bb[index])\n );\n}\n","import { ref, onMounted, type Ref } from 'vue';\n\nexport function useStepScrolling(\n scrollSize: number,\n el: Ref<HTMLElement | undefined>,\n waitBeforeScrollMs = 50,\n waitBeforeNextMs = 250,\n) {\n const nativeScrollSize = 4;\n const nextScrollPos = ref<number>();\n const activeTimeouts = ref<number[]>([]);\n onMounted(() => {\n if (el.value) {\n el.value.addEventListener('scroll', (ev: Event) => {\n if (!ev.target) return;\n const target = ev.target as HTMLDivElement & { scrollPos?: number };\n const direction =\n target.scrollTop > (target.scrollPos ?? 0)\n ? 'down'\n : target.scrollTop < (target.scrollPos ?? 0)\n ? 'up'\n : 'none';\n //#region Not sure if this is needed, keeping it for now\n // If scrolls are happening too fast to keep track of\n if (\n (direction == 'down' &&\n target.scrollTop % scrollSize > nativeScrollSize) ||\n (direction == 'up' &&\n target.scrollTop % scrollSize < nativeScrollSize)\n ) {\n nextScrollPos.value = undefined;\n const timeouts = activeTimeouts.value;\n activeTimeouts.value = [];\n for (const id of timeouts) window.clearTimeout(id);\n }\n //#endregion\n if (nextScrollPos.value !== undefined) return;\n if (direction === 'down') {\n nextScrollPos.value = (target.scrollPos ?? 0) + scrollSize;\n } else if (direction === 'up') {\n nextScrollPos.value = (target.scrollPos ?? 0) - scrollSize;\n }\n const id1 = window.setTimeout(() => {\n if (nextScrollPos.value === undefined) return;\n target.scrollTop = nextScrollPos.value;\n target.scrollPos = nextScrollPos.value;\n }, waitBeforeScrollMs);\n activeTimeouts.value.push(id1);\n const id2 = window.setTimeout(() => {\n nextScrollPos.value = undefined;\n }, waitBeforeNextMs);\n activeTimeouts.value.push(id2);\n });\n }\n });\n}\n","<script lang=\"ts\">\nexport interface ITagBase {\n /** Name of the item. */\n name: string;\n /** Unique key for the item. */\n key: string | number | null;\n}\ninterface ITag<T> {\n /** Stores the actual object value. */\n value: T;\n}\nfunction listContainsItem<T extends ITagBase>(item: T, selected?: T[]) {\n if (!selected || !selected.length || selected.length === 0) {\n return false;\n }\n return (\n selected.filter((compareTag) => compareTag.key === item.key).length > 0\n );\n}\n</script>\n\n<script setup lang=\"ts\" generic=\"T\">\nimport {\n ref,\n watchEffect,\n type UnwrapRef,\n watch,\n toRef,\n computed,\n onMounted,\n} from 'vue';\nimport {\n Combobox,\n ComboboxInput,\n ComboboxOptions,\n ComboboxOption,\n} from '@headlessui/vue';\nimport InputLabel, {\n useDynamicLabelTexts,\n type IInputLabelProps,\n} from './InputLabel.vue';\nimport LoadingSpinner from '@/components/LoadingSpinner.vue';\nimport MaterialIcon from '@/components/MaterialIcon.vue';\nimport { useI18n } from 'vue-i18n';\nimport { useInternalState } from '@/utilities/useInternalState';\nimport { arrayEquals } from '@/utilities/arrayEquals';\nimport { useStepScrolling } from '@/utilities/useStepScrolling';\nimport type { SingleItem, VueClass } from '@/api/types';\n\ntype InternalState = (ITag<SingleItem<T>> & ITagBase)[];\ntype InternalStateItem = ITag<UnwrapRef<SingleItem<T>>> &\n ITagBase &\n SingleItem<InternalState>;\n\nconst props = defineProps<\n IInputLabelProps & {\n modelValue: T;\n getkey: (val: SingleItem<T>) => string | number;\n gettext: (val: SingleItem<T>) => string;\n suggestedlabel?: string;\n taglistclass?: VueClass;\n /** The filterText will always be supplied in lowercase */\n filter: (filterText: string) => Promise<SingleItem<T>[]> | SingleItem<T>[];\n add?: (item: ITagBase) => Promise<SingleItem<T>> | SingleItem<T>;\n addPrefix?: string;\n maxItems?: number;\n showEmptySuggestions?: boolean;\n /** If supplied, will be used to get the actual object when only ids are supplied in the taglist */\n getById?: (\n id: string | number,\n ) => SingleItem<T> | undefined | Promise<SingleItem<T> | undefined>;\n noChrome?: boolean;\n }\n>();\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: T): void;\n (e: 'focus'): void;\n (e: 'blur'): void;\n}>();\ndefineSlots<{\n tagItem(props: { item: InternalStateItem }): unknown;\n tagOption(props: { item: ITagBase }): unknown;\n}>();\n\nconst { t } = useI18n();\n\nconst newItem = ref<ITagBase>();\nconst filteredItems = ref<ITagBase[] | null>([]);\n\nfunction onModelValueChanged(\n newExtState: Partial<T>,\n internalState: InternalState,\n): InternalState | null {\n const arr = Array.isArray(newExtState)\n ? (newExtState as SingleItem<T>[])\n : [newExtState as SingleItem<T>];\n const modelKeys = arr.map((i) => props.getkey(i));\n const selectedKeys = internalState\n .filter((i) => i.key !== null)\n .map((i) => props.getkey(i.value as SingleItem<T>));\n if (arrayEquals(modelKeys, selectedKeys)) return internalState;\n return arr.map((i) => ({\n key: props.getkey(i),\n name: props.gettext(i),\n value: i,\n }));\n}\n\nfunction onSelectedItemsChanged(newIntState: InternalState) {\n if (tagListRef.value) {\n tagListRef.value.scrollTo(0, tagListRef.value.scrollHeight);\n }\n const values = newIntState.filter((i) => i.key !== null).map((i) => i.value);\n if (Array.isArray(props.modelValue)) return values as T;\n else {\n if (selectedItems.value.length > 1) {\n selectedItems.value = [selectedItems.value[0]];\n }\n return values[0] as T;\n }\n}\n\nconst selectedItems = useInternalState<T, InternalState>(\n toRef(props, 'modelValue'),\n [],\n (value) => emit('update:modelValue', value),\n onModelValueChanged,\n onSelectedItemsChanged,\n true,\n);\n\nwatchEffect(async () => {\n if (!selectedItems.value || !props.getById) return;\n for (let i = 0; i < selectedItems.value.length; i++) {\n const tag = selectedItems.value[i];\n if (tag.name === '') {\n const sourceTag = tag.key === null ? null : await props.getById(tag.key);\n if (!sourceTag) continue;\n let newText = props.gettext(sourceTag);\n if (!newText) newText = t('picker.unknown_value');\n selectedItems.value[i] = {\n key: props.getkey(sourceTag),\n name: newText,\n value: sourceTag as UnwrapRef<SingleItem<T>>,\n };\n }\n }\n});\n\nconst query = ref('');\nconst onFilterChanged = async (filterText: string): Promise<void> => {\n if (filterText) query.value = filterText;\n else window.setTimeout(() => (query.value = filterText), 500); // Wait a few seconds before emptying to avoid deleting a tag when deleting the last character\n newItem.value = undefined;\n if (!filterText && !props.showEmptySuggestions) {\n filteredItems.value = [];\n return;\n }\n filteredItems.value = null;\n const filter = filterText.toLowerCase();\n try {\n const _items = await props.filter(filter);\n const items: InternalState = _items.map(\n (i): SingleItem<InternalState> => ({\n key: props.getkey(i),\n name: props.gettext(i),\n value: i,\n }),\n );\n newItem.value =\n !props.add ||\n !query.value ||\n items.find((i) => i.name.toLowerCase() == filter)\n ? undefined\n : { key: null, name: filterText };\n filteredItems.value = items.filter(\n (i) => !listContainsItem(i, selectedItems.value as InternalState),\n );\n } catch (err) {\n console.warn('Failed to search:' + err);\n filteredItems.value = [];\n }\n};\n\nconst removeSelectedItem = (item: ITagBase) => {\n selectedItems.value = selectedItems.value.filter((i) => i.key != item.key);\n};\n\nwatchEffect(() => {\n if (!filteredItems.value) return;\n const updated = filteredItems.value?.filter(\n (i) => !listContainsItem(i, selectedItems.value),\n );\n if (updated.length !== filteredItems.value.length) {\n filteredItems.value = updated;\n }\n});\n\nconst showOptions = ref(false);\nwatch(selectedItems, async (newList, oldList) => {\n if (inputRef.value && newList.length > oldList.length) {\n inputRef.value.el.value = '';\n query.value = '';\n newItem.value = undefined;\n filteredItems.value = [];\n }\n onFilterChanged(query.value); // Make sure to reset filter, both when adding and removing options\n // Below code is for when an option is added. This will create the option, remove the selected item from current selection and add the selected item back (with key returned at option creation).\n if (!props.add) return;\n const addedOption = selectedItems.value?.find((i) => i.key == null);\n if (addedOption) {\n newItem.value = undefined;\n const createdOption = await props.add(addedOption);\n selectedItems.value = selectedItems.value.filter((i) => i.key !== null);\n selectedItems.value.push({\n key: props.getkey(createdOption),\n name: props.gettext(createdOption),\n value: createdOption as UnwrapRef<SingleItem<T>>,\n });\n }\n});\n\nconst inputRef = ref<{ el: HTMLInputElement }>();\nconst tagListRef = ref<HTMLDivElement>();\nuseStepScrolling(32, tagListRef); // Scroll tag list in steps of 2rem\nconst isFull = computed(() => {\n if (!props.maxItems) return false;\n return selectedItems.value.length >= props.maxItems;\n});\nonMounted(() => {\n onFilterChanged('');\n});\nconst timeoutId = ref<number | undefined>();\nfunction hideOptionsList() {\n // Some (strange) behaviour in Combobox makes it so that selections does not work if the list is not visible. So we need to wait a little bit after blur before actually hiding it, for selections to work...\n timeoutId.value = window.setTimeout(() => (showOptions.value = false), 250);\n emit('blur');\n}\nfunction showOptionsList() {\n if (timeoutId.value) {\n clearTimeout(timeoutId.value);\n timeoutId.value = undefined;\n }\n showOptions.value = true;\n emit('focus');\n}\nconst texts = useDynamicLabelTexts(props);\n</script>\n\n<template>\n <label\n :for=\"texts.forName\"\n class=\"GnistPicker flex flex-col whitespace-nowrap\"\n >\n <InputLabel v-bind=\"props\" />\n <Combobox v-model=\"selectedItems\" multiple nullable>\n <div\n :id=\"texts.forName\"\n :name=\"texts.forName\"\n :class=\"[\n noChrome ? undefined : 'border bg-gnist-white',\n 'my-2 flex max-h-full min-h-[2.75rem] flex-wrap items-center text-gnist-black focus-within:outline focus-within:outline-2',\n ]\"\n data-combobox\n :data-cy-id=\"`Picker_${texts.forName}`\"\n >\n <div\n ref=\"tagListRef\"\n class=\"flex min-h-0 max-w-full grow flex-wrap scroll-auto\"\n :class=\"taglistclass\"\n >\n <span\n v-for=\"item in selectedItems\"\n :key=\"item.key ?? 'new_item'\"\n class=\"m-1 mr-0 flex max-w-[calc(100%_-_0.5rem)] items-center p-1 py-px text-sm text-gnist-black\"\n :class=\"{ 'gap-2 border bg-gnist-gray-light-light': !noChrome }\"\n >\n <span\n class=\"shrink overflow-hidden text-ellipsis\"\n :title=\"item.name\"\n >\n <slot name=\"tagItem\" :item=\"item as InternalStateItem\">\n {{ item.name }}\n </slot>\n </span>\n <MaterialIcon\n aria-hidden=\"true\"\n class=\"cursor-pointer self-baseline text-xl leading-none text-gnist-gray hover:bg-gnist-gray-light\"\n @click=\"removeSelectedItem(item)\"\n >\n close\n </MaterialIcon>\n </span>\n </div>\n <ComboboxInput\n v-if=\"!isFull\"\n ref=\"inputRef\"\n :display-value=\"(person) => (person as ITagBase).name\"\n class=\"min-h-0 w-full grow items-center justify-between self-end border-none p-2 pt-1.5 text-gnist-black focus:outline-0\"\n :class=\"{ 'bg-transparent': noChrome }\"\n :placeholder=\"texts.placeholder ? t(texts.placeholder) : undefined\"\n data-cy-id=\"PickerInput\"\n @keyup.delete=\"\n () => {\n if (!query) selectedItems = selectedItems.slice(0, -1);\n }\n \"\n @change=\"async (ev) => await onFilterChanged(ev.target.value)\"\n @focus=\"showOptionsList\"\n @blur=\"hideOptionsList\"\n />\n <div v-if=\"!isFull && maxItems !== 1\" class=\"min-h-0 grow\"> </div>\n </div>\n <div>\n <ComboboxOptions\n v-show=\"\n showOptions &&\n (!!newItem || filteredItems == null || filteredItems.length > 0)\n \"\n class=\"absolute inset-x-0 z-30 mx-1 my-1 min-w-max rounded bg-gnist-white shadow-md\"\n static\n :data-cy-id=\"`PickerOptions_${texts.forName}`\"\n >\n <span class=\"block w-full border-b p-1 text-gnist-gray\">\n {{ t(suggestedlabel ?? 'picker.suggestions') }}\n </span>\n <div class=\"p-2\">\n <LoadingSpinner v-if=\"filteredItems === null\" class=\"h-8 w-8\" />\n <template v-else>\n <ComboboxOption\n v-if=\"newItem\"\n v-slot=\"{ active }\"\n :value=\"newItem\"\n :data-cy-id=\"`PickerNewItem_${texts.forName}`\"\n >\n <div\n :class=\"[\n 'p-2',\n 'text-gnist-black hover:bg-gnist-gray-light-light focus:bg-gnist-gray-light-light',\n 'flex items-center gap-2',\n active ? 'bg-gnist-gray-light-light' : '',\n ]\"\n >\n {{ t(addPrefix ?? 'picker.create') }}\n <slot name=\"tagOption\" :item=\"newItem\">\n \"{{ newItem.name }}\"\n </slot>\n </div>\n </ComboboxOption>\n <ComboboxOption\n v-for=\"item in filteredItems\"\n v-slot=\"{ active }\"\n :key=\"item.key ?? 'new_item'\"\n :value=\"item\"\n :data-cy-value=\"item.name\"\n >\n <div\n :class=\"[\n 'p-2',\n 'text-gnist-black hover:bg-gnist-gray-light-light focus:bg-gnist-gray-light-light',\n 'flex items-center gap-2',\n active ? 'bg-gnist-gray-light-light' : '',\n ]\"\n >\n <slot name=\"tagOption\" :item=\"item\">\n {{ item.name }}\n </slot>\n </div>\n </ComboboxOption>\n </template>\n </div>\n </ComboboxOptions>\n </div>\n </Combobox>\n </label>\n</template>\n","<script setup lang=\"ts\">\nimport type { IInputLabelProps } from './InputLabel.vue';\nimport Picker from '@/components/forms/InputPicker.vue';\nimport { useInternalState } from '@/utilities/useInternalState';\nimport { type TranslatedBlock, useBlockListLazy } from '@/api/blocks';\nimport { useI18n } from 'vue-i18n';\nimport type { Guid } from '@/api/types';\nimport { toRef, watch } from 'vue';\nimport { nextTick } from 'vue';\nimport { sleep } from '@/utilities/sleep';\n\nconst props = defineProps<\n IInputLabelProps & {\n noChrome?: boolean;\n modelValue: Guid | undefined;\n }\n>();\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: typeof props.modelValue): void;\n (e: 'update:valid', valid: boolean): void;\n (e: 'changed', value: TranslatedBlock | null): void;\n (e: 'loaded'): void;\n (e: 'focus'): void;\n (e: 'blur'): void;\n}>();\nconst { result: blocks } = useBlockListLazy();\n\nconst { t } = useI18n();\n\nconst value = useInternalState<typeof props.modelValue, TranslatedBlock | null>(\n toRef(props, 'modelValue'),\n null,\n (val) => emit('update:modelValue', val),\n (newExtState) => {\n if (!newExtState || !blocks.value) {\n return null;\n } else {\n return blocks.value.find((b) => b.blockId === newExtState) ?? null;\n }\n },\n (newIntState) => newIntState?.blockId,\n true,\n true,\n);\nwatch(\n blocks,\n async () => {\n if (!blocks.value) return;\n if (props.modelValue) {\n value.value =\n blocks.value.find((b) => b.blockId === props.modelValue) ?? null;\n }\n await nextTick();\n emit('loaded');\n },\n { immediate: true },\n);\nwatch(value, () => emit('changed', value.value));\n\nasync function searchBlocks(query: string): Promise<TranslatedBlock[]> {\n const maxWaitTime = 2000;\n let elapsed = 0;\n while (!blocks.value) {\n await sleep(100);\n elapsed += 100;\n if (elapsed > maxWaitTime) {\n break;\n }\n }\n if (!blocks.value) return [];\n const itemLimit = 10;\n const matches =\n query.trim() == ''\n ? blocks.value\n : blocks.value.filter((b) => b.name.toLowerCase().includes(query));\n return matches.slice(0, itemLimit);\n}\n</script>\n\n<template>\n <Picker\n v-bind=\"props\"\n v-model=\"value\"\n :getkey=\"(val) => val?.blockId ?? ''\"\n :gettext=\"\n (val) =>\n (val?.name ?? '') +\n (val?.status === 'Draft'\n ? ` (${t('block.schema.blockSelectorBlockIsDraft')})`\n : '')\n \"\n :taglistclass=\"[\n 'w-full grow [&>*]:grow',\n { '[&>*]:justify-between': !noChrome },\n ]\"\n :filter=\"searchBlocks\"\n :max-items=\"1\"\n show-empty-suggestions\n class=\"row-span-2 md:mr-4\"\n @focus=\"emit('focus')\"\n @blur=\"emit('blur')\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport Picker from '@/components/forms/InputPicker.vue';\nimport type { Guid, Link, Translated } from '@/api/types';\nimport { useNestedMV } from '@/utilities/useInternalState';\nimport { computed, ref, watch, type Ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useRouter } from 'vue-router';\nimport {\n getBlocksRouteLink,\n getDocumentRouteName,\n removeRouteIdentifier,\n} from '@/utilities/routeUtils';\nimport { hardcodedStaticRoutes } from '@/router/routeUtils';\nimport { useRouteItems } from '@/api/menu';\nimport { translateStringOrLocale } from '@/i18n';\nimport InputBlockPicker from './forms/InputBlockPicker.vue';\n\nconst { t } = useI18n();\n\nconst props = defineProps<{\n modelValue: Pick<Translated<Link>, 'url'> &\n Partial<Pick<Translated<Link>, 'text' | 'alt'>>;\n hideText?: boolean;\n hideDescription?: boolean;\n dataCyId: string;\n showValidationMessage?: boolean;\n required?: boolean;\n /** Used for connecting label and input */\n forName: string;\n canTargetBlocks?: boolean;\n canTargetHardcoded?: boolean;\n canTargetRoutes?: boolean;\n cannotTargetExternal?: boolean;\n selectedType: 'block' | 'hardcoded' | 'route' | 'link' | undefined;\n}>();\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: typeof props.modelValue): void;\n (e: 'update:valid', valid: boolean): void;\n (e: 'update:selectedType', type: typeof props.selectedType): void;\n}>();\n\nconst value = useNestedMV(props, (val) => emit('update:modelValue', val));\nconst urlRef = ref<HTMLInputElement | null>(null);\nwatch(\n () => value.value.url,\n () => emit('update:valid', urlRef.value?.reportValidity() ?? false),\n);\nconst router = useRouter();\n\nconst selectedBlockId = ref<Guid | undefined>();\n\nconst hardcodedRouteOptions = computed(() =>\n hardcodedStaticRoutes.map((r) => ({\n ...r,\n name: r.name?.toString() ?? '',\n text: r.sourceTitle\n ? `${t(r.sourceTitle)} [\"${r.fullPath?.replace(/\\/:.*?\\?/g, '')}\"]`\n : r.fullPath?.replace(/\\/:.*?\\?/g, '') ?? r.path,\n })),\n);\ntype HardcodedRoute = (typeof hardcodedRouteOptions.value)[number];\nconst selectedHardcoded = ref<HardcodedRoute | undefined>();\nasync function searchHardcoded(query: string): Promise<HardcodedRoute[]> {\n if (!props.canTargetHardcoded) return [];\n const itemLimit = 25;\n const matches =\n query.trim() == ''\n ? hardcodedRouteOptions.value\n : hardcodedRouteOptions.value.filter((b) =>\n b.text.toLowerCase().includes(query),\n );\n return matches.slice(0, itemLimit);\n}\n\nconst _routeItems: Ref<ReturnType<typeof useRouteItems>['result']['value']> =\n props.canTargetRoutes ? useRouteItems().result : ref(null);\ntype TranslatedRouteItem = Translated<\n NonNullable<typeof _routeItems.value>[number]\n>;\nconst routeItems = ref<TranslatedRouteItem[]>();\nwatch(_routeItems, () => {\n routeItems.value = _routeItems.value?.map(\n (r): TranslatedRouteItem => ({\n ...r,\n text: translateStringOrLocale(r.text).value,\n }),\n );\n});\nconst selectedRouteItem = ref<TranslatedRouteItem>();\nasync function searchRouteItems(query: string): Promise<TranslatedRouteItem[]> {\n if (!routeItems.value) return [];\n const itemLimit = 25;\n const matches =\n query.trim() == ''\n ? routeItems.value\n : routeItems.value.filter((b) => b.text.toLowerCase().includes(query));\n return matches.slice(0, itemLimit);\n}\nconst blocksLoaded = ref(false);\nwatch(\n [blocksLoaded, routeItems],\n () => {\n if (!value.value.url && !props.cannotTargetExternal) {\n emit('update:selectedType', 'link');\n return;\n }\n if (props.canTargetBlocks && !blocksLoaded.value) return;\n if (props.canTargetRoutes && !routeItems.value) return;\n // Attempt to set selected value based on the stored url\n const routeMatch = router.resolve(value.value.url);\n if (props.canTargetBlocks) {\n selectedBlockId.value = routeMatch.params.blockId as Guid;\n }\n const savedRouteName = removeRouteIdentifier(\n routeMatch.name?.toString() ?? '',\n );\n if (props.canTargetHardcoded) {\n selectedHardcoded.value = hardcodedRouteOptions.value.find(\n (r) => r.name === savedRouteName,\n );\n }\n if (props.canTargetRoutes) {\n selectedRouteItem.value = routeItems.value?.find(\n (b) => b.routeName === savedRouteName,\n );\n }\n // Define what is actually selected (in case there are multiple matches), and set selectedType\n if (selectedRouteItem.value) {\n emit('update:selectedType', 'route');\n } else if (selectedHardcoded.value) {\n emit('update:selectedType', 'hardcoded');\n } else if (selectedBlockId.value) {\n emit('update:selectedType', 'block');\n } else {\n if (!props.cannotTargetExternal) {\n emit('update:selectedType', 'link');\n } else if (props.canTargetBlocks) {\n emit('update:selectedType', 'block');\n } else if (props.canTargetHardcoded) {\n emit('update:selectedType', 'hardcoded');\n } else if (props.canTargetRoutes) {\n emit('update:selectedType', 'route');\n } else {\n throw new Error('All link types disabled, cannot use Link Input');\n }\n }\n },\n { immediate: true },\n);\n\nwatch(\n () => props.selectedType,\n (_, oldVal) => {\n if (oldVal === undefined) return; // Initial setting of value\n // Clear all stored values if type is changed\n selectedBlockId.value = undefined;\n selectedHardcoded.value = undefined;\n selectedRouteItem.value = undefined;\n value.value.url = '';\n },\n);\n</script>\n\n<template>\n <div :data-cy-id=\"dataCyId\">\n <Picker\n v-if=\"selectedType === 'hardcoded'\"\n :model-value=\"selectedHardcoded\"\n suggestedlabel=\"block.schema.linkRouteSuggestion\"\n :getkey=\"(val) => val?.name?.toString() ?? ''\"\n :gettext=\"(val) => val?.text ?? ''\"\n :taglistclass=\"['w-full grow [&>*]:grow [&>*]:justify-between']\"\n :filter=\"searchHardcoded\"\n :max-items=\"1\"\n show-empty-suggestions\n class=\"row-span-2 md:mr-4\"\n @update:model-value=\"\n (val) => {\n selectedHardcoded = val;\n value.url = val?.name\n ? router.resolve({ name: val.name }).fullPath\n : '';\n if (hideText || !value.text) {\n value.text = val?.text;\n }\n }\n \"\n />\n <Picker\n v-if=\"selectedType === 'route'\"\n :model-value=\"selectedRouteItem\"\n suggestedlabel=\"block.schema.linkRouteItemSuggestion\"\n :getkey=\"(val) => val?.id.toString() ?? ''\"\n :gettext=\"(val) => val?.text ?? ''\"\n :taglistclass=\"['w-full grow [&>*]:grow [&>*]:justify-between']\"\n :filter=\"searchRouteItems\"\n :max-items=\"1\"\n show-empty-suggestions\n class=\"row-span-2 md:mr-4\"\n @update:model-value=\"\n (val) => {\n selectedRouteItem = val;\n value.url = val?.routeName\n ? router.resolve({\n name: getDocumentRouteName(val.routeName, true),\n }).fullPath\n : '';\n if (hideText || !value.text) {\n value.text = val?.text;\n }\n }\n \"\n />\n\n <input\n v-else-if=\"selectedType === 'link'\"\n :id=\"forName\"\n ref=\"urlRef\"\n v-model=\"value.url\"\n type=\"url\"\n class=\"w-full border p-2\"\n :placeholder=\"t('block.schema.linkUrlPlaceholder')\"\n :required=\"required\"\n data-cy-id=\"InputLinkUrl\"\n @focus=\"if (showValidationMessage) urlRef?.reportValidity();\"\n />\n <InputBlockPicker\n v-if=\"canTargetBlocks\"\n v-show=\"selectedType === 'block'\"\n :model-value=\"selectedBlockId\"\n suggestedlabel=\"block.schema.linkBlockSuggestion\"\n @loaded=\"blocksLoaded = true\"\n @changed=\"\n (val) => {\n if (hideText || !value.text) {\n value.text = val?.name;\n }\n value.alt = val?.description;\n }\n \"\n @update:model-value=\"\n (val) => {\n selectedBlockId = val;\n value.url = val\n ? router.resolve(getBlocksRouteLink(val)).fullPath\n : '';\n }\n \"\n />\n <template v-if=\"!hideText\">\n <label class=\"mt-6 block\">{{ t('block.schema.linkTextTitle') }}</label>\n <input\n v-model=\"value.text\"\n class=\"w-full border p-2\"\n :placeholder=\"t('block.schema.linkTextPlaceholder')\"\n data-cy-id=\"InputLinkText\"\n />\n </template>\n <template v-if=\"!hideDescription\">\n <label class=\"mt-6 block\">{{\n t('block.schema.linkDescriptionTitle')\n }}</label>\n <input\n v-model=\"value.alt\"\n class=\"w-full border p-2\"\n :placeholder=\"t('block.schema.linkDescriptionPlaceholder')\"\n data-cy-id=\"InputLinkDescription\"\n />\n </template>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { Link, PartialSome, Translated } from '@/api/types';\nimport { computed, ref, watchEffect } from 'vue';\nimport ModalComponent from '../ModalComponent.vue';\nimport ButtonComponent from '../ButtonComponent.vue';\nimport InputLinkBase from '../InputLinkBase.vue';\nimport { useI18n } from 'vue-i18n';\nimport InputLabel, {\n useDynamicLabelTexts,\n type IInputLabelProps,\n} from './InputLabel.vue';\nimport { useNestedMVDefault } from '@/utilities/useInternalState';\n\nconst { t } = useI18n();\n\nconst props = defineProps<\n IInputLabelProps & {\n modelValue: PartialSome<Translated<Link>, 'text' | 'alt'> | undefined;\n /** Used for connecting label and input */\n forName: string;\n showValidationMessage?: boolean;\n inline?: boolean;\n hideText?: boolean;\n hideDescription?: boolean;\n canTargetBlocks?: boolean;\n canTargetHardcoded?: boolean;\n canTargetRoutes?: boolean;\n cannotTargetExternal?: boolean;\n alwaysShowTypeSelect?: boolean;\n }\n>();\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: typeof props.modelValue): void;\n (e: 'update:valid', valid: boolean): void;\n}>();\n\nconst value = useNestedMVDefault(\n props,\n (val) => emit('update:modelValue', val),\n { url: '' },\n);\n\nconst showLinkModal = ref<boolean>(false);\n\nconst oldLink = ref<typeof props.modelValue>({\n url: '',\n text: '',\n alt: '',\n});\n\nconst isValid = ref(true);\nwatchEffect(() => emit('update:valid', isValid.value));\n\nconst disableSave = computed(() => {\n const unChanged =\n oldLink.value?.url == value.value?.url &&\n oldLink.value?.text == value.value?.text &&\n oldLink.value?.alt == value.value?.alt;\n return !isValid.value || !value.value?.url || unChanged;\n});\n\nconst openModal = async () => {\n oldLink.value = Object.assign({}, value.value);\n showLinkModal.value = true;\n};\n\nconst onSave = async () => {\n showLinkModal.value = false;\n};\nconst onCancel = async () => {\n if (oldLink.value) value.value = oldLink.value;\n showLinkModal.value = false;\n};\n\nconst showSelector = computed(() => {\n let optionCount = 0;\n if (props.canTargetBlocks) optionCount++;\n if (props.canTargetHardcoded) optionCount++;\n if (props.canTargetRoutes) optionCount++;\n return optionCount > 1 || (optionCount === 1 && props.alwaysShowTypeSelect);\n});\nconst selectedType = ref<'block' | 'hardcoded' | 'route' | 'link'>();\nconst texts = useDynamicLabelTexts(props);\n</script>\n\n<template>\n <label :for=\"forName\" class=\"flex flex-col whitespace-nowrap\">\n <InputLabel v-bind=\"props\" limit-label-start>\n <template #labelEnd>\n <div\n v-if=\"showSelector\"\n class=\"flex max-w-max grow flex-wrap text-xl\"\n role=\"listbox\"\n >\n <ButtonComponent\n v-if=\"props.canTargetBlocks\"\n class=\"!flex w-8 items-center justify-center hover:bg-gnist-gray-light\"\n :class=\"{ 'bg-gnist-gray': selectedType === 'block' }\"\n text=\"block.schema.linkTypeBlock\"\n icon=\"article\"\n icon-class=\"text-xl\"\n :selected=\"selectedType === 'block'\"\n @click=\"selectedType = 'block'\"\n />\n <ButtonComponent\n v-if=\"props.canTargetHardcoded\"\n class=\"!flex w-8 items-center justify-center hover:bg-gnist-gray-light\"\n :class=\"{ 'bg-gnist-gray': selectedType === 'hardcoded' }\"\n text=\"block.schema.linkTypeRoute\"\n icon=\"apps\"\n icon-class=\"text-xl\"\n :selected=\"selectedType === 'hardcoded'\"\n @click=\"selectedType = 'hardcoded'\"\n />\n <ButtonComponent\n v-if=\"props.canTargetRoutes\"\n class=\"!flex w-8 items-center justify-center hover:bg-gnist-gray-light\"\n :class=\"{ 'bg-gnist-gray': selectedType === 'route' }\"\n text=\"block.schema.linkTypeRouteItem\"\n icon=\"route\"\n icon-class=\"text-xl\"\n :selected=\"selectedType === 'route'\"\n @click=\"selectedType = 'route'\"\n />\n <ButtonComponent\n v-if=\"!props.cannotTargetExternal\"\n class=\"!flex w-8 items-center justify-center hover:bg-gnist-gray-light\"\n :class=\"{ 'bg-gnist-gray': selectedType === 'link' }\"\n text=\"block.schema.linkTypeLink\"\n icon=\"language\"\n icon-class=\"text-xl\"\n :selected=\"selectedType === 'link'\"\n @click=\"selectedType = 'link'\"\n />\n </div>\n </template>\n </InputLabel>\n <InputLinkBase\n v-if=\"inline\"\n v-model=\"value\"\n :for-name=\"forName\"\n :data-cy-id=\"`InputLinkInput_${texts.forName}`\"\n :required=\"required\"\n :hide-text=\"hideText\"\n :hide-description=\"hideDescription\"\n :show-validation-message=\"showValidationMessage\"\n :can-target-blocks=\"canTargetBlocks\"\n :can-target-hardcoded=\"canTargetHardcoded\"\n :can-target-routes=\"canTargetRoutes\"\n :cannot-target-external=\"cannotTargetExternal\"\n :selected-type=\"selectedType\"\n @update:valid=\"(valid) => (isValid = valid)\"\n @update:selected-type=\"(type) => (selectedType = type)\"\n />\n <div v-else class=\"flex items-center\">\n <div>\n <button\n class=\"gnist-button\"\n :data-cy-id=\"`InputLinkSelect_${texts.forName}`\"\n @click.prevent=\"openModal\"\n >\n {{\n value?.url\n ? t('block.schema.changeLink')\n : t('block.schema.chooseLink')\n }}\n </button>\n </div>\n <div v-if=\"value?.url\" class=\"ml-4\">\n <a\n :href=\"value.url\"\n :alt=\"value.alt\"\n target=\"_blank\"\n class=\"underline\"\n >{{ value.text != '' ? value.text : value.url }}</a\n >\n </div>\n <div v-else class=\"ml-4\">\n <p>{{ t('block.schema.noLinkGiven') }}</p>\n </div>\n </div>\n\n <ModalComponent\n :show-modal=\"showLinkModal\"\n :title=\"t('block.schema.editLink')\"\n @close=\"onCancel\"\n >\n <template #default>\n <label class=\"mt-6 block\">{{ t('block.schema.linkUrlTitle') }}</label>\n <InputLinkBase\n v-model=\"value\"\n :for-name=\"forName\"\n :data-cy-id=\"`InputLinkInput_${texts.forName}`\"\n :required=\"required\"\n :hide-text=\"hideText\"\n :hide-description=\"hideDescription\"\n :show-validation-message=\"showValidationMessage\"\n :can-target-blocks=\"canTargetBlocks\"\n :can-target-hardcoded=\"canTargetHardcoded\"\n :can-target-routes=\"canTargetRoutes\"\n :cannot-target-external=\"cannotTargetExternal\"\n :selected-type=\"selectedType\"\n @update:valid=\"(valid) => (isValid = valid)\"\n @update:selected-type=\"(type) => (selectedType = type)\"\n />\n </template>\n <template #buttons>\n <div class=\"flex justify-end\">\n <div class=\"gnist-button-group\">\n <ButtonComponent :text=\"t('buttons.cancel')\" @click=\"onCancel\" />\n <ButtonComponent\n :disabled=\"disableSave\"\n :text=\"t('admin.blockProduction.save')\"\n type=\"primary\"\n :data-cy-id=\"`InputLinkSave_${texts.forName}`\"\n @click=\"onSave\"\n />\n </div>\n </div>\n </template>\n </ModalComponent>\n </label>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport InputLabel, {\n useDynamicLabelTexts,\n type IInputLabelProps,\n} from './InputLabel.vue';\nimport type { VueClass } from '@/api/types';\nimport { useI18n } from 'vue-i18n';\n\nconst { t } = useI18n();\n\nconst props = withDefaults(\n defineProps<\n IInputLabelProps & {\n modelValue?: boolean | null;\n checkboxClass?: VueClass;\n mode?: 'checkbox' | 'toggle';\n direction?: 'horizontal' | 'vertical';\n disabled?: boolean;\n inverted?: boolean;\n }\n >(),\n {\n modelValue: undefined,\n checkboxClass: undefined,\n mode: 'checkbox',\n direction: 'vertical',\n },\n);\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void;\n}>();\nconst value = computed({\n get() {\n return props.inverted ? !props.modelValue : !!props.modelValue;\n },\n set(newValue) {\n emit('update:modelValue', props.inverted ? !newValue : newValue);\n },\n});\nconst texts = useDynamicLabelTexts(props);\n</script>\n<template>\n <label\n class=\"flex\"\n :class=\"{\n 'md:flex-col': direction === 'vertical',\n 'grow flex-row-reverse items-center justify-end':\n direction !== 'vertical',\n }\"\n >\n <InputLabel v-bind=\"props\">\n <slot>\n <span\n v-if=\"texts.label\"\n class=\"block min-w-0 text-left\"\n :class=\"[labelClass, { 'sr-only': srOnly }]\"\n >\n {{ t(texts.label) }}\n </span>\n </slot>\n </InputLabel>\n <div\n class=\"flex items-center\"\n :class=\"{\n 'my-2 grow p-2': direction == 'vertical',\n 'h-8 self-start': direction !== 'vertical',\n }\"\n >\n <input\n :value=\"value\"\n :checked=\"value\"\n type=\"checkbox\"\n :class=\"[\n {\n 'gnist-checkbox self-center': mode === 'checkbox',\n toggle: mode === 'toggle',\n 'mr-2': direction === 'horizontal',\n },\n checkboxClass,\n ]\"\n :disabled=\"disabled\"\n :data-cy-id=\"`InputCheckbox_${texts.forName}`\"\n @change=\"(ev) => (value = !!(ev.target as HTMLInputElement).checked)\"\n />\n </div>\n </label>\n</template>\n\n<style scoped>\n.toggle:checked,\n.toggle[checked='true'],\n.toggle[aria-checked='true'] {\n --tglbg: rgb(var(--gnist-color-blue-dark) / var(--tw-bg-opacity));\n @apply bg-gnist-white;\n}\n</style>\n","import { apiUrl } from '@/config';\nimport type { Ref } from 'vue';\nimport type { Guid, OrganizationData, OrganizationUser } from './types';\nimport {\n compose,\n type ComposableResult,\n composeWithRefresh,\n type ComposableResultWithRefresh,\n} from './composable';\nimport { throwErrorPageTrigger } from '@/utilities/throwErrorPageTrigger';\n\nconst orgUrl = `${apiUrl}/organization`;\n\nexport function useOrganizations(\n includeAll = false,\n): ComposableResult<OrganizationData[]> {\n return compose(getOrganizations(includeAll));\n}\nexport const getOrganizations = async (\n includeAll: boolean,\n): Promise<OrganizationData[]> => {\n const response = await fetch(`${orgUrl}?includeAll=${includeAll}`, {\n method: 'GET',\n credentials: 'include',\n });\n throwErrorPageTrigger(response);\n if (!response.ok) throw new Error('error.get_organizations_failed');\n const data: OrganizationData[] = await response.json();\n return data.sort((a, b) => a.name.localeCompare(b.name));\n};\n\nasync function getOrganization(\n orgId: string,\n throwForErrorPages = false,\n): Promise<OrganizationData | null> {\n const r = await fetch(`${orgUrl}/${orgId}`);\n if (throwForErrorPages) {\n throwErrorPageTrigger(r);\n }\n try {\n if (!r.ok) return null;\n const data: OrganizationData = await r.json();\n addFrontendData(data);\n return data;\n } catch {\n return null;\n }\n}\n\nfunction addFrontendData(data: OrganizationData) {\n const frontendData: Pick<OrganizationData, 'country' | 'numberOfEmployees'> =\n JSON.parse(data.frontendData ?? '{}');\n data.country = frontendData.country;\n data.numberOfEmployees = frontendData.numberOfEmployees;\n}\n\nexport function useOrganization(\n orgId: string | Ref<string | undefined>,\n throwForErrorPages = false,\n): ComposableResultWithRefresh<OrganizationData | null> {\n const refresh = async () =>\n typeof orgId === 'string'\n ? getOrganization(orgId, throwForErrorPages)\n : orgId.value === undefined\n ? null\n : getOrganization(orgId.value, throwForErrorPages);\n return composeWithRefresh(\n refresh,\n typeof orgId === 'string' ? undefined : orgId,\n );\n}\n\nexport async function getBlocksForOrganization(\n orgId: string,\n): Promise<OrganizationData | null> {\n const r = await fetch(`${orgUrl}/${orgId}/products`);\n try {\n if (!r.ok) return null;\n const data: OrganizationData = await r.json();\n addFrontendData(data);\n return data;\n } catch {\n return null;\n }\n}\n\nexport function useBlocksForOrganization(\n orgId: string,\n): ComposableResult<OrganizationData | null> {\n return compose(getBlocksForOrganization(orgId));\n}\n\nexport async function createOrganization(\n organizationData: OrganizationData,\n): Promise<{ organizationId: Guid }> {\n const response = await fetch(orgUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify(organizationData),\n });\n if (!response.ok) throw new Error('error.create_org_failed');\n\n return await response.json();\n}\n\nexport async function updateOrganization(\n organizationData: OrganizationData,\n): Promise<OrganizationData> {\n const response = await fetch(`${orgUrl}/${organizationData.organizationId}`, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify(organizationData),\n });\n if (!response.ok) {\n const text = await response.text();\n if (text.includes('CONSTRAINT_VIOLATION')) {\n throw new Error('error.org_constraint_violation');\n }\n throw new Error('error.save_org_failed');\n }\n const data: OrganizationData = await response.json();\n addFrontendData(data);\n return data;\n}\n\nexport async function addUserToOrganization(\n organizationId: Guid,\n email: string,\n): Promise<OrganizationUser[]> {\n const response = await fetch(`${orgUrl}/${organizationId}/users`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify({ email: email }),\n });\n if (!response.ok) {\n const responseText = await response.text();\n if (responseText.includes('Could not find user')) {\n throw new Error('organization.userNotFound');\n } else if (responseText.includes('User already part of organization')) {\n throw new Error('organization.userAlreadyPartOfOrganization');\n }\n console.error(responseText);\n throw new Error('organization.unknownAddUserError');\n }\n\n return await response.json();\n}\n\nexport async function requestMembership(\n organizationId: Guid,\n email: string,\n cancel = false,\n): Promise<OrganizationUser[]> {\n const cancelQuery = cancel ? '?cancel=true' : '';\n const response = await fetch(\n `${orgUrl}/${organizationId}/requestMembership${cancelQuery}`,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify({ email: email }),\n },\n );\n if (!response.ok) {\n if (cancel) throw new Error('organization.cancelRequestMembershipError');\n else throw new Error('organization.requestMembershipError');\n }\n return await response.json();\n}\n\nexport async function acceptMembershipRequest(\n organizationId: Guid,\n requestedUser: OrganizationUser,\n): Promise<OrganizationUser[]> {\n const response = await fetch(\n `${orgUrl}/${organizationId}/approveMembership`,\n {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify(requestedUser),\n },\n );\n if (!response.ok) {\n const responseText = await response.text();\n if (responseText.includes('Could not find user')) {\n throw new Error('organization.userNotFound');\n } else if (responseText.includes('User already part of organization')) {\n throw new Error('organization.userAlreadyPartOfOrganization');\n }\n console.error(responseText);\n throw new Error('organization.unknownAddUserError');\n }\n\n return await response.json();\n}\n\nexport async function removeUserFromOrganization(\n organizationId: Guid,\n userId: string,\n): Promise<OrganizationUser[]> {\n const response = await fetch(`${orgUrl}/${organizationId}/users/${userId}`, {\n method: 'DELETE',\n credentials: 'include',\n });\n if (!response.ok) throw new Error('error.removeUserFailed');\n\n return await response.json();\n}\n","import {\n ref,\n type ComputedRef,\n type Ref,\n type WatchSource,\n watch,\n nextTick,\n} from 'vue';\n\nexport function useValidationTracking(\n validate: WatchSource | object | (WatchSource | object)[],\n triggerFormValidation?: Ref<boolean> | ComputedRef<boolean>,\n deepWatch = false,\n initialState = true,\n) {\n const errors = ref<{ [key: string]: boolean }>({});\n const formRef = ref<HTMLFormElement | null>();\n const isValid = ref(initialState);\n const runValidation = async () => {\n await nextTick();\n if (!triggerFormValidation || triggerFormValidation.value) {\n formRef.value?.reportValidity();\n }\n isValid.value =\n (!formRef.value || formRef.value.checkValidity()) &&\n Object.values(errors.value).find((value) => value === true) === undefined;\n };\n watch(validate, () => runValidation(), { deep: deepWatch });\n watch(formRef, () => runValidation(), { deep: deepWatch });\n if (triggerFormValidation) {\n watch(triggerFormValidation, () => runValidation(), { deep: true });\n }\n watch(errors, () => runValidation(), { deep: true });\n\n function onValidChanged(name: string, isValid: boolean) {\n errors.value[name] = !isValid;\n }\n return { onValidChanged, formRef, isValid };\n}\n","<script setup lang=\"ts\">\nimport { ref, computed } from 'vue';\nimport ButtonComponent from './ButtonComponent.vue';\nimport Dropdown, {\n toDropdownItems,\n} from '@/components/forms/InputDropdown.vue';\nimport ImageInput from '@/components/forms/InputImage.vue';\nimport LinkInput from '@/components/forms/InputLink.vue';\nimport TextInput from '@/components/forms/InputText.vue';\nimport {\n EMPTY_GUID,\n type BlockImage,\n type Link,\n type OrganizationData,\n} from '@/api/types';\nimport { useI18n } from 'vue-i18n';\nimport Checkbox from '@/components/forms/InputCheckbox.vue';\nimport { useStoreAbility } from '@/abilities';\nimport {\n createOrganization,\n updateOrganization,\n requestMembership,\n} from '@/api/organization';\nimport { getBlobFilename, getBlobUrl } from '@/api/blob';\nimport { useValidationTracking } from '@/utilities/useValidationTracking';\nimport { useCurrentUser } from '@/api/auth';\n\nconst { t } = useI18n();\nconst { can } = useStoreAbility();\n\nconst userInfo = useCurrentUser();\nconst memberOrgs = computed(() => userInfo.value?.memberOrgs);\nconst requestedOrgs = computed(() => userInfo.value?.requestedOrgs ?? []);\n\nconst props = defineProps<{\n data: OrganizationData;\n isCreate?: boolean;\n allOrgs?: OrganizationData[] | null;\n}>();\n\nconst emit = defineEmits<{\n (e: 'onSaved', data: OrganizationData): void;\n (e: 'closeModal'): void;\n}>();\n\nfunction toInternalState(externalState: OrganizationData): Omit<\n OrganizationData,\n 'logo' | 'webpage'\n> & {\n logo: Pick<BlockImage, 'name'>;\n webpage: Pick<Link, 'url'>;\n} {\n return {\n ...externalState,\n logo: { name: getBlobFilename('/organization', externalState.logo) },\n webpage: { url: externalState.webpage },\n };\n}\n\nconst inputData = ref(toInternalState(props.data));\nconst { onValidChanged, isValid } = useValidationTracking(\n inputData,\n undefined,\n true,\n);\n\nasync function onSave() {\n let organizationData = {\n ...inputData.value,\n logo: inputData.value.logo.name\n ? getBlobUrl('/organization', inputData.value.logo.name)\n : '',\n webpage: inputData.value.webpage.url,\n frontendData: JSON.stringify({\n numberOfEmployees: inputData.value.isInternal\n ? null\n : inputData.value.numberOfEmployees,\n country: inputData.value.isInternal ? null : inputData.value.country,\n }),\n } satisfies OrganizationData;\n if (props.data.organizationId === EMPTY_GUID) {\n const result = await createOrganization(organizationData);\n organizationData.organizationId = result.organizationId;\n } else {\n organizationData = (await updateOrganization(\n organizationData,\n )) as typeof organizationData;\n inputData.value = toInternalState(organizationData);\n }\n emit('onSaved', organizationData);\n}\n\nconst submitDisabled = computed(() => {\n if (!props.data.name) return !inputData.value.name;\n\n const unChanged =\n inputData.value.name === props.data.name &&\n inputData.value.webpage.url == props.data.webpage &&\n inputData.value.logo.name ===\n getBlobFilename('/organization', props.data.logo) &&\n inputData.value.isInternal === props.data.isInternal &&\n inputData.value.numberOfEmployees === props.data.numberOfEmployees &&\n inputData.value.country === props.data.country;\n\n return !isValid.value || !inputData.value.name || unChanged;\n});\n\nconst filteredOrganizationData = computed(() =>\n props.allOrgs?.filter((org) =>\n org.name.toLowerCase().includes(inputData.value.name.toLowerCase()),\n ),\n);\n\nasync function requestMembershipOfOrg(organization: OrganizationData) {\n if (!userInfo.value?.email) return;\n await requestMembership(organization.organizationId, userInfo.value.email);\n userInfo.value?.requestedOrgs?.push(organization.organizationId);\n}\n\nconst numberOfEmployees = toDropdownItems(\n ['1-5 ', '5-20 ', '20-50 ', '50-100 ', '100-500 ', '500-1000 ', '1000+ '],\n (item) => [item, t(`${item}`) + t('supplierPage.employees').toLowerCase()],\n true,\n);\n</script>\n\n<template>\n <div\n v-if=\"inputData\"\n class=\"grid w-[80rem] max-w-full gap-6\"\n :class=\"[isCreate ? 'grid-cols-[1fr_2fr] overflow-auto' : '']\"\n >\n <div class=\"mx-1 max-h-full min-h-0\">\n <div v-if=\"can('update', 'Organization')\" class=\"my-2\">\n <Checkbox\n v-model=\"inputData.isInternal\"\n label=\"organization.internalDepartment\"\n direction=\"horizontal\"\n mode=\"toggle\"\n />\n </div>\n <div class=\"my-2\">\n <TextInput\n v-model=\"inputData.name\"\n :label=\"\n inputData.isInternal\n ? t('organization.departmentName')\n : t('organization.orgName')\n \"\n required\n show-validation-message\n />\n </div>\n <div v-if=\"!inputData.isInternal\" class=\"my-2\">\n <Dropdown\n v-model=\"inputData.numberOfEmployees\"\n label=\"supplierPage.numberOfEmployees\"\n :options=\"numberOfEmployees\"\n :getkey=\"(c) => c\"\n />\n </div>\n <div v-if=\"!inputData.isInternal\" class=\"my-2\">\n <TextInput\n v-model=\"inputData.country\"\n :label=\"t('supplierPage.country')\"\n />\n </div>\n <div class=\"my-2\">\n <LinkInput\n v-model=\"inputData.webpage\"\n for-name=\"webpage\"\n :label=\"\n inputData.isInternal\n ? 'organization.internalHomepage'\n : 'organization.homepage'\n \"\n tooltip=\"organization.homepageTooltip\"\n :tooltip-class=\"[\n isCreate ? '' : 'tooltip-left lg:tooltip-top',\n 'ml-auto !relative',\n ]\"\n inline\n hide-text\n hide-description\n show-validation-message\n @update:valid=\"(valid) => onValidChanged('webpage', valid)\"\n />\n </div>\n <div class=\"my-2 w-full\">\n <ImageInput\n v-model=\"inputData.logo\"\n for-name=\"image\"\n :label=\"\n inputData.isInternal\n ? 'organization.internalLogo'\n : 'organization.logo'\n \"\n tooltip=\"organization.logoTooltip\"\n :tooltip-class=\"[\n isCreate ? '' : 'tooltip-left lg:tooltip-top',\n 'ml-auto !relative',\n ]\"\n blob-location=\"/organization\"\n hide-description-input\n border\n />\n </div>\n </div>\n <div\n v-if=\"isCreate\"\n class=\"flex max-h-full min-h-0 flex-col overflow-hidden\"\n >\n <h3 class=\"mb-2 text-lg\">{{ t('organization.exisingOrgName') }}</h3>\n <div\n class=\"w-full overflow-y-auto rounded border border-solid text-black\"\n >\n <template v-if=\"filteredOrganizationData\">\n <div\n v-for=\"organization in filteredOrganizationData\"\n :key=\"organization.organizationId\"\n class=\"flex cursor-default items-center bg-gnist-white even:bg-gnist-gray-light-light hover:bg-gnist-blue-light-light hover:bg-opacity-50\"\n >\n <div class=\"w-full px-4\">\n {{ organization.name }}\n </div>\n <div class=\"flex min-h-12 items-center p-1\">\n <p\n v-if=\"memberOrgs?.includes(organization.organizationId)\"\n class=\"badge badge-outline badge-lg border-gnist-gray bg-gnist-purple\"\n >\n {{ t('organization.isMember') }}\n </p>\n <p\n v-else-if=\"requestedOrgs?.includes(organization.organizationId)\"\n class=\"badge badge-outline badge-lg whitespace-nowrap border-gnist-gray bg-gnist-orange\"\n >\n {{ t('organization.requestedMembership') }}\n </p>\n <ButtonComponent\n v-else\n :text=\"t('organization.requestMembership')\"\n :disabled=\"\n memberOrgs?.includes(organization.organizationId) ||\n requestedOrgs?.includes(organization.organizationId)\n \"\n @click=\"requestMembershipOfOrg(organization)\"\n />\n </div>\n </div>\n </template>\n </div>\n </div>\n <div :class=\"[isCreate ? 'col-start-2' : '']\">\n <div className=\"flex justify-end\">\n <div class=\"gnist-button-group p-1\">\n <ButtonComponent\n v-if=\"isCreate\"\n :text=\"t('buttons.cancel')\"\n @click=\"$emit('closeModal')\"\n />\n <ButtonComponent\n type=\"primary\"\n :text=\"t('buttons.save')\"\n :submit=\"true\"\n :disabled=\"submitDisabled\"\n @click=\"onSave\"\n />\n </div>\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport ContentPage from '../components/ContentPage.vue';\nimport ButtonComponent from '@/components/ButtonComponent.vue';\nimport EditOrganizationComponent from '@/components/EditOrganizationComponent.vue';\nimport { computed, ref } from 'vue';\nimport { requestMembership, useOrganizations } from '@/api/organization';\nimport { EMPTY_GUID, type OrganizationData } from '@/api/types';\nimport { useRouter } from 'vue-router';\nimport ModalComponent from '@/components/ModalComponent.vue';\nimport { useI18n } from 'vue-i18n';\nimport { useCurrentUser } from '@/api/auth';\nimport { useStoreAbility } from '@/abilities';\nimport { throwOnError } from '@/api/composable';\nimport TableComponent from '@/components/TableComponent.vue';\n\nconst { t } = useI18n();\nconst { can } = useStoreAbility();\n\nconst showModal = ref(false);\nconst router = useRouter();\n\nconst userInfo = useCurrentUser();\nconst userType = computed(() =>\n can('update', 'Organization')\n ? 'admin'\n : userInfo.value?.roles?.includes('internal')\n ? 'internal'\n : 'external',\n);\n\nconst { result: organizationData } = throwOnError(useOrganizations(true));\n\nconst filteredOrganizationData = computed(() =>\n organizationData.value?.filter(\n (org) =>\n userType.value === 'admin' ||\n userInfo.value?.memberOrgs?.includes(org.organizationId) ||\n userInfo.value?.requestedOrgs?.includes(org.organizationId),\n ),\n);\n\nconst handleModalClick = async (organizationData: OrganizationData) => {\n await router.push({\n name: 'organization',\n params: {\n organizationId: organizationData.organizationId,\n },\n });\n window.location.reload();\n};\n\nasync function cancelRequestMembershipOfOrg(organization: OrganizationData) {\n if (!userInfo.value?.email) return;\n await requestMembership(\n organization.organizationId,\n userInfo.value.email,\n true,\n );\n userInfo.value.requestedOrgs = userInfo.value?.requestedOrgs?.filter(\n (o) => o !== organization.organizationId,\n );\n}\n</script>\n<template>\n <ContentPage\n :title=\"t(`organization.listHeader.${userType}`)\"\n class=\"bg-gnist-white\"\n >\n <div class=\"pb-8 lg:px-8\">\n <TableComponent\n size=\"table-lg\"\n :rows=\"filteredOrganizationData\"\n show-spinner\n i18n-key=\"organization\"\n :get-key=\"(organization) => organization.organizationId\"\n :columns=\"['name']\"\n no-header\n class=\"mb-8 rounded border\"\n >\n <template #columns=\"{ item: organization }\">\n <td\n v-if=\"\n userInfo?.memberOrgs?.includes(organization.organizationId) ||\n userType === 'admin'\n \"\n class=\"flex items-center justify-between !py-0\"\n >\n <RouterLink\n class=\"w-full py-4\"\n :to=\"{\n name: 'organization',\n params: { organizationId: organization.organizationId },\n }\"\n >\n {{ organization.name }}\n </RouterLink>\n <p\n v-if=\"userInfo?.memberOrgs?.includes(organization.organizationId)\"\n class=\"badge badge-outline badge-lg cursor-default truncate border-gnist-gray bg-gnist-purple\"\n >\n {{ t('organization.isMember') }}\n </p>\n </td>\n <td v-else class=\"flex justify-between\">\n {{ organization.name }}\n <div class=\"flex items-center gap-4\">\n <p\n class=\"badge badge-outline badge-lg border-gnist-gray bg-gnist-orange\"\n >\n {{ t('organization.requestedMembership') }}\n </p>\n <ButtonComponent\n :text=\"t('organization.cancelRequestMembership')\"\n @click=\"cancelRequestMembershipOfOrg(organization)\"\n />\n </div>\n </td>\n </template>\n </TableComponent>\n\n <ButtonComponent\n class=\"\"\n :text=\"\n userType === 'admin'\n ? t('organization.registerAdmin')\n : userType === 'internal'\n ? t('organization.registerDepartment')\n : t('organization.register')\n \"\n type=\"primary\"\n :onclick=\"() => (showModal = true)\"\n />\n <ModalComponent\n :title=\"\n userType === 'admin'\n ? t('organization.registerAdmin')\n : userType === 'internal'\n ? t('organization.registerDepartment')\n : t('organization.register')\n \"\n size=\"full\"\n :show-modal=\"showModal\"\n no-scroll\n @close-modal=\"() => (showModal = false)\"\n >\n <template #default>\n <EditOrganizationComponent\n is-create\n :data=\"{\n organizationId: EMPTY_GUID,\n name: '',\n webpage: '',\n logo: '',\n users: [],\n requestedUsers: [],\n blocks: [],\n frontendData: '',\n numberOfEmployees: '',\n country: '',\n isInternal: userType !== 'external',\n }\"\n :all-orgs=\"organizationData\"\n @on-saved=\"handleModalClick\"\n @close-modal=\"() => (showModal = false)\"\n />\n </template>\n <template #buttons>\n <div />\n </template>\n </ModalComponent>\n </div>\n </ContentPage>\n</template>\n\n<style scoped>\n:deep(th),\n:deep(td) {\n text-align: left;\n padding: 1rem 0.5rem;\n text-overflow: ellipsis;\n}\n</style>\n","import { defineComponent, pushScopeId, popScopeId, openBlock, createBlock, Fragment, renderList, createVNode, createCommentVNode, withScopeId, createStaticVNode } from 'vue';\n\nvar script$2 = /*#__PURE__*/defineComponent({\n name: \"ParagraphShimmer\",\n props: {\n isLoading: {\n type: Boolean,\n default: true\n },\n lines: {\n type: Number,\n default: 3\n },\n randomSize: {\n type: Boolean,\n default: true\n }\n },\n methods: {\n getWidth() {\n if (this.randomSize) return Math.floor(Math.random() * (100 - 80 + 1) + 80);\n return 100;\n }\n\n }\n});\n\nconst _withId$2 = /*#__PURE__*/withScopeId(\"data-v-53cb3bd7\");\n\npushScopeId(\"data-v-53cb3bd7\");\n\nconst _hoisted_1$2 = {\n key: 0,\n class: \"shimmer\"\n};\n\npopScopeId();\n\nconst render$2 = /*#__PURE__*/_withId$2((_ctx, _cache, $props, $setup, $data, $options) => {\n return _ctx.isLoading ? (openBlock(), createBlock(\"div\", _hoisted_1$2, [(openBlock(true), createBlock(Fragment, null, renderList(_ctx.lines, i => {\n return openBlock(), createBlock(\"div\", {\n key: i\n }, [createVNode(\"div\", {\n class: \"text-item\",\n style: 'width: ' + _ctx.getWidth() + '%'\n }, null, 4)]);\n }), 128))])) : createCommentVNode(\"\", true);\n});\n\nfunction styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar css_248z$2 = \"\\n.text-item[data-v-53cb3bd7] {\\n height: 12px;\\n border-radius: 5px;\\n margin-bottom: 8px;\\n position: relative;\\n overflow: hidden;\\n background-color: rgb(211, 211, 211);\\n}\\n.text-item[data-v-53cb3bd7]::before {\\n content: \\\"\\\";\\n display: block;\\n position: absolute;\\n left: -150px;\\n top: 0;\\n height: 100%;\\n width: 150px;\\n background-image: linear-gradient(\\n to left,\\n rgba(251, 251, 251, 0.05),\\n rgba(251, 251, 251, 0.3),\\n rgba(251, 251, 251, 0.6),\\n rgba(251, 251, 251, 0.3),\\n rgba(251, 251, 251, 0.05)\\n );\\n background-image: -moz-linear-gradient(\\n to left,\\n rgba(251, 251, 251, 0.05),\\n rgba(251, 251, 251, 0.3),\\n rgba(251, 251, 251, 0.6),\\n rgba(251, 251, 251, 0.3),\\n rgba(251, 251, 251, 0.05)\\n );\\n background-image: -webkit-linear-gradient(\\n to left,\\n rgba(251, 251, 251, 0.05),\\n rgba(251, 251, 251, 0.3),\\n rgba(251, 251, 251, 0.6),\\n rgba(251, 251, 251, 0.3),\\n rgba(251, 251, 251, 0.05)\\n );\\n animation: load-53cb3bd7 1s cubic-bezier(0.4, 0, 0.2, 1) infinite;\\n}\\n@keyframes load-53cb3bd7 {\\nfrom {\\n left: -150px;\\n}\\nto {\\n left: 100%;\\n}\\n}\\n\";\nstyleInject(css_248z$2);\n\nscript$2.render = render$2;\nscript$2.__scopeId = \"data-v-53cb3bd7\";\n\nvar script$1 = /*#__PURE__*/defineComponent({\n name: \"CardShimmer\",\n props: {\n isLoading: {\n type: Boolean,\n default: true\n }\n }\n});\n\nconst _withId$1 = /*#__PURE__*/withScopeId(\"data-v-7d210bae\");\n\npushScopeId(\"data-v-7d210bae\");\n\nconst _hoisted_1$1 = {\n key: 0,\n class: \"shimmer\"\n};\n\nconst _hoisted_2 = /*#__PURE__*/createStaticVNode(\"<div class=\\\"shimmer-card\\\" data-v-7d210bae><div class=\\\"card-image\\\" data-v-7d210bae></div><div class=\\\"para\\\" data-v-7d210bae><div class=\\\"text-item\\\" style=\\\"width:92%;\\\" data-v-7d210bae></div><div class=\\\"text-item\\\" style=\\\"width:70%;\\\" data-v-7d210bae></div><div class=\\\"text-item\\\" data-v-7d210bae></div><div class=\\\"text-item\\\" style=\\\"width:20%;\\\" data-v-7d210bae></div></div></div>\", 1);\n\npopScopeId();\n\nconst render$1 = /*#__PURE__*/_withId$1((_ctx, _cache, $props, $setup, $data, $options) => {\n return _ctx.isLoading ? (openBlock(), createBlock(\"div\", _hoisted_1$1, [_hoisted_2])) : createCommentVNode(\"\", true);\n});\n\nvar css_248z$1 = \"\\n.shimmer-card[data-v-7d210bae] {\\r\\n background: #ffffff;\\r\\n width: 280px;\\r\\n box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1),\\r\\n 0 4px 6px -2px rgba(0, 0, 0, 0.05);\\r\\n border-radius: 12px;\\r\\n overflow: hidden;\\n}\\n.para[data-v-7d210bae] {\\r\\n padding: 16px;\\n}\\n.card-image[data-v-7d210bae] {\\r\\n height: 220px;\\r\\n position: relative;\\r\\n overflow: hidden;\\r\\n background-color: rgb(211, 211, 211);\\n}\\n.text-item[data-v-7d210bae] {\\r\\n height: 12px;\\r\\n border-radius: 5px;\\r\\n margin-bottom: 8px;\\r\\n position: relative;\\r\\n overflow: hidden;\\r\\n background-color: rgb(211, 211, 211);\\n}\\n.card-image[data-v-7d210bae]:before,\\r\\n.text-item[data-v-7d210bae]::before {\\r\\n content: \\\"\\\";\\r\\n display: block;\\r\\n position: absolute;\\r\\n left: -150px;\\r\\n top: 0;\\r\\n height: 100%;\\r\\n width: 150px;\\r\\n background-image: linear-gradient(\\r\\n to left,\\r\\n rgba(251, 251, 251, 0.05),\\r\\n rgba(251, 251, 251, 0.3),\\r\\n rgba(251, 251, 251, 0.6),\\r\\n rgba(251, 251, 251, 0.3),\\r\\n rgba(251, 251, 251, 0.05)\\r\\n );\\r\\n background-image: -moz-linear-gradient(\\r\\n to left,\\r\\n rgba(251, 251, 251, 0.05),\\r\\n rgba(251, 251, 251, 0.3),\\r\\n rgba(251, 251, 251, 0.6),\\r\\n rgba(251, 251, 251, 0.3),\\r\\n rgba(251, 251, 251, 0.05)\\r\\n );\\r\\n background-image: -webkit-linear-gradient(\\r\\n to left,\\r\\n rgba(251, 251, 251, 0.05),\\r\\n rgba(251, 251, 251, 0.3),\\r\\n rgba(251, 251, 251, 0.6),\\r\\n rgba(251, 251, 251, 0.3),\\r\\n rgba(251, 251, 251, 0.05)\\r\\n );\\r\\n animation: load-7d210bae 1s cubic-bezier(0.4, 0, 0.2, 1) infinite;\\n}\\n@keyframes load-7d210bae {\\nfrom {\\r\\n left: -150px;\\n}\\nto {\\r\\n left: 100%;\\n}\\n}\\r\\n\";\nstyleInject(css_248z$1);\n\nscript$1.render = render$1;\nscript$1.__scopeId = \"data-v-7d210bae\";\n\nvar script = /*#__PURE__*/defineComponent({\n name: \"FreeStyleShimmer\",\n props: {\n isLoading: {\n type: Boolean,\n default: true\n },\n width: {\n required: true\n },\n height: {\n required: true\n },\n borderRadius: {\n default: \"5px\"\n },\n color: {\n default: \"rgb(211,211,211)\"\n }\n }\n});\n\nconst _withId = /*#__PURE__*/withScopeId(\"data-v-62e0c85a\");\n\npushScopeId(\"data-v-62e0c85a\");\n\nconst _hoisted_1 = {\n key: 0,\n class: \"shimmer\"\n};\n\npopScopeId();\n\nconst render = /*#__PURE__*/_withId((_ctx, _cache, $props, $setup, $data, $options) => {\n return _ctx.isLoading ? (openBlock(), createBlock(\"div\", _hoisted_1, [createVNode(\"div\", {\n class: \"free-style\",\n style: 'width: ' + _ctx.width + '; height: ' + _ctx.height + '; border-radius: ' + _ctx.borderRadius + '; background-color: ' + _ctx.color + ';'\n }, null, 4)])) : createCommentVNode(\"\", true);\n});\n\nvar css_248z = \"\\n.free-style[data-v-62e0c85a] {\\r\\n position: relative;\\r\\n overflow: hidden;\\n}\\n.free-style[data-v-62e0c85a]::before {\\r\\n content: \\\"\\\";\\r\\n display: block;\\r\\n position: absolute;\\r\\n left: -150px;\\r\\n top: 0;\\r\\n height: 100%;\\r\\n width: 150px;\\r\\n background-image: linear-gradient(\\r\\n to left,\\r\\n rgba(251, 251, 251, 0.05),\\r\\n rgba(251, 251, 251, 0.3),\\r\\n rgba(251, 251, 251, 0.6),\\r\\n rgba(251, 251, 251, 0.3),\\r\\n rgba(251, 251, 251, 0.05)\\r\\n );\\r\\n background-image: -moz-linear-gradient(\\r\\n to left,\\r\\n rgba(251, 251, 251, 0.05),\\r\\n rgba(251, 251, 251, 0.3),\\r\\n rgba(251, 251, 251, 0.6),\\r\\n rgba(251, 251, 251, 0.3),\\r\\n rgba(251, 251, 251, 0.05)\\r\\n );\\r\\n background-image: -webkit-linear-gradient(\\r\\n to left,\\r\\n rgba(251, 251, 251, 0.05),\\r\\n rgba(251, 251, 251, 0.3),\\r\\n rgba(251, 251, 251, 0.6),\\r\\n rgba(251, 251, 251, 0.3),\\r\\n rgba(251, 251, 251, 0.05)\\r\\n );\\r\\n animation: load-62e0c85a 1s cubic-bezier(0.4, 0, 0.2, 1) infinite;\\n}\\n@keyframes load-62e0c85a {\\nfrom {\\r\\n left: -150px;\\n}\\nto {\\r\\n left: 100%;\\n}\\n}\\r\\n\";\nstyleInject(css_248z);\n\nscript.render = render;\nscript.__scopeId = \"data-v-62e0c85a\";\n\nvar components = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ParagraphShimmer: script$2,\n CardShimmer: script$1,\n FreeStyleShimmer: script\n});\n\nconst install = function installVue3Shimmer(app) {\n Object.entries(components).forEach(([componentName, component]) => {\n app.component(componentName, component);\n });\n};\n\nexport default install;\nexport { script$1 as CardShimmer, script as FreeStyleShimmer, script$2 as ParagraphShimmer };\n","<script setup lang=\"ts\">\nimport type { Colors, Tag, VueClass } from '@/api/types';\nimport { translateStringOrLocale } from '@/i18n';\nimport { computed, useAttrs } from 'vue';\n\nconst props = defineProps<{\n tags?: Pick<Tag, 'text' | 'color'>[];\n size?: 'badge-xs' | 'badge-sm' | 'badge-md' | 'badge-lg';\n color?: Colors;\n containerClass?: VueClass;\n}>();\n\nconst translatedTags = computed(() =>\n props.tags?.map((t) => ({\n text: translateStringOrLocale(t.text).value,\n color: props.color ?? t.color ?? 'green-cyan',\n })),\n);\n\ndefineOptions({\n inheritAttrs: false,\n});\nconst attrs = useAttrs();\n</script>\n\n<template>\n <div\n v-for=\"(tag, idx) in translatedTags\"\n :key=\"idx\"\n class=\"tooltip max-w-full text-center\"\n :class=\"containerClass\"\n :data-tip=\"tag.text\"\n >\n <p\n class=\"badge inline-flex max-w-full items-center truncate rounded-md text-center\"\n :class=\"[\n attrs.class,\n `bg-gnist-${tag.color}`,\n {\n 'p-2 pb-1 text-xs font-normal leading-tight': size === 'badge-xs',\n 'p-3 text-sm font-semibold leading-tight': size === 'badge-sm',\n 'p-4 text-base font-semibold leading-normal': size === 'badge-md',\n 'p-5 text-lg font-semibold leading-normal': size === 'badge-lg',\n },\n ]\"\n >\n {{ tag.text }}\n </p>\n </div>\n</template>\n\n<style scoped>\n.tooltip:before {\n width: auto;\n}\n</style>\n","import type { Suggestion } from '@/api/types';\n\ntype VssUserStoryStatus =\n | 'New'\n | 'On Hold'\n | 'Active'\n | 'Resolved'\n | 'Closed'\n | 'Removed';\n\nexport type VssStatus = VssUserStoryStatus;\n\nconst suggestionProgressStatuses = ['Planned', 'InProgress'] as const;\ntype SuggestionProgressStatus = (typeof suggestionProgressStatuses)[number];\nconst suggestionInternalStatuses = [\n 'New',\n 'UnderConsideration',\n 'InAzureDevOps',\n 'Done',\n 'Closed',\n] as const;\nexport type SuggestionInternalStatus =\n (typeof suggestionInternalStatuses)[number];\nexport const suggestionManualStatuses: SuggestionStatus[] = [\n 'New',\n 'UnderConsideration',\n 'Closed',\n];\nexport type SuggestionStatus =\n | Exclude<SuggestionInternalStatus, 'InAzureDevOps'>\n | SuggestionProgressStatus;\n\nexport function getSuggestionStatus(\n suggestion: Pick<Suggestion, 'status' | 'workItem'> | null | undefined,\n): SuggestionStatus | null {\n if (!suggestion?.status) return null;\n const workItemStatus = suggestion.workItem?.status;\n\n if (!workItemStatus) {\n if (suggestion.status === 'InAzureDevOps') return 'Planned';\n else return suggestion.status;\n } else if (workItemStatus === 'Removed') return 'Closed';\n else if (workItemStatus === 'Closed') {\n return 'Done';\n } else if (workItemStatus === 'New') return 'Planned';\n else return 'InProgress';\n}\n","<script setup lang=\"ts\">\nimport type { Colors, Suggestion } from '@/api/types';\nimport {\n getSuggestionStatus,\n type SuggestionStatus,\n} from '@/utilities/getSuggestionStatus';\nimport { computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nconst { t } = useI18n();\n\nconst colorMapping: { [key in SuggestionStatus]: Colors } = {\n New: 'white',\n UnderConsideration: 'gray',\n Planned: 'sp-blue-light',\n InProgress: 'purple',\n Done: 'green',\n Closed: 'orange',\n};\n\nconst props = defineProps<{\n status?: SuggestionStatus | null;\n suggestion?: Pick<Suggestion, 'status' | 'workItem'> | null | undefined;\n}>();\nconst statusValue = computed(\n (): SuggestionStatus | null =>\n props.status ?? getSuggestionStatus(props.suggestion),\n);\n</script>\n\n<template>\n <p\n v-if=\"statusValue\"\n class=\"badge badge-outline badge-lg min-w-[8rem] rounded border-gnist-gray px-4\"\n :class=\"[`bg-gnist-${colorMapping[statusValue]}`]\"\n >\n {{ t(`suggestions.status.${statusValue}`, statusValue ?? '') }}\n </p>\n</template>\n","import { apiUrl } from '@/config';\nimport {\n compose,\n composeLazy,\n composeWithRefresh,\n type ComposableResult,\n type LazyComposableResult,\n} from './composable';\nimport type { Tag, TagGroup } from './types';\nimport { isRef, type Ref } from 'vue';\n\nconst tagUrl = apiUrl + '/tags';\n\nexport function useTags(\n forGroupId?: Ref<number | undefined>,\n delayInit?: boolean,\n): LazyComposableResult<Tag[]>;\nexport function useTags(forGroupId?: number): ComposableResult<Tag[]>;\nexport function useTags(\n forGroupId?: number | Ref<number | undefined>,\n delayInit?: boolean,\n): ComposableResult<Tag[]> | LazyComposableResult<Tag[]> {\n if (isRef(forGroupId)) {\n const composable = composeLazy(() => {\n if (!forGroupId.value) return [];\n return getTags(forGroupId.value);\n }, forGroupId);\n if (!delayInit) composable.init();\n return composable;\n } else {\n return compose(getTags(forGroupId));\n }\n}\nasync function getTags(forGroupId?: number): Promise<Tag[]> {\n const query = forGroupId ? `?tagGroupId=${forGroupId}` : '';\n const response = await fetch(`${tagUrl}${query}`, {\n method: 'GET',\n credentials: 'include',\n });\n if (!response.ok) throw new Error(await response.text());\n return await response.json();\n}\n\nexport const createTag = async (\n tag: Omit<Tag, 'id' | 'tagGroups'>,\n): Promise<Tag> => {\n const response = await fetch(tagUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify(tag),\n });\n if (!response.ok) throw new Error('error.create_failed');\n return await response.json();\n};\nexport const updateTag = async (tag: Tag): Promise<Tag> => {\n const response = await fetch(`${tagUrl}/${tag.id}`, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify(tag),\n });\n if (!response.ok) throw new Error('error.update_failed');\n return await response.json();\n};\nexport const deleteTag = async (tagId: number): Promise<void> => {\n const response = await fetch(`${tagUrl}/${tagId}`, {\n method: 'DELETE',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n });\n if (!response.ok) throw new Error('error.delete_failed');\n};\n\nconst allTagGroupsLazy = composeLazy(() => getTagGroups());\nexport function useTagGroupsLazy(): LazyComposableResult<TagGroup[]> {\n allTagGroupsLazy.init();\n return allTagGroupsLazy;\n}\nexport function useTagGroups(): ComposableResult<TagGroup[]> {\n return compose(getTagGroups());\n}\nasync function getTagGroups(): Promise<TagGroup[]> {\n const response = await fetch(`${tagUrl}/tagGroups`, {\n method: 'GET',\n credentials: 'include',\n });\n if (!response.ok) throw new Error(await response.text());\n return await response.json();\n}\nexport function useTagGroup(\n tagGroupId: number | Ref<number | undefined>,\n): ComposableResult<TagGroup> {\n if (isRef(tagGroupId)) {\n return composeWithRefresh(() => {\n if (!tagGroupId.value) return null;\n return getTagGroup(tagGroupId.value);\n }, tagGroupId);\n } else {\n return compose(getTagGroup(tagGroupId));\n }\n}\nasync function getTagGroup(tagGroupId: number): Promise<TagGroup> {\n const response = await fetch(`${tagUrl}/tagGroups/${tagGroupId}`, {\n method: 'GET',\n credentials: 'include',\n });\n if (!response.ok) throw new Error(await response.text());\n return await response.json();\n}\nexport const createTagGroup = async (\n tagGroup: Omit<TagGroup, 'id' | 'tags'>,\n): Promise<TagGroup> => {\n const response = await fetch(`${tagUrl}/tagGroups`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify(tagGroup),\n });\n if (!response.ok) throw new Error('error.create_failed');\n return await response.json();\n};\nexport const updateTagGroup = async (\n tagGroupId: number,\n tagGroup: Omit<TagGroup, 'tags'>,\n): Promise<TagGroup> => {\n const response = await fetch(`${tagUrl}/tagGroup/${tagGroupId}`, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify(tagGroup),\n });\n if (!response.ok) throw new Error('error.update_failed');\n return await response.json();\n};\nexport const deleteTagGroup = async (tagGroupId: number): Promise<void> => {\n const response = await fetch(`${tagUrl}/tagGroup/${tagGroupId}`, {\n method: 'DELETE',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n });\n if (!response.ok) throw new Error('error.delete_failed');\n};\n","<script\n setup\n lang=\"ts\"\n generic=\"T extends PartialSome<Tag, 'text'>[] | undefined\"\n>\nimport { type IInputLabelProps } from './InputLabel.vue';\nimport Picker from './InputPicker.vue';\nimport type { PartialSome, SingleItem, Tag } from '@/api/types';\nimport type { ITagBase } from './InputPicker.vue';\nimport { useNestedMV } from '@/utilities/useInternalState';\nimport { createTag, useTags } from '@/api/tags';\n\nconst props = defineProps<\n IInputLabelProps & {\n modelValue: T;\n suggestedlabel?: string;\n taglistclass?: string[];\n addPrefix?: string;\n maxItems?: number;\n showEmptySuggestions?: boolean;\n selectOnly?: boolean;\n }\n>();\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: T): void;\n (e: 'focus'): void;\n (e: 'blur'): void;\n}>();\n\nconst value = useNestedMV(props, (val) => emit('update:modelValue', val), true);\n\nconst { result: tags } = useTags();\n\nasync function searchTags(query: string): Promise<SingleItem<T>[]> {\n if (!tags.value) return [];\n return tags.value.filter((tag) =>\n tag.text.no.toLowerCase().includes(query),\n ) as SingleItem<T>[];\n}\nasync function addTag(tag: ITagBase): Promise<SingleItem<T>> {\n const newTag = await createTag({ text: { no: tag.name } });\n tags.value?.push(newTag);\n return newTag as SingleItem<T>;\n}\n</script>\n\n<template>\n <Picker\n v-bind=\"props\"\n v-model=\"value\"\n :getkey=\"(val) => val?.id ?? -1\"\n :gettext=\"(val) => val?.text?.no ?? ''\"\n :filter=\"searchTags\"\n :add=\"selectOnly ? undefined : (tag) => addTag(tag)\"\n :get-by-id=\"(id) => tags?.find((i) => i.id === id) as SingleItem<T>\"\n @focus=\"emit('focus')\"\n @blur=\"emit('blur')\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport ButtonComponent from '@/components/ButtonComponent.vue';\nimport { ParagraphShimmer } from 'vue3-shimmer';\nimport MaterialIcon from '@/components/MaterialIcon.vue';\nimport MarkdownRenderer from '@/components/block/MarkdownRenderer.vue';\nimport TagRenderer from '@/components/TagRenderer.vue';\nimport SuggestionStatusBadge from '@/components/SuggestionStatusBadge.vue';\nimport SearchBar from '../components/SearchBar.vue';\nimport TagPicker from '@/components/forms/InputTagPicker.vue';\nimport { throwOnError } from '@/api/composable';\nimport { useI18n } from 'vue-i18n';\nimport { useSuggestions } from '@/api/suggestion';\nimport { formatDate } from '@/utilities/formatDate';\nimport { descMsgId } from '@/api/menu';\nimport { useRoute } from 'vue-router';\nimport { useStoreAbility } from '@/abilities';\nimport { useSort } from '@/utilities/order';\nimport { useCurrentUser } from '@/api/auth';\nimport Dropdown, {\n toDropdownItems,\n} from '@/components/forms/InputDropdown.vue';\nimport { computed, ref } from 'vue';\nimport {\n getSuggestionStatus,\n type SuggestionStatus,\n} from '@/utilities/getSuggestionStatus';\nimport type { SingleItem, Tag } from '@/api/types';\n\nconst { t } = useI18n();\nconst route = useRoute();\n\nconst user = useCurrentUser();\nconst { can } = useStoreAbility();\nconst showEditButton = can('update', 'Suggestion');\n\nconst { result: suggestions } = throwOnError(useSuggestions());\nconst { sortedValues: sortedSuggestions } = useSort(\n suggestions,\n [],\n 'votes',\n 'desc',\n);\n\ntype SuggestionStatusWithCount = { status: SuggestionStatus; count: number };\nconst selectedSuggestionStatuses = ref<SuggestionStatusWithCount[]>([]);\nconst selectedSuggestionTypes = ref<string[]>([]);\n\nconst suggestionStatusOptions = computed(() => {\n if (!sortedSuggestions.value) return [];\n const items = sortedSuggestions.value.reduce((acc, s) => {\n const status = getSuggestionStatus(s);\n if (!status) return acc;\n let item = acc.find((i) => i.status === status);\n if (!item) {\n item = { status, count: 1 };\n acc.push(item);\n } else item.count++;\n return acc;\n }, [] as SuggestionStatusWithCount[]);\n return toDropdownItems(items, (s) => [\n s.status,\n t(`suggestions.status.${s.status}`),\n s,\n ]);\n});\n\nconst statusFilter = (status: SuggestionStatus | null) => {\n if (status === null) return;\n return (\n selectedSuggestionStatuses.value.length === 0 ||\n selectedSuggestionStatuses.value.find((s) => s.status === status)\n );\n};\n\nconst typeFilter = (type: string) => {\n return (\n selectedSuggestionTypes.value.length === 0 ||\n selectedSuggestionTypes.value.find((s) => s === type)\n );\n};\n\nconst selectedTags = ref<Tag[]>([]);\nconst tagFilter = (tags: Tag[] | undefined) => {\n if (selectedTags.value.length === 0) return true;\n return selectedTags.value.find((t) => tags?.find((bt) => bt.id === t.id));\n};\n\nconst searchText = ref('');\nconst matchesSearch = (\n suggestion: SingleItem<NonNullable<typeof sortedSuggestions.value>>,\n) => {\n const searchLower = searchText.value.toLowerCase();\n return (\n suggestion.title.toLowerCase().includes(searchLower) ||\n suggestion.description.toLowerCase().includes(searchLower)\n );\n};\n\nconst filterSuggestions = computed(() => {\n return (\n sortedSuggestions.value?.filter(\n (s) =>\n statusFilter(getSuggestionStatus(s)) &&\n typeFilter(s.type) &&\n tagFilter(s.tags) &&\n matchesSearch(s),\n ) ?? []\n );\n});\n</script>\n\n<template>\n <div class=\"w-full bg-gnist-gray-light-light text-gnist-black\">\n <ParagraphShimmer\n v-if=\"suggestions === null\"\n :lines=\"20\"\n :random-size=\"true\"\n class=\"mx-auto w-full max-w-5xl\"\n />\n\n <div v-else class=\"mx-2 py-8 md:mx-auto md:w-[80rem]\">\n <h2 class=\"mb-16\">\n {{ t('header.items.suggestions') }}\n </h2>\n <p class=\"text-subtitle mt-4 max-w-2xl text-gnist-black\">\n {{ t(`${descMsgId}.${route.meta.translationid}`, ' ') }}\n </p>\n <div class=\"flex min-h-[6rem] flex-col justify-between md:flex-row\">\n <div\n class=\"flex flex-wrap items-end justify-start gap-x-4 md:flex-nowrap\"\n >\n <!-- TODO: consider a top/new/trending filter (ref. https://nhs-digital-api-management.featureupvote.com/) -->\n <Dropdown\n v-model=\"selectedSuggestionStatuses\"\n :options=\"suggestionStatusOptions\"\n :getkey=\"(s) => s?.status ?? 'empty'\"\n :multiple=\"{ emptyLabel: t('suggestions.admin.status') }\"\n class=\"z-20 px-1 lg:max-w-xs\"\n :buttonclass=\"[\n 'w-full mt-2 px-2 py-2 pb-2 [&>*]:pb-2',\n 'border rounded',\n 'bg-gnist-white',\n ]\"\n >\n <template #option=\"{ item }\">\n <SuggestionStatusBadge :status=\"item.value.status\" />\n ({{ item.value.count }})\n </template>\n </Dropdown>\n <TagPicker\n v-model=\"selectedTags\"\n suggestedlabel=\"blockList.suggestedTags\"\n :taglistclass=\"['max-h-8 overflow-y-auto']\"\n placeholder=\"suggestions.admin.tagFilter\"\n class=\"mr-12 w-full grow [&>*:first-child]:min-h-[3.125rem] [&>*:first-child]:content-center\"\n select-only\n />\n </div>\n <div\n class=\"flex flex-wrap items-end justify-start gap-x-4 md:flex-nowrap md:justify-end\"\n >\n <SearchBar\n class=\"text-p2 my-2 w-full\"\n :placeholder=\"t('suggestions.searchSuggestions')\"\n @change=\"(v: string) => (searchText = v)\"\n />\n <RouterLink v-if=\"!!user\" :to=\"{ path: '/suggestions/add' }\">\n <ButtonComponent :text=\"t('suggestions.add')\" class=\"my-2 h-12\" />\n </RouterLink>\n </div>\n </div>\n\n <template v-for=\"suggestion in filterSuggestions\" :key=\"suggestion.id\">\n <RouterLink\n :to=\"{\n name: 'suggestion_details',\n params: { suggestionId: suggestion.id },\n }\"\n >\n <div\n v-if=\"showEditButton\"\n class=\"absolute z-10 w-full cursor-pointer\"\n >\n <div\n class=\"gnist-page-width top-6 flex w-full justify-end px-4 lg:top-0\"\n >\n <RouterLink\n :to=\"{\n name: 'suggestion_edit',\n params: { suggestionId: suggestion.id },\n }\"\n >\n <MaterialIcon\n class=\"rounded-lg text-2xl hover:bg-gnist-gray-light hover:text-gnist-black\"\n >\n edit\n </MaterialIcon>\n </RouterLink>\n </div>\n </div>\n <div class=\"m-4 flex bg-gnist-white p-4\">\n <div class=\"border-r-2 border-r-gnist-gray-light p-8\">\n <div class=\"flex justify-center text-3xl font-bold\">\n {{ suggestion.votes }}\n </div>\n <div class=\"text-sm text-gnist-gray-dark\">\n {{ t('suggestions.votes') }}\n </div>\n </div>\n <div class=\"overflow-hidden p-2 px-4\">\n <h3 class=\"line-clamp-1 text-gnist-gray-dark\">\n {{ suggestion.title }}\n </h3>\n <div class=\"line-clamp-4 max-h-28\">\n <MarkdownRenderer\n :value=\"suggestion.description\"\n :blob-location=\"\n suggestion.id ? { suggestionId: suggestion.id } : 'public'\n \"\n class=\"my-2\"\n />\n </div>\n <div\n class=\"mt-4 flex grid-cols-2 flex-wrap gap-x-4 border-t-2 lg:grid\"\n >\n <span>\n {{ t('suggestions.suggested_by') }}:\n <span class=\"font-bold\">{{\n suggestion.suggestedBy?.name\n }}</span>\n </span>\n\n <span>\n {{ t('suggestions.updated') }}:\n <span>\n {{\n formatDate(\n suggestion.modified,\n false,\n t('suggestions.unknown_date'),\n )\n }}\n </span>\n </span>\n <span>\n {{ t('suggestions.comments') }}:\n <span>\n {{\n suggestion.commentCount ?? t('suggestions.unknown_count')\n }}\n </span>\n </span>\n <span>\n {{ t('suggestions.upvoted') }}:\n <span>\n {{\n formatDate(\n suggestion.last_vote,\n false,\n t('suggestions.unknown_date'),\n )\n }}\n </span>\n </span>\n </div>\n <div class=\"mt-2 flex flex-row flex-wrap gap-1\">\n <p\n class=\"badge badge-outline badge-lg rounded-none border-gnist-gray bg-gnist-white\"\n >\n {{ t(`suggestions.types.${suggestion.type}`) }}\n </p>\n\n <SuggestionStatusBadge :suggestion=\"suggestion\" />\n <TagRenderer :tags=\"suggestion?.tags\" size=\"badge-lg\" />\n </div>\n </div>\n </div>\n </RouterLink>\n </template>\n </div>\n </div>\n</template>\n","export enum VoteDirection {\n Up = 1,\n None = 0,\n Down = -1,\n}\n","<script setup lang=\"ts\">\nimport ButtonComponent from '@/components/ButtonComponent.vue';\nimport { ParagraphShimmer } from 'vue3-shimmer';\nimport MaterialIcon from '@/components/MaterialIcon.vue';\nimport MarkdownRenderer from '@/components/block/MarkdownRenderer.vue';\nimport TagRenderer from '@/components/TagRenderer.vue';\nimport SuggestionStatusBadge from '@/components/SuggestionStatusBadge.vue';\nimport DiscussionBoard from '@/components/discussion/DiscussionBoard.vue';\nimport { SocialPageType } from '@/enums/SocialPageType';\nimport { computed, watchEffect } from 'vue';\nimport { useRoute } from 'vue-router';\nimport { throwOnError } from '@/api/composable';\nimport { useI18n } from 'vue-i18n';\nimport {\n updateSubscription,\n updateVote,\n useSuggestion,\n} from '@/api/suggestion';\nimport {\n translateStringOrLocale,\n translateStringOrLocaleWithDefault,\n} from '@/i18n';\nimport { getBlocksRouteLink, getRouteTitle } from '@/utilities/routeUtils';\nimport { useCurrentUser } from '@/api/auth';\nimport { useStoreAbility } from '@/abilities';\nimport {\n suggestionPageIdPrefix,\n type suggestionPageId,\n} from '@/api/commentoTypes';\nimport { VoteDirection } from '@/enums/VoteDirection';\nimport { getSuggestionStatus } from '@/utilities/getSuggestionStatus';\nimport { formatDate } from '@/utilities/formatDate';\n\nconst { t } = useI18n();\nconst userinfo = useCurrentUser();\nconst { can } = useStoreAbility();\nconst showEditButton = can('update', 'Suggestion');\n\nconst route = useRoute();\nconst suggestionId = parseInt(route.params.suggestionId as string);\nconst { result: suggestion } = throwOnError(useSuggestion(suggestionId, true));\nconst title = translateStringOrLocaleWithDefault(\n () => suggestion.value?.title,\n '',\n);\nconst description = translateStringOrLocaleWithDefault(\n () => suggestion.value?.description,\n '',\n);\nconst status = computed(() => getSuggestionStatus(suggestion.value));\nwatchEffect(() => {\n if (title.value) document.title = getRouteTitle(title.value);\n});\nconst discussionId: suggestionPageId = `${suggestionPageIdPrefix}${suggestionId}`;\nconst hasVoted = computed(\n () => suggestion.value?.userConnection?.userVote === VoteDirection.Up,\n);\nconst subscribed = computed(\n () => suggestion.value?.userConnection?.subscribeForNotifications === true,\n);\nconst vote = async (direction: VoteDirection) => {\n if (!suggestion.value?.id) return;\n const oldDirection = suggestion.value.userConnection?.userVote ?? 0;\n suggestion.value.userConnection = await updateVote(\n suggestion.value?.id,\n direction,\n );\n const newDirection = suggestion.value.userConnection?.userVote ?? 0;\n if (suggestion.value.votes === undefined) suggestion.value.votes = 0;\n suggestion.value.votes += +(newDirection - oldDirection);\n};\nconst subscribe = async (shouldSubcribe: boolean) => {\n if (!suggestion.value?.id) return;\n suggestion.value.userConnection = await updateSubscription(\n suggestion.value?.id,\n shouldSubcribe,\n );\n};\n</script>\n\n<template>\n <div class=\"w-full bg-gnist-gray-light-light text-gnist-black\">\n <ParagraphShimmer\n v-if=\"suggestion === null\"\n :lines=\"6\"\n :random-size=\"true\"\n class=\"mx-auto w-full max-w-5xl\"\n />\n\n <div v-else class=\"mx-2 py-8 md:mx-auto md:w-[50rem]\">\n <div v-if=\"showEditButton\" class=\"absolute z-10 w-full cursor-pointer\">\n <div\n class=\"gnist-page-width top-6 flex w-full justify-end p-4 lg:top-0\"\n >\n <RouterLink\n :to=\"{\n name: 'suggestion_edit',\n params: { suggestionId: suggestion?.id },\n }\"\n >\n <MaterialIcon\n class=\"rounded-lg text-2xl hover:bg-gnist-gray-light hover:text-gnist-black\"\n >\n edit\n </MaterialIcon>\n </RouterLink>\n </div>\n </div>\n <div\n class=\"m-4 grid grid-cols-[max-content_1fr] gap-y-4 bg-gnist-white p-4 py-6\"\n >\n <div class=\"min-w-[10rem] border-r-2 border-r-gnist-gray-light px-4\">\n <div class=\"border\">\n <div\n class=\"flex justify-center p-2 text-4xl font-bold text-gnist-sp-blue-dark\"\n >\n {{ suggestion?.votes }}\n </div>\n <div class=\"flex justify-center bg-gnist-green-cyan p-3 font-bold\">\n {{ t('suggestions.votes') }}\n </div>\n </div>\n <div class=\"flex justify-center p-2\">\n <ButtonComponent\n :text=\"\n hasVoted ? t('suggestions.unvote') : t('suggestions.upvote')\n \"\n :type=\"hasVoted ? 'special' : 'primary'\"\n :disabled=\"!userinfo\"\n @click.prevent=\"\n vote(hasVoted ? VoteDirection.None : VoteDirection.Up)\n \"\n />\n </div>\n </div>\n <div class=\"p-2 px-4\">\n <h3 class=\"text-gnist-gray-dark\">\n {{ title }}\n </h3>\n <MarkdownRenderer\n :value=\"description\"\n :blob-location=\"\n suggestion.id ? { suggestionId: suggestion.id } : 'public'\n \"\n class=\"my-2\"\n />\n </div>\n <div class=\"col-span-2\">\n <div\n class=\"flex flex-row flex-wrap gap-1 border-t-2 border-t-gnist-gray-light p-2\"\n >\n <div\n class=\"flex grid-cols-3 flex-wrap justify-items-center gap-x-4 lg:grid\"\n >\n <span>\n {{ t('suggestions.suggested_by') }}:\n <span class=\"font-bold\">{{\n suggestion.suggestedBy?.name\n }}</span>\n </span>\n\n <span>\n {{ t('suggestions.updated') }}:\n <span>\n {{\n formatDate(\n suggestion.modified,\n false,\n t('suggestions.unknown_date'),\n )\n }}\n </span>\n </span>\n <span>\n {{ t('suggestions.upvoted') }}:\n <span>\n {{\n formatDate(\n suggestion.last_vote,\n false,\n t('suggestions.unknown_date'),\n )\n }}\n </span>\n </span>\n </div>\n </div>\n <div class=\"mt-2 flex flex-row flex-wrap gap-1\">\n <p\n class=\"badge badge-outline badge-lg rounded-none border-gnist-gray bg-gnist-white\"\n >\n {{ t(`suggestions.types.${suggestion.type}`) }}\n </p>\n <SuggestionStatusBadge :status=\"status\" />\n <TagRenderer :tags=\"suggestion?.tags\" size=\"badge-lg\" />\n </div>\n </div>\n </div>\n <div v-if=\"suggestion.blockVersion\" class=\"px-8 pb-8\">\n <h3 class=\"mb-2\">{{ t('suggestions.blocklinkHeader') }}</h3>\n <RouterLink\n class=\"underline\"\n :to=\"\n getBlocksRouteLink(suggestion.blockVersion.blockId, {\n version: suggestion.blockVersion.versionNumber,\n })\n \"\n >\n {{ translateStringOrLocale(suggestion.blockVersion.blockName).value }}\n </RouterLink>\n </div>\n <div v-if=\"!!userinfo\" class=\"px-8\">\n <h3>{{ t('suggestions.notificationsHeader') }}</h3>\n <ButtonComponent\n :text=\"\n subscribed\n ? t('suggestions.unsubscribe')\n : t('suggestions.subscribe')\n \"\n :type=\"subscribed ? 'special' : 'primary'\"\n :disabled=\"!userinfo\"\n class=\"mt-4\"\n @click.prevent=\"subscribe(!subscribed)\"\n />\n </div>\n\n <div class=\"comment-section-block bg-gnist-gray-light-light p-6 pt-12\">\n <div class=\"gnist-page-width w-full\">\n <h2>\n {{ t('suggestions.comments') }}\n </h2>\n <DiscussionBoard\n :discussion-id=\"discussionId\"\n :default-discussion-type=\"SocialPageType.SuggestionPage\"\n class=\"mt-8\"\n />\n </div>\n </div>\n </div>\n </div>\n</template>\n","import { unref } from 'vue';\nimport { isRef, isReactive, isProxy, toRaw, type Ref } from 'vue';\n\n/** Use to make sure logs are not showing reactive objects */\nfunction deepToRaw<T>(sourceObj: T | Ref<T>): T {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const objectIterator = (input: any): any => {\n if (Array.isArray(input)) {\n return input.map((item) => objectIterator(item));\n } else if (isRef(input)) {\n return objectIterator(unref(input));\n } else if (isReactive(input) || isProxy(input)) {\n return objectIterator(toRaw(input));\n } else if (\n input &&\n typeof input === 'object' &&\n !(input instanceof Element)\n ) {\n return Object.keys(input).reduce((acc, key) => {\n acc[key as keyof typeof acc] = objectIterator(input[key]);\n return acc;\n }, {} as T);\n } else {\n return input;\n }\n };\n\n return objectIterator(sourceObj);\n}\nexport function logProps<T extends { [key: string]: unknown }>(\n props: T,\n ...fields: (keyof T)[]\n) {\n logRaw(Object.fromEntries(fields.map((field) => [field, props[field]])));\n}\nexport function logRaw(\n input: { [key: string]: unknown | Ref<unknown> },\n identifier?: string,\n asObject = false,\n) {\n const entries = Object.entries(input).map(([key, value]) => [\n key,\n value && typeof value === 'object' ? deepToRaw(unref(value)) : value,\n ]);\n identifier ??= entries[0][0] as string;\n if (asObject) {\n console.groupCollapsed(identifier, Object.fromEntries(entries));\n } else {\n console.groupCollapsed(identifier, entries[0][1]);\n entries.forEach(([key, value]) => console.log(key, value));\n }\n console.trace();\n console.groupEnd();\n}\n\n/** Assert for typescript that the value is not null/undefined. Also gives a runtime error (console.error or throw) if the value turns out to be null/undefined. */\nexport function assertDefined<T>(\n value: T | undefined | null,\n shouldThrow?: boolean,\n assertMsg?: string,\n): value is T {\n const isDefined = value !== undefined && value !== null;\n assertMsg ??=\n 'A value that was expected to not be null/undefined was found to be so. This is a bug that should be fixed.';\n if (!isDefined) {\n if (shouldThrow) {\n throw new Error(assertMsg);\n } else {\n console.error(assertMsg);\n }\n }\n return isDefined;\n}\n","import { onBeforeUnmount, ref, type Ref } from 'vue';\nimport { assertDefined } from '../debugUtils';\n\nexport function useStickyToolbar(\n /** An element that we want to know when ends up above the viewport */\n topIntersector: Ref<HTMLElement | null>,\n /** Two elements, where we want to know when the bottom of a moving element passes above the bottom of a sticky element */\n bottomIntersector?: {\n sticky: Ref<HTMLElement | null>;\n moving: Ref<HTMLElement | null>;\n },\n) {\n const topAboveViewport = ref(false);\n const movingBottomAboveStickyBottom = ref(false);\n const lastStickyBottom = ref(0);\n const topObserver = new IntersectionObserver(\n (entries) =>\n (topAboveViewport.value = (entries[0]?.boundingClientRect.top ?? 0) < 0),\n { threshold: 1 },\n );\n const bottomObserver = new IntersectionObserver(\n (entries) => {\n if (!entries[0]) return;\n if (!bottomIntersector) return;\n if (!assertDefined(bottomIntersector.sticky.value)) return;\n const targetVisible = bottomIntersector.sticky.value.checkVisibility();\n if (targetVisible) {\n lastStickyBottom.value =\n bottomIntersector.sticky.value.getBoundingClientRect().bottom;\n }\n movingBottomAboveStickyBottom.value =\n lastStickyBottom.value > 0 &&\n entries[0].boundingClientRect.bottom < lastStickyBottom.value;\n },\n {\n // * If this is a very high item, we want to look closely when we are approaching the bottom threshold\n // If it is a not so high item, we need to look at more places (but we don't need to look as often, since the actual distance for each % of the threshold is smaller)\n threshold: [\n 0.0, 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1, 0.2,\n 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0,\n ],\n },\n );\n const observingTop = ref(false);\n const observingBottom = ref(false);\n function stopObserve() {\n topObserver.disconnect();\n observingTop.value = false;\n bottomObserver.disconnect();\n observingBottom.value = false;\n }\n onBeforeUnmount(() => {\n stopObserve();\n });\n return {\n startObserveTop: () => {\n if (!observingTop.value && topIntersector.value) {\n topObserver.observe(topIntersector.value);\n observingTop.value = true;\n }\n },\n startObserveBottom: () => {\n if (!observingBottom.value && bottomIntersector?.moving.value) {\n bottomObserver.observe(bottomIntersector.moving.value);\n observingBottom.value = true;\n }\n },\n stopObserve,\n topAboveViewport,\n movingBottomAboveStickyBottom,\n };\n}\n","<script setup lang=\"ts\">\nimport type {\n validationInfo,\n Colors,\n BlockLocaleValue,\n Translated,\n} from '@/api/types';\nimport { computed, defineAsyncComponent, ref, watch, watchEffect } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport InputLabel, {\n useDynamicLabelTexts,\n type IInputLabelProps,\n} from './InputLabel.vue';\nimport { ParagraphShimmer } from 'vue3-shimmer';\nimport type { EditorType } from '@toast-ui/editor';\nimport type { IBlobUrlInput } from '@/api/blob';\nimport type {\n ExposePlaceEditor,\n ExtraButtonOptions,\n} from '@/components/forms/InputMarkdownTypes';\nimport ButtonComponent from '@/components/ButtonComponent.vue';\nimport MarkdownRenderer from '@/components/block/MarkdownRenderer.vue';\nimport { assertDefined } from '@/utilities/debugUtils';\nimport { useStickyToolbar } from '@/utilities/markdown/useStickyToolbar';\n\n// TORGST, 18.8.23: IMPORTANT! This needs to be loaded async to ensure correct order of CSS (at least in dev)!!!\nconst MarkdownEditor = defineAsyncComponent({\n loader: () => import('@/components/admin/MarkdownEditor.vue'),\n loadingComponent: ParagraphShimmer,\n});\n\nconst { t } = useI18n();\n\nconst props = withDefaults(\n defineProps<\n IInputLabelProps & {\n modelValue?: Translated<BlockLocaleValue>;\n /** If not supplied, the Editor will not support images or \"blob links\" (links to files uploaded for this document) */\n blobLocation?: IBlobUrlInput;\n showValidationMessage?: boolean;\n previewBgColor?: Colors;\n /** Used for connecting label and input */\n forName: string;\n editorType?: EditorType;\n editorHeight?: string;\n valWhenUndef?: string;\n hideFilepicker?: boolean;\n requestCleanup?: boolean;\n /** Underline is normally not supported in markdown as this usually means a link on the web.\n * However, we want to allow underlines if the markdown is part of a layout component block that is a link. */\n canUnderline?: boolean;\n /** If true, the editor will not have a limited height, but rather flow as a part of the document */\n flowing?: boolean;\n /** A class to add to the toolbar for the editor. Can be used e.g. to ensure the correct width of the toolbar when it starts \"sticking. */\n toolbarClass?: string;\n hideMainEditorDiv?: boolean;\n floatingToolbar?: boolean;\n /** Floating toolbars are always sticky, but add this if you want sticky without floating */\n stickyToolbar?: boolean;\n mainEditor?: ExposePlaceEditor;\n extraButtons?: ExtraButtonOptions;\n noMovedHeight?: boolean;\n /** Let this input be a self contained preview / edit button / placing unit (using an external \"parent editor\") */\n selfPlace?: boolean;\n }\n >(),\n {\n modelValue: undefined,\n minlength: undefined,\n maxlength: undefined,\n blobLocation: undefined,\n showValidationMessage: false,\n previewBgColor: 'white',\n editorType: 'wysiwyg',\n editorHeight: '45rem',\n valWhenUndef: undefined,\n placeholder: undefined,\n hideFilepicker: false,\n requestCleanup: false,\n toolbarClass: undefined,\n mainEditor: undefined,\n extraButtons: undefined,\n },\n);\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: Translated<BlockLocaleValue>): void;\n (e: 'reportValidationError', name: string, hasError: boolean): void;\n (e: 'cleanup:modelValue', value: string): void;\n}>();\n\nconst internalState = ref('');\nconst value = computed({\n get() {\n return props.modelValue === undefined\n ? internalState.value\n : !props.modelValue\n ? props.valWhenUndef ?? ''\n : typeof props.modelValue === 'string'\n ? props.modelValue\n : JSON.stringify(props.modelValue);\n },\n set(value) {\n internalState.value = value;\n onUpdateModelValue.value?.(value);\n emit('update:modelValue', value);\n },\n});\n\nfunction satisfiesRequiredRule(): validationInfo | null {\n return !props.required || value.value ? null : { key: 'required', args: {} };\n}\n\nfunction satisfiesMinlengthRule(): validationInfo | null {\n return !props.minlength || value.value.length >= props.minlength\n ? null\n : { key: 'minLength', args: { min: props.minlength } };\n}\n\nfunction satisfiesMaxlengthRule(): validationInfo | null {\n return !props.maxlength || value.value.length <= props.maxlength\n ? null\n : { key: 'maxLength', args: { max: props.maxlength } };\n}\n\nconst validationErrors = computed((): validationInfo[] => {\n return [\n satisfiesRequiredRule(),\n satisfiesMinlengthRule(),\n satisfiesMaxlengthRule(),\n ].filter((i) => i !== null) as validationInfo[];\n});\n\nfunction performValidation() {\n emit(\n 'reportValidationError',\n props.forName,\n validationErrors.value.length > 0,\n );\n}\n\nconst validationMessage = computed(() =>\n validationErrors.value\n .map((i) => t(`validation.${i.key}`, i.args))\n .join('\\n'),\n);\n\nwatchEffect(() => {\n performValidation();\n});\n/** This is where we put the toolbar coming from MarkdownEditor (a bit down in a DOM tree created for the toolbar) */\nconst movedToolbarRef = ref<HTMLElement | null>(null);\n/** This is where we put the input part coming from MarkdownEditor (we need access to it because we are watching it for intersection changes) */\nconst movedInputRef = ref<HTMLElement | null>(null);\n/** This is the parent DOM element where we place the toolbar */\nconst toolbarParentRef = ref<HTMLElement | null>(null);\n/** This points to the actual MarkdownEditor instance */\nconst editorRef = ref<InstanceType<typeof MarkdownEditor>>();\n/** A helper div used for observing when we are ready to stick the toolbar to the top of the screen */\nconst intersectionHelperDivRef = ref<HTMLElement | null>(null);\n/** The toolbar is put here after moving the editor if no other target location is available */\nconst backupToolbarTargetRef = ref<HTMLElement | null>(null);\nconst afterEditorRef = ref<HTMLElement | null>(null);\n\nconst {\n startObserveTop,\n startObserveBottom,\n stopObserve,\n topAboveViewport,\n movingBottomAboveStickyBottom: editorAboveToolbarBottom,\n} = useStickyToolbar(intersectionHelperDivRef, {\n sticky: movedToolbarRef,\n moving: movedInputRef,\n});\n\nconst isPlaced = ref(false);\nconst onUpdateModelValue = ref<(val: string) => void>();\nconst onUnplacedRef = ref<() => void>();\n\nfunction placeSelf(\n externalToolbarParent: HTMLElement | null,\n connect?: boolean,\n) {\n if (!props.mainEditor) return;\n if (!assertDefined(movedToolbarRef.value)) return;\n if (!assertDefined(movedInputRef.value)) return;\n props.mainEditor.placeEditor(\n movedInputRef.value,\n movedToolbarRef.value,\n externalToolbarParent,\n () => (isPlaced.value = false),\n );\n if (connect) {\n props.mainEditor.connectText(value.value, (val) => (value.value = val));\n }\n isPlaced.value = true;\n}\n\n// prettier-ignore\nfunction placeEditor(externalInputTarget: HTMLElement, externalToolbarTarget?: HTMLElement): void;\n// prettier-ignore\nfunction placeEditor(externalInputTarget: HTMLElement, externalToolbarTarget: HTMLElement, toolbarParent: HTMLElement | null, onUnplaced: () => void): void;\nfunction placeEditor(\n externalInputTarget: HTMLElement,\n externalToolbarTarget: HTMLElement | null | undefined,\n /** Should only be supplied if called from a \"child\" editor and that child editor has no externalToolbarTarget */\n externalToolbarParent?: HTMLElement | null,\n onUnplaced?: () => void,\n) {\n if (!assertDefined(toolbarParentRef.value)) return;\n if (!assertDefined(movedToolbarRef.value)) return;\n if (!assertDefined(movedInputRef.value)) return;\n\n if (props.mainEditor) {\n placeSelf(externalToolbarTarget ? null : toolbarParentRef.value); // If no toolbar target is supplied, let the parent (mainEditor) select the target - but inject our \"parent\" into that target\n externalInputTarget.append(movedInputRef.value);\n if (externalToolbarTarget) {\n externalToolbarTarget.append(toolbarParentRef.value); // We do not use \"backupToolbarTargetRef\" as a fallback - if we don't have an external target, just keep it in the \"parent\" editor\n }\n } else {\n onUnplacedRef.value?.();\n const isStandaloneEditor = onUnplaced === undefined;\n if (!isStandaloneEditor) onUnplacedRef.value = onUnplaced;\n\n const targetForEditorInput = isStandaloneEditor\n ? movedInputRef.value\n : externalInputTarget;\n const targetForEditorToolbar = isStandaloneEditor\n ? movedToolbarRef.value\n : externalToolbarTarget!; // The overload that is called from child editors requires there to be a toolbar target (the childs movedToolbarRef), thus the bang\n\n if (!assertDefined(editorRef.value)) return;\n editorRef.value.placeEditor(targetForEditorInput, targetForEditorToolbar);\n\n if (!isStandaloneEditor && !externalToolbarParent) {\n return; // The child will handle the final placement itself\n }\n\n isPlaced.value = true;\n externalInputTarget.append(movedInputRef.value);\n\n if (!externalToolbarTarget || externalToolbarParent) {\n if (!assertDefined(backupToolbarTargetRef.value)) return;\n // There is no externalToolbarTarget, use the \"backupToolbarTargetRef\" as a fallback.\n // If this is a \"parent\" editor, that means the \"child\" has no externalToolbarTarget and sends us an externalToolbarParent that it wants us to put into our backupToolbarTargetRef.\n externalToolbarTarget = backupToolbarTargetRef.value;\n }\n const toolbarParent = isStandaloneEditor\n ? toolbarParentRef.value\n : externalToolbarParent!; // We have already returned if this is *not* a standalone editor and there is no externalToolbarParent, thus the bang\n externalToolbarTarget.append(toolbarParent);\n }\n}\nwatch(isPlaced, () => {\n if (isPlaced.value) {\n startObserveTop();\n startObserveBottom();\n } else {\n stopObserve();\n }\n});\nfunction focusAfterToolbar() {\n (props.mainEditor ?? editorRef.value)?.focusAfterToolbar();\n}\ndefineExpose<ExposePlaceEditor>({\n placeEditor,\n connectText: (val: string, onUpdate: (val: string) => void) => {\n if (props.mainEditor) {\n props.mainEditor.connectText(val, onUpdate);\n } else {\n onUpdateModelValue.value = onUpdate;\n value.value = val;\n }\n },\n unPlaceEditor(caller?: 'internal') {\n if (props.mainEditor) {\n props.mainEditor.unPlaceEditor('internal');\n } else {\n if (caller !== 'internal') {\n if (!assertDefined(editorRef.value)) return;\n editorRef.value.unPlaceEditor();\n }\n onUnplacedRef.value?.();\n }\n },\n focusAfterToolbar,\n});\nconst texts = useDynamicLabelTexts(props);\n</script>\n\n<template>\n <label :for=\"forName\" class=\"flex flex-col\">\n <InputLabel\n v-bind=\"props\"\n :label-end=\"!!maxlength ? `${value.length} / ${maxlength}` : undefined\"\n :class=\"{\n 'border-b-2 border-l-2 pl-2 font-bold': selfPlace && !isPlaced,\n }\"\n />\n <div\n v-if=\"!hideMainEditorDiv || isPlaced\"\n tabindex=\"0\"\n class=\"sr-only focus:not-sr-only\"\n >\n {{ t('admin.blockProduction.escapeEditor') }}\n </div>\n <div\n class=\"flex flex-col\"\n :data-cy-id=\"`InputMarkdown_${texts.forName}`\"\n :style=\"`min-height: ${hideMainEditorDiv ? 0 : editorHeight};`\"\n @keyup.exact.esc=\"afterEditorRef?.focus()\"\n @keyup.shift.esc=\"focusAfterToolbar()\"\n >\n <div\n ref=\"backupToolbarTargetRef\"\n class=\"empty:hidden\"\n data-id=\"backupToolbar\"\n />\n <template v-if=\"!mainEditor\">\n <span\n v-if=\"showValidationMessage && validationMessage\"\n :data-tip=\"validationMessage\"\n class=\"tooltip tooltip-open tooltip-warning whitespace-break-spaces\"\n >\n </span>\n <MarkdownEditor\n ref=\"editorRef\"\n v-model=\"value\"\n :blob-location=\"blobLocation\"\n :preview-bg-color=\"previewBgColor\"\n :editor-type=\"editorType\"\n :editor-height=\"editorHeight\"\n :placeholder=\"texts.placeholder\"\n :hide-filepicker=\"hideFilepicker\"\n :request-cleanup=\"requestCleanup\"\n :can-underline=\"canUnderline\"\n :flowing=\"flowing\"\n :sticky-toolbar=\"stickyToolbar\"\n :hide-main-editor-div=\"hideMainEditorDiv\"\n :no-moved-height=\"noMovedHeight\"\n @cleanup:model-value=\"(value) => emit('cleanup:modelValue', value)\"\n />\n </template>\n <div\n v-else-if=\"selfPlace && !isPlaced\"\n class=\"grid grow items-stretch justify-items-stretch overflow-hidden\"\n :style=\"`height: ${editorHeight};`\"\n >\n <MarkdownRenderer\n :value=\"value\"\n :blob-location=\"blobLocation ?? 'public'\"\n class=\"peer z-10\"\n inert\n />\n <div\n class=\"absolute inset-0 grid items-start justify-items-center bg-gnist-gray-light-light bg-opacity-75 pt-4 opacity-0 focus-within:z-10 focus-within:opacity-100 hover:z-10 hover:opacity-100 peer-hover:z-10 peer-hover:opacity-100\"\n >\n <ButtonComponent\n text=\"admin.blockProduction.placeEditor\"\n class=\"z-20\"\n @click.prevent=\"placeSelf(backupToolbarTargetRef, true)\"\n />\n </div>\n </div>\n <div\n v-show=\"isPlaced && !editorAboveToolbarBottom\"\n ref=\"toolbarParentRef\"\n class=\"ToolbarParent\"\n :class=\"{\n floatingToolbar,\n stickyToolbar: floatingToolbar || stickyToolbar,\n }\"\n >\n <div ref=\"intersectionHelperDivRef\" class=\"IntersectionHelperDiv\" />\n <div\n :class=\"{\n ToolbarFixed: topAboveViewport,\n 'gnist-page-width': floatingToolbar || stickyToolbar,\n }\"\n >\n <div class=\"Overlay\">\n <div\n class=\"CombinedToolbar\"\n :class=\"{\n 'shadow-lg shadow-black': floatingToolbar,\n Combined: extraButtons?.insideMainToolbar,\n }\"\n >\n <div\n ref=\"movedToolbarRef\"\n class=\"min-w-0\"\n data-id=\"InputMarkdownToolbarTarget\"\n />\n <div\n class=\"ExtraButtons\"\n :class=\"\n extraButtons?.containerClass ??\n (extraButtons?.insideMainToolbar ? undefined : 'px-2')\n \"\n >\n <button\n v-for=\"(button, index) in extraButtons?.buttons\"\n :key=\"`extrabutton_${index}`\"\n class=\"tooltip tooltip-left\"\n :class=\"[\n extraButtons?.buttonClass ??\n (extraButtons?.insideMainToolbar\n ? undefined\n : 'material-symbols-rounded bg-gnist-gray-light px-2 text-2xl text-gnist-black before:font-gnist hover:enabled:bg-gnist-gray disabled:text-gnist-gray'),\n { '!hidden md:block': !button.showInMobileView },\n ]\"\n :aria-label=\"button.tooltip\"\n :data-tip=\"button.tooltip\"\n :disabled=\"button.disabled\"\n @click.stop.prevent=\"button.onClick()\"\n >\n <span\n role=\"img\"\n class=\"material-symbols-rounded after:content-[attr(data-icon)]\"\n :data-icon=\"button.text\"\n />\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div\n ref=\"movedInputRef\"\n data-id=\"InputMarkdownInputTarget\"\n :style=\"selfPlace && isPlaced ? `height: ${editorHeight};` : undefined\"\n />\n </div>\n <div ref=\"afterEditorRef\" class=\"sr-only focus:not-sr-only\" tabindex=\"0\">\n {{ t('admin.blockProduction.afterEditor') }}\n </div>\n </label>\n</template>\n\n<style scoped>\n.tooltip-warning::before {\n padding: 0.5rem;\n}\n/**********************************************************************\n * Placement of \"floating\" toolbar\n ***********************************************************************/\n:global(div:has(> .ToolbarParent)) {\n /* The toolbar will position itself with the width of it's closest positioned ancestor.\n * For this to work, any div's \"above\" the toolbar, until the container we want to have the width of, needs to be positioned as \"static\" (Gnist changes the default to \"relative\", which solves some problems and creates others).\n * This ensures that the div that this will be moved into has the correct position. Nodes higher in the DOM must be handled by callers. */\n @apply static;\n}\n.ToolbarParent.floatingToolbar {\n --toolbar-margin: 1rem;\n}\n.ToolbarParent.stickyToolbar {\n --toolbar-height: 3rem;\n --toolbar-parent-height: calc(\n var(--toolbar-height) + (var(--toolbar-margin, 0rem) * 2)\n );\n @apply absolute left-0 right-0;\n @apply self-start;\n @apply z-30;\n margin-top: calc(var(--toolbar-parent-height) * -1);\n}\n.gnist-page-width:not(.ToolbarFixed) {\n @apply px-0;\n}\n.floatingToolbar .Overlay {\n @apply bg-gnist-gray-light;\n @apply bg-opacity-75;\n padding: var(--toolbar-margin, 0rem);\n}\n.stickyToolbar .ToolbarFixed {\n top: var(--editor-toolbar-docked-height, 0);\n @apply fixed left-0 right-0 mt-px;\n}\n.floatingToolbar .ToolbarFixed .Overlay {\n padding: var(--toolbar-margin, 0rem);\n padding-top: 0;\n}\n.IntersectionHelperDiv {\n @apply invisible;\n @apply absolute left-0 right-0;\n /* Important: this needs to be slightly above the toolbar itself, so that when it triggers a fixed placement for the toolbar it does not move back inside the viewport. */\n --intersect-margin: 0.25rem;\n --intersect-offset: calc(\n var(--editor-toolbar-docked-height, 0rem) - var(--toolbar-margin, 0rem) +\n var(--intersect-margin)\n );\n margin-top: calc(var(--intersect-offset) * -1);\n}\n.ExtraButtons {\n @apply flex h-8 flex-wrap justify-end gap-2;\n}\n.CombinedToolbar {\n @apply grid grid-cols-[auto_max-content] items-center bg-gnist-gray-light;\n}\n.CombinedToolbar.Combined {\n @apply rounded border border-gnist-gray;\n}\n.CombinedToolbar :deep(.toastui-editor-defaultUI),\n.CombinedToolbar :deep(.toastui-editor-defaultUI-toolbar) {\n @apply border-none;\n @apply p-0;\n}\n:global(.CombinedToolbar:has(.ExtraButtons) *:has(.MovedToolbar)),\n:global(.CombinedToolbar:has(.ExtraButtons) .MovedToolbar),\n:global(.CombinedToolbar:has(.ExtraButtons) .toastui-editor-toolbar) {\n @apply static;\n}\n:global(.mobile .toastui-editor-popup) {\n left: 1rem !important;\n right: 1rem !important;\n width: unset;\n margin-left: 0;\n}\n:deep(.toastui-editor-toolbar-group) {\n @apply contents md:flex;\n}\n:deep(.toastui-editor-toolbar-group:has(.toastui-editor-dropdown-toolbar)) {\n @apply static md:relative;\n}\n:deep(.toastui-editor-dropdown-toolbar) {\n @apply left-0 md:left-auto;\n @apply h-auto;\n @apply flex-wrap md:flex-nowrap;\n}\n</style>\n","import { apiUrl } from '@/config';\nimport { isRef, type ComputedRef, type Ref } from 'vue';\nimport { Status, type Guid, type Version, type VersionUpdate } from './types';\nimport {\n compose,\n throwOnError,\n composeWithRefresh,\n type ThrowingComposable,\n type ComposableResultWithRefresh,\n} from './composable';\n\nconst blockUrl = apiUrl + '/blocks';\n\nexport function useVersions(\n blockID:\n | Guid\n | undefined\n | Ref<Guid | undefined>\n | ComputedRef<Guid | undefined>,\n useDraftReaderEndpoint = false,\n includeContent = false,\n): ThrowingComposable<ComposableResultWithRefresh<Version[]>> {\n if (isRef(blockID)) {\n return throwOnError(\n composeWithRefresh(() => {\n if (!blockID.value) return [];\n return getVersions(\n blockID.value,\n useDraftReaderEndpoint,\n includeContent,\n );\n }, blockID),\n );\n } else {\n return throwOnError(\n compose(getVersions(blockID, useDraftReaderEndpoint, includeContent)),\n );\n }\n}\n\nexport async function updateVersion(\n blockId: Guid,\n versionId: number,\n version: Partial<VersionUpdate>,\n): Promise<void> {\n const publish = version.status == Status.Published;\n const resp = await fetch(\n `${blockUrl}/${blockId}/versions/${versionId}${publish ? '/publish' : ''}`,\n {\n method: 'PUT',\n credentials: 'include',\n body: JSON.stringify(version),\n headers: { 'Content-Type': 'application/json' },\n },\n );\n if (!resp.ok) throw new Error('error.update_version_failed');\n}\n\nexport async function getVersions(\n blockId: Guid | undefined,\n useDraftReaderEndpoint: boolean,\n includeContent = true,\n includeUnpublished = true,\n): Promise<Version[]> {\n if (blockId === undefined) return [];\n let query = '';\n if (!includeContent) query += '?includeContent=false';\n if (!includeUnpublished) {\n query += query ? '&' : '?';\n query += 'includeUnpublished=false';\n }\n const response = await fetch(\n `${blockUrl}/${blockId}/versions${\n useDraftReaderEndpoint ? '/withdraftversions' : ''\n }${query}`,\n {\n method: 'GET',\n credentials: 'include',\n },\n );\n return await response.json();\n}\n\nexport async function getVersion(\n blockId: Guid | undefined,\n versionId: number,\n): Promise<Version | null> {\n if (blockId === undefined) return null;\n const response = await fetch(\n `${blockUrl}/${blockId}/versions/withdraftversions/${versionId}`,\n {\n method: 'GET',\n credentials: 'include',\n },\n );\n return (await response.json()) ?? null;\n}\n\nexport const createVersion = async (\n blockId: Guid,\n versionNumber: string,\n copyFromVersionId?: number,\n): Promise<Version> => {\n const body = {\n versionNumber: versionNumber,\n copyFromVersionId: copyFromVersionId,\n };\n\n const response = await fetch(`${blockUrl}/${blockId}/versions`, {\n method: 'POST',\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n });\n if (response.ok) return await response.json();\n throw new Error('error.create_version_failed');\n};\n\nexport async function deleteVersion(\n blockId: Guid,\n versionId: number,\n): Promise<void> {\n await fetch(`${blockUrl}/${blockId}/versions/${versionId}`, {\n method: 'DELETE',\n credentials: 'include',\n });\n}\nexport async function deleteDraft(\n blockId: Guid,\n versionId: number,\n): Promise<void> {\n await fetch(`${blockUrl}/${blockId}/versions/${versionId}/draft`, {\n method: 'DELETE',\n credentials: 'include',\n });\n}\n\nexport async function setCurrentVersion(\n blockId: Guid,\n versionId: number,\n): Promise<void> {\n const response = await fetch(`${blockUrl}/${blockId}/currentversion`, {\n method: 'PUT',\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ currentVersionId: versionId }),\n });\n if (!response.ok) throw new Error('error.set_current_version_failed');\n}\n","<script lang=\"ts\">\n/** Should match requirement in UpdateVersionDTO.cs and CreateVersionDTO.cs */\nconst versionNumberPattern = new RegExp('^[a-zA-Z0-9._-]+$');\nconst versionNumberAntiPattern = new RegExp('^[._-]+$');\nexport function isValidVersionNumber(versionNumber: string): boolean {\n return (\n versionNumberPattern.test(versionNumber) &&\n !versionNumberAntiPattern.test(versionNumber)\n );\n}\n</script>\n\n<script setup lang=\"ts\">\nimport type { Guid, Version } from '@/api/types';\nimport ButtonComponent from '../ButtonComponent.vue';\nimport ModalComponent from '../ModalComponent.vue';\nimport { createVersion } from '@/api/versions';\nimport { computed, ref, watchEffect } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nconst { t } = useI18n();\n\nconst props = defineProps<{\n blockId: Guid;\n versions: Version[] | null;\n}>();\n\nconst emit = defineEmits<{ (e: 'created', newVersion: Version): void }>();\n\nconst newVersionNumber = ref<string>('');\nconst copyFromVersion = ref<Version | null>(null);\nconst showNewVersionModal = ref<boolean>(false);\n\nwatchEffect(() => {\n if (props.versions) copyFromVersion.value = props.versions.slice(-1)[0];\n});\n\nconst newVersionNumberIsValid = computed(() =>\n isValidVersionNumber(newVersionNumber.value),\n);\n\nconst onCreate = async () => {\n const newVersion = await createVersion(\n props.blockId,\n newVersionNumber.value,\n copyFromVersion.value?.versionId,\n );\n\n showNewVersionModal.value = false;\n emit('created', newVersion);\n};\n</script>\n\n<template>\n <div>\n <ButtonComponent\n :text=\"t('admin.blockProduction.newVersion')\"\n type=\"primary\"\n @click=\"showNewVersionModal = true\"\n />\n <ModalComponent\n :show-modal=\"showNewVersionModal\"\n :title=\"t('admin.blockProduction.newVersion')\"\n @close=\"showNewVersionModal = false\"\n >\n <label class=\"mt-6 block\">{{\n t('admin.blockProduction.newVersion')\n }}</label>\n <input v-model=\"newVersionNumber\" class=\"w-full border p-2\" />\n <p class=\"text-orange-dark min-h-12 text-sm\">\n <span\n v-if=\"versions?.find((v) => v.versionNumber == newVersionNumber)\"\n >{{ t('admin.blockProduction.existingVersionError') }}</span\n >\n <span v-if=\"!newVersionNumberIsValid && newVersionNumber !== ''\">{{\n t('admin.blockProduction.invalidVersionName')\n }}</span>\n </p>\n <label class=\"block\">{{\n t('admin.blockProduction.copyFromVersion')\n }}</label>\n <select v-model=\"copyFromVersion\" class=\"mb-8 w-full border p-2\">\n <option\n v-for=\"version in versions\"\n :key=\"version.versionNumber\"\n :value=\"version\"\n >\n {{ version.versionNumber }}\n </option>\n </select>\n <template #buttons>\n <div class=\"flex justify-end\">\n <div class=\"gnist-button-group\">\n <ButtonComponent\n :text=\"t('admin.blockProduction.cancel')\"\n class=\"mr-2\"\n @click=\"showNewVersionModal = false\"\n />\n <ButtonComponent\n :text=\"t('admin.blockProduction.newVersion')\"\n type=\"primary\"\n :disabled=\"!newVersionNumberIsValid\"\n @click=\"onCreate\"\n />\n </div>\n </div>\n </template>\n </ModalComponent>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport ButtonComponent from '@/components/ButtonComponent.vue';\nimport { ParagraphShimmer } from 'vue3-shimmer';\nimport TextInput from '@/components/forms/InputText.vue';\nimport MarkdownInput from '@/components/forms/InputMarkdown.vue';\nimport Dropdown, {\n toDropdownItems,\n} from '@/components/forms/InputDropdown.vue';\nimport TagPicker from '@/components/forms/InputTagPicker.vue';\nimport Checkbox from '@/components/forms/InputCheckbox.vue';\nimport InputLabel from '@/components/forms/InputLabel.vue';\nimport VersionCopy from '@/components/admin/VersionCopy.vue';\nimport ModalComponent from '@/components/ModalComponent.vue';\nimport { computed, ref, watch, watchEffect } from 'vue';\nimport { useRoute } from 'vue-router';\nimport { throwOnError } from '@/api/composable';\nimport { useI18n } from 'vue-i18n';\nimport {\n closeSuggestion,\n connectWorkItem,\n createSuggestion,\n createWorkItem,\n deleteSuggestion,\n disconnectWorkItem,\n updateSuggestion,\n useSuggestion,\n} from '@/api/suggestion';\nimport { useStoreAbility } from '@/abilities';\nimport {\n getEmptyLocaleValue,\n type Guid,\n type Suggestion,\n type Version,\n} from '@/api/types';\nimport { useValidationTracking } from '@/utilities/useValidationTracking';\nimport { useRouter } from 'vue-router';\nimport { useVersions } from '@/api/versions';\nimport { deepClone } from '@/utilities/deepClone';\nimport {\n getSuggestionStatus,\n suggestionManualStatuses,\n} from '@/utilities/getSuggestionStatus';\nimport { md } from '@/utilities/markdown/MarkdownIt';\nimport { translateStringOrLocale } from '@/i18n';\nimport InputBlockPicker from '@/components/forms/InputBlockPicker.vue';\nimport { getMdEnv } from '@/utilities/markdown/utilities';\n\nconst { t } = useI18n();\nconst { can } = useStoreAbility();\n\nconst route = useRoute();\nconst router = useRouter();\nconst suggestionId = can('update', 'Suggestion')\n ? parseInt(route.params.suggestionId as string)\n : undefined;\nconst fromDevOps = ref(route.query.fromDevOps !== undefined);\nconst handleCleanup = async (value: string) => {\n if (!suggestion.value) return;\n fromDevOps.value = false;\n suggestion.value.description.no = value;\n suggestion.value.description.en = value;\n await onSave();\n await router.push({ query: undefined });\n};\n\nconst suggestionType: Suggestion['type'] = 'Suggestion';\nconst isEdit = !!suggestionId;\n\nconst { result: _suggestion } = throwOnError(useSuggestion(suggestionId, true));\nconst suggestion = ref<(Suggestion & { workItemId?: number }) | null>(\n isEdit\n ? null\n : {\n tempId: crypto.randomUUID(),\n title: getEmptyLocaleValue(),\n description: getEmptyLocaleValue(),\n type: suggestionType,\n },\n);\nwatchEffect(() => {\n if (!_suggestion.value) return;\n (_suggestion.value as { workItemId?: number }).workItemId =\n _suggestion.value.workItem?.id;\n if (_suggestion.value.blockVersion?.blockName) {\n _suggestion.value.blockVersion.blockName = {\n no:\n translateStringOrLocale(_suggestion.value.blockVersion?.blockName)\n .value ?? '',\n };\n }\n suggestion.value = deepClone(_suggestion.value);\n});\nconst texts = computed(() =>\n isEdit ? 'suggestions.admin.edit' : 'suggestions.admin.new',\n);\n\nconst showValidationMessages = ref<boolean>(isEdit);\nconst triggerFormValidation = ref<boolean>(isEdit);\nconst { onValidChanged, formRef, isValid } = useValidationTracking(\n suggestion,\n triggerFormValidation,\n true,\n isEdit,\n);\n\nconst canSave = computed(() => {\n if (!_suggestion.value && !suggestion.value) return false;\n if (!_suggestion.value) return isValid.value;\n const validDevOpsConnections =\n suggestion.value?.workItem !== undefined || !suggestion.value?.workItemId;\n return (\n isValid.value &&\n validDevOpsConnections &&\n JSON.stringify(_suggestion.value) !== JSON.stringify(suggestion.value)\n );\n});\n\nconst onSave = async () => {\n if (!suggestion.value) return;\n if (!isValid.value) {\n showValidationMessages.value = true;\n triggerFormValidation.value = true;\n setTimeout(() => (triggerFormValidation.value = false), 250);\n return;\n }\n if (!isEdit) {\n suggestion.value.title.en = suggestion.value.title.no;\n suggestion.value.description.en = suggestion.value.description.no;\n const updatedValue = await createSuggestion(suggestion.value);\n suggestion.value.id = updatedValue.id;\n suggestion.value.tempId = undefined;\n router.push({ path: '/suggestions' });\n } else {\n await updateSuggestion({ ...suggestion.value, suggestedBy: undefined });\n _suggestion.value = suggestion.value;\n suggestion.value = deepClone(_suggestion.value);\n }\n};\nconst maxDescriptionLength = 4000;\nconst editorHeight = isEdit ? '30rem' : '20rem';\nconst selectedBlockId = ref<Guid>();\nconst selectedBlockName = ref<string>();\nwatch(_suggestion, () => {\n if (!_suggestion.value || selectedBlockId.value) return;\n if (!_suggestion.value.blockVersion?.blockId) return;\n selectedBlockId.value = _suggestion.value.blockVersion?.blockId;\n});\nconst selectedVersion = ref<Version | null>(null);\nwatchEffect(() => {\n if (!suggestion.value) return;\n if (!selectedVersion.value) {\n suggestion.value.blockVersion = undefined;\n return;\n }\n if (!suggestion.value.blockVersion) {\n suggestion.value.blockVersion = { id: selectedVersion.value.versionId };\n } else {\n suggestion.value.blockVersion.id = selectedVersion.value.versionId;\n }\n // Important: order of adding properties should match what comes from the API when getting blockVersion property\n suggestion.value.blockVersion.blockId = selectedBlockId.value;\n suggestion.value.blockVersion.blockName = {\n no: selectedBlockName.value ?? '',\n };\n suggestion.value.blockVersion.versionNumber =\n selectedVersion.value.versionNumber;\n});\nconst { result: versions } = useVersions(selectedBlockId, true, false);\nwatch(\n () => [_suggestion.value?.blockVersion?.id, versions.value],\n () => {\n if (!versions.value || !_suggestion.value || selectedVersion.value) return;\n if (_suggestion.value.blockVersion?.id) {\n selectedVersion.value =\n versions.value.find(\n (b) => b.versionId === _suggestion.value?.blockVersion?.id,\n ) ?? null;\n }\n },\n);\n\nconst versionOptions = computed(() =>\n toDropdownItems(\n versions.value,\n (v) => [v.versionId.toString(), v.versionNumber, v],\n true,\n ),\n);\nconst statusOptions = computed(() => {\n const statuses = [...suggestionManualStatuses];\n if (_suggestion.value?.status === 'Done') statuses.push('Done');\n return toDropdownItems(statuses, (i) => [i, t(`suggestions.status.${i}`)]);\n});\nconst connectDevOps = async () => {\n if (!suggestion.value) return;\n if (!suggestion.value.workItemId) {\n if (!_suggestion.value) return;\n const description = md.render(\n suggestion.value.description.no,\n getMdEnv(\n _suggestion.value.id\n ? { suggestionId: _suggestion.value.id }\n : 'public',\n window.location.origin,\n ),\n );\n\n const workItem = await createWorkItem({\n type: 'User Story',\n title: suggestion.value.title.no,\n description,\n });\n suggestion.value.workItemId = workItem.id;\n }\n try {\n const result = await connectWorkItem(\n { workItem: { id: suggestion.value.workItemId } },\n _suggestion.value?.id,\n );\n if (_suggestion.value?.id === undefined) {\n if (result.id) {\n router.push({\n name: 'suggestion_edit',\n params: { suggestionId: result.id },\n query: { fromDevOps: true.toString() },\n });\n }\n return;\n }\n for (const item of [_suggestion.value, suggestion.value]) {\n item.workItem = { ...result.workItem };\n item.status = result.status;\n }\n } catch {\n throw new Error('error.invalid_workitem');\n }\n};\nconst disconnectDevOps = async () => {\n if (!_suggestion.value?.id || !suggestion.value) return;\n try {\n await disconnectWorkItem(\n { workItem: { id: suggestion.value.workItemId } },\n _suggestion.value.id,\n );\n for (const item of [_suggestion.value, suggestion.value]) {\n item.workItem = undefined;\n item.status = 'UnderConsideration';\n }\n } catch {\n throw new Error('error.invalid_workitem');\n }\n};\nconst setDone = async () => {\n if (!_suggestion.value?.id || !suggestion.value) return;\n await closeSuggestion(_suggestion.value.id);\n suggestion.value.status = 'Done';\n _suggestion.value.status = 'Done';\n};\nconst createFromDevOps = ref<boolean | null>(\n can('update', 'Suggestion') && !isEdit ? false : null,\n);\nconst showDeleteModal = ref(false);\nasync function doDelete() {\n if (!_suggestion.value?.id) return;\n await deleteSuggestion(_suggestion.value.id);\n router.push({ name: 'suggestion_list' });\n}\n</script>\n\n<template>\n <div class=\"w-full bg-gnist-gray-light-light text-gnist-black\">\n <ParagraphShimmer\n v-if=\"suggestion === null\"\n :lines=\"6\"\n :random-size=\"true\"\n class=\"mx-auto w-full max-w-5xl\"\n />\n\n <div\n v-else\n class=\"mx-2 py-8 md:mx-auto\"\n :class=\"[isEdit ? 'md:max-w-[100rem]' : 'md:w-[50rem]']\"\n >\n <h1 class=\"mb-16\">\n {{ t(`${texts}.header${suggestion.type}`) }}\n </h1>\n <form\n ref=\"formRef\"\n class=\"flex grid-cols-2 flex-col items-stretch gap-x-4 md:grid\"\n >\n <Checkbox\n v-if=\"createFromDevOps !== null\"\n v-model=\"createFromDevOps\"\n label=\"suggestions.admin.createFromDevOps\"\n direction=\"horizontal\"\n mode=\"toggle\"\n class=\"col-span-2\"\n />\n <TextInput\n v-if=\"!createFromDevOps\"\n v-model=\"suggestion.title.no\"\n :label=\"`${texts}.titleNo`\"\n required\n :minlength=\"1\"\n :maxlength=\"80\"\n placeholder=\"suggestions.admin.titlePlaceholder\"\n :class=\"{ 'col-span-2': !isEdit }\"\n />\n <TextInput\n v-if=\"isEdit\"\n v-model=\"suggestion.title.en\"\n label=\"suggestions.admin.titleEn\"\n required\n :minlength=\"1\"\n :maxlength=\"80\"\n placeholder=\"suggestions.admin.titlePlaceholder\"\n />\n <template v-if=\"isEdit\">\n <Dropdown\n v-if=\"suggestion.workItem === undefined\"\n v-model=\"suggestion.status\"\n label=\"suggestions.admin.status\"\n tooltip=\"suggestions.admin.statusTooltip\"\n :options=\"statusOptions\"\n :getkey=\"(t) => t\"\n />\n <TextInput\n v-else\n :model-value=\"\n t(\n `suggestions.status.${getSuggestionStatus(suggestion)}`,\n getSuggestionStatus(suggestion) ?? '',\n )\n \"\n label=\"suggestions.admin.status\"\n tooltip=\"suggestions.admin.statusTooltip\"\n disabled\n />\n <TagPicker\n v-model=\"suggestion.tags\"\n label=\"suggestions.admin.tags\"\n suggestedlabel=\"admin.blockProduction.suggestedTags\"\n :taglistclass=\"['max-h-24 overflow-y-auto']\"\n class=\"col-span-2\"\n />\n\n <div class=\"col-span-2 flex grid-cols-3 flex-col gap-x-4 md:grid\">\n <InputBlockPicker\n v-model=\"selectedBlockId\"\n label=\"suggestions.admin.select_block\"\n @changed=\"(val) => (selectedBlockName = val?.name)\"\n />\n <Dropdown\n v-if=\"selectedBlockId\"\n v-model=\"selectedVersion\"\n label=\"suggestions.admin.select_version\"\n :options=\"versionOptions\"\n :getkey=\"(t) => t?.versionId\"\n />\n <VersionCopy\n v-if=\"selectedBlockId && !selectedVersion\"\n :block-id=\"selectedBlockId\"\n :versions=\"versions\"\n class=\"my-2 self-end border-[1px] border-transparent py-1\"\n @created=\"\n (version) => {\n if (!suggestion) return;\n if (versions) versions.push(version);\n selectedVersion = version;\n }\n \"\n />\n <ButtonComponent\n v-if=\"\n suggestion.workItem?.status === 'Closed' &&\n suggestion.status !== 'Done'\n \"\n :text=\"t('suggestions.admin.finish_backlog')\"\n class=\"my-2 w-auto self-end justify-self-start\"\n @click.prevent=\"setDone\"\n />\n </div>\n </template>\n <template v-if=\"isEdit || createFromDevOps === true\">\n <div class=\"col-span-2 flex grid-cols-3 flex-col gap-x-4 md:grid\">\n <div class=\"flex items-stretch\">\n <TextInput\n v-model=\"suggestion.workItemId\"\n label=\"suggestions.admin.workitem\"\n tooltip=\"suggestions.admin.workitemTooltip\"\n :disabled=\"suggestion.workItem !== undefined\"\n class=\"basis-full\"\n />\n <ButtonComponent\n v-if=\"suggestion.workItem\"\n :text=\"t('suggestions.admin.disconnect_workitem')\"\n class=\"my-2 w-auto self-end justify-self-start\"\n @click.prevent=\"disconnectDevOps\"\n />\n </div>\n <label\n for=\"devopsLink\"\n class=\"flex flex-col whitespace-nowrap\"\n :class=\"{ invisible: suggestion.workItem === undefined }\"\n >\n <InputLabel label=\"suggestions.admin.workitemLink\" />\n <div\n class=\"my-2 overflow-hidden text-ellipsis border-[1px] border-transparent py-2\"\n >\n <a\n v-if=\"!!suggestion.workItem\"\n :href=\"suggestion.workItem.url\"\n :alt=\"suggestion.workItem.title\"\n target=\"_blank\"\n class=\"ml-1 underline\"\n >\n {{ suggestion.workItem.title }}\n </a>\n </div>\n </label>\n <TextInput\n :model-value=\"suggestion.workItem?.status\"\n label=\"suggestions.admin.workitemStatus\"\n :disabled=\"true\"\n :class=\"{ hidden: suggestion.workItem === undefined }\"\n />\n <ButtonComponent\n v-if=\"!suggestion.workItem\"\n :text=\"\n createFromDevOps === true\n ? t('suggestions.admin.createFromDevOps')\n : suggestion.workItemId\n ? t('suggestions.admin.connect_workitem')\n : t('suggestions.admin.create_workitem')\n \"\n class=\"my-2 w-auto self-end justify-self-start\"\n :disabled=\"createFromDevOps === true && !suggestion.workItemId\"\n @click.prevent=\"connectDevOps\"\n />\n </div>\n </template>\n <MarkdownInput\n v-if=\"!createFromDevOps\"\n v-model=\"suggestion.description.no\"\n for-name=\"description_no\"\n :label=\"`${texts}.descriptionNo`\"\n required\n :maxlength=\"maxDescriptionLength\"\n :tooltip=\"`${texts}.descriptionTooltip`\"\n placeholder=\"suggestions.admin.descriptionPlaceholder\"\n :blob-location=\"\n suggestion.id\n ? { suggestionId: suggestion.id }\n : suggestion.tempId\n ? { suggestionId: suggestion.tempId }\n : undefined\n \"\n :editor-height=\"editorHeight\"\n :hide-filepicker=\"!isEdit\"\n class=\"mt-4\"\n :class=\"{ 'col-span-2': !isEdit }\"\n :show-validation-message=\"showValidationMessages\"\n :request-cleanup=\"fromDevOps\"\n @report-validation-error=\"\n (name, hasError) => onValidChanged(name, !hasError)\n \"\n @cleanup:model-value=\"handleCleanup\"\n />\n <MarkdownInput\n v-if=\"isEdit\"\n v-model=\"suggestion.description.en\"\n for-name=\"description_en\"\n label=\"suggestions.admin.descriptionEn\"\n required\n :maxlength=\"maxDescriptionLength\"\n :tooltip=\"`${texts}.descriptionTooltip`\"\n placeholder=\"suggestions.admin.descriptionPlaceholder\"\n :blob-location=\"\n suggestion.id\n ? { suggestionId: suggestion.id }\n : suggestion.tempId\n ? { suggestionId: suggestion.tempId }\n : undefined\n \"\n :editor-height=\"editorHeight\"\n class=\"mt-4\"\n :show-validation-message=\"showValidationMessages\"\n @report-validation-error=\"\n (name, hasError) => onValidChanged(name, !hasError)\n \"\n />\n <div\n v-if=\"createFromDevOps !== true\"\n className=\"flex justify-end col-span-2 p-2\"\n >\n <div class=\"gnist-button-group\">\n <ButtonComponent\n v-if=\"isEdit && can('delete', 'Suggestion')\"\n type=\"danger\"\n :text=\"t('buttons.delete')\"\n @click=\"() => (showDeleteModal = true)\"\n />\n <RouterLink :to=\"{ path: '/suggestions' }\">\n <ButtonComponent :text=\"t('buttons.cancel')\" class=\"w-full\" />\n </RouterLink>\n <ButtonComponent\n type=\"primary\"\n :text=\"\n isEdit\n ? t('buttons.save')\n : t(`suggestions.admin.submit.${suggestionType}`)\n \"\n :disabled=\"isEdit && !canSave\"\n @click=\"onSave\"\n />\n <ModalComponent\n :show-modal=\"showDeleteModal\"\n :title=\"t('suggestions.admin.confirmDelete')\"\n @close=\"() => (showDeleteModal = false)\"\n @handle-click=\"doDelete\"\n >\n <template #default>\n <p>{{ t('suggestions.admin.deletePermanently') }}</p>\n </template>\n </ModalComponent>\n </div>\n </div>\n </form>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\" generic=\"T = string\">\nimport type { SimpleLookupValue } from '@/api/types';\nimport TextInput from '@/components/forms/InputText.vue';\nimport { useNestedMV } from '@/utilities/useInternalState';\nimport { useI18n } from 'vue-i18n';\n\nconst props = defineProps<{\n modelValue: SimpleLookupValue<T>;\n i18nKey?: string;\n includeExtendedDescription?: boolean;\n}>();\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: typeof props.modelValue): void;\n}>();\n\nconst { t } = useI18n();\n\nconst value = useNestedMV(props, (val) => emit('update:modelValue', val));\n\nconst noPrefix = t('language.values.no') + ' ';\nconst enPrefix = t('language.values.en') + ' ';\n</script>\n\n<template>\n <TextInput\n v-model=\"value.key as string | number\"\n :label=\"`${i18nKey ?? 'masterData.simpleLookup'}.key`\"\n :type=\"typeof value.key === 'number' ? 'number' : 'text'\"\n required\n />\n <TextInput\n v-model=\"value.text.no\"\n :label=\"noPrefix + t(`${i18nKey ?? 'masterData.simpleLookup'}.text`)\"\n required\n />\n <TextInput\n v-model=\"value.text.en\"\n :label=\"enPrefix + t(`${i18nKey ?? 'masterData.simpleLookup'}.text`)\"\n />\n <TextInput\n v-if=\"includeExtendedDescription\"\n v-model=\"value.extendedDescription.no\"\n :label=\"\n noPrefix +\n t(`${i18nKey ?? 'masterData.simpleLookup'}.extendedDescription`)\n \"\n />\n <TextInput\n v-if=\"includeExtendedDescription\"\n v-model=\"value.extendedDescription.en\"\n :label=\"\n enPrefix +\n t(`${i18nKey ?? 'masterData.simpleLookup'}.extendedDescription`)\n \"\n />\n <slot />\n</template>\n","import { apiUrl } from '@/config';\nimport type {\n AgreementReference,\n ApplicationService,\n ArchType,\n Company,\n CustomText,\n FieldLabel,\n AlzFormTopic,\n InformationClass,\n SimpleLookupValue,\n} from './types';\nimport { composeLazy } from './composable';\nimport {\n addLocaleData,\n loadDynamicLocaleMessages,\n type LocaleMessageSet,\n} from '@/i18n';\nimport type { Router } from 'vue-router';\n\nconst masterdataUrl = apiUrl + '/masterdata';\n\nconst mdEndpoints = [\n 'application_services',\n 'agreement_references',\n 'companies',\n 'infoclasses',\n 'criticalities',\n 'archtypes',\n 'field_labels',\n 'strings',\n 'form_configurations',\n 'default_alz_roles',\n 'default_github_teams',\n 'alz_form_topics',\n] as const;\nexport type MdEndpoint = (typeof mdEndpoints)[number];\n\nexport async function getMasterData<T>(\n endpoint: MdEndpoint,\n urlEnd?: string,\n): Promise<T[]> {\n const response = await fetch(`${masterdataUrl}/${endpoint}${urlEnd ?? ''}`, {\n method: 'GET',\n credentials: 'include',\n });\n if (!response.ok) throw new Error(await response.text());\n return await response.json();\n}\nexport async function getTexts<T>(\n endpoint: MdEndpoint,\n groups?: string | string[],\n): Promise<T[]> {\n const arrGroups = !groups ? [] : Array.isArray(groups) ? groups : [groups];\n return (\n await Promise.all(\n arrGroups.map(async (group) => {\n const response = await fetch(`${masterdataUrl}/${endpoint}/${group}`, {\n method: 'GET',\n credentials: 'include',\n });\n if (!response.ok) throw new Error(await response.text());\n return await response.json();\n }),\n )\n ).flat();\n}\n\nexport const myAgreementReferences = composeLazy(() =>\n getMasterData<AgreementReference>('agreement_references', '/my_agreements'),\n);\nexport const adminAgreementReferences = composeLazy(() =>\n getMasterData<AgreementReference>('agreement_references', '/admin_list'),\n);\n\nexport const applicationServices = composeLazy(() =>\n getMasterData<ApplicationService>('application_services'),\n);\n\nexport const companies = composeLazy(() => getMasterData<Company>('companies'));\n\nexport const informationClasses = composeLazy(() =>\n getMasterData<InformationClass>('infoclasses'),\n);\n\nexport const criticalities = composeLazy(() =>\n getMasterData<SimpleLookupValue<number>>('criticalities'),\n);\n\nexport const archTypes = composeLazy(() =>\n getMasterData<ArchType>('archtypes'),\n);\n\nexport const standardLzRoles = composeLazy(() =>\n getMasterData<SimpleLookupValue>('default_alz_roles'),\n);\nexport const standardGithubTeams = composeLazy(() =>\n getMasterData<SimpleLookupValue>('default_github_teams'),\n);\n\nexport const alzFormTopics = composeLazy(() =>\n getMasterData<AlzFormTopic>('alz_form_topics'),\n);\n\nexport function useDynamicText(\n fieldGroups?: string | string[],\n msgGroups?: string | string[],\n richGroups?: string | string[],\n router?: Router,\n) {\n const composable = composeLazy(async () => {\n const dbFieldLabels = await getTexts<FieldLabel>(\n 'field_labels',\n fieldGroups,\n );\n const dbMessages = await getTexts<CustomText>('strings', msgGroups);\n const dbRichtext = richGroups\n ? await getTexts<CustomText>('strings', richGroups)\n : [];\n\n const data: LocaleMessageSet = { no: {}, en: {} };\n\n for (const m of dbFieldLabels) {\n addLocaleData(data, m.label, m.group, `${m.field}.label`);\n addLocaleData(data, m.tooltip, m.group, `${m.field}.tooltip`);\n addLocaleData(data, m.placeholder, m.group, `${m.field}.placeholder`);\n addLocaleData(data, m.description, m.group, `${m.field}.description`);\n }\n for (const m of dbMessages) {\n addLocaleData(data, m.text, m.group, m.identifier);\n }\n await loadDynamicLocaleMessages(data, router);\n return { dbFieldLabels, dbRichtext };\n });\n composable.init();\n return composable;\n}\n\ntype GenericMasterData = {\n Set: string;\n Key: string;\n data: string;\n};\nexport async function addMasterDataRow<T>(\n endpoint: MdEndpoint,\n data: T,\n keyProperty: keyof T,\n): Promise<T> {\n const payload: GenericMasterData = {\n Set: endpoint,\n Key: `${data[keyProperty]}`,\n data: JSON.stringify(data),\n };\n const response = await fetch(`${masterdataUrl}/${endpoint}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify(endpoint === 'agreement_references' ? data : payload),\n });\n if (!response.ok) throw new Error(await response.text());\n return await response.json();\n}\n\nexport async function updateMasterDataRow<T>(\n endpoint: MdEndpoint,\n id: string | number,\n data: T,\n): Promise<void> {\n const payload: GenericMasterData = {\n Set: endpoint,\n Key: id.toString(),\n data: JSON.stringify(data),\n };\n const response = await fetch(`${masterdataUrl}/${endpoint}/${id}`, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify(endpoint === 'agreement_references' ? data : payload),\n });\n if (!response.ok) throw new Error(await response.text());\n}\n\nexport async function deleteMasterDataRow(\n endpoint: MdEndpoint,\n id: string | number,\n): Promise<void> {\n const response = await fetch(`${masterdataUrl}/${endpoint}/${id}`, {\n method: 'DELETE',\n credentials: 'include',\n });\n if (!response.ok) throw new Error(await response.text());\n}\n","import {\n toDropdownItems,\n type IDropdownItem,\n} from '@/components/forms/InputDropdown.vue';\n\nexport const mapValueList = <T extends string | null | undefined>(\n values: T[] | readonly T[],\n i18nKey: string,\n includeEmpty = false,\n emptyValue: T = '' as T,\n emptyLabel?: string,\n): IDropdownItem<T>[] => {\n return toDropdownItems(\n values,\n (c) => [c ?? '', `${i18nKey}.values.${c}`, c],\n includeEmpty,\n emptyValue,\n emptyLabel ? `${i18nKey}.values.${emptyLabel}` : undefined,\n );\n};\n","type FieldSetDetailsInternal<\n TFields extends readonly string[] = readonly string[],\n TGroup extends string = string,\n> = {\n group: TGroup;\n richtext?: boolean;\n fields: {\n [TKey in TFields[number]]: `${TGroup}.${TKey}`;\n };\n};\nexport type FieldSetDetails<\n TFields extends readonly string[] = readonly string[],\n> = FieldSetDetailsInternal<TFields, FieldSetKey>;\nexport type TextSetDetails<\n TFields extends readonly string[] = readonly string[],\n> = FieldSetDetailsInternal<TFields, TextSetKey>;\n\nfunction getFieldSetKeys<\n TFields extends readonly string[],\n TGroup extends string = string,\n>(group: TGroup, fields: TFields, richtext?: boolean) {\n return {\n group,\n richtext,\n fields: Object.fromEntries(\n fields.map((f) => [f, `${group}.${f}`]),\n ) as FieldSetDetailsInternal<TFields, TGroup>['fields'],\n } satisfies FieldSetDetailsInternal<TFields, TGroup>;\n}\n\nexport type FieldSetKey =\n (typeof allFieldSets)[keyof typeof allFieldSets]['group'];\nexport function getFieldSetByKey(key: FieldSetKey): FieldSetDetails {\n if (!key) return { group: '' as FieldSetKey, fields: {} };\n const match = Object.values(allFieldSets).find((f) => f.group === key);\n if (!match) throw new Error('This should not happen');\n return match;\n}\nexport type TextSetKey =\n | (typeof allSimpleTextSets)[keyof typeof allSimpleTextSets]['group']\n | (typeof allRichTextSets)[keyof typeof allRichTextSets]['group'];\nexport function getTextSetByKey(key: TextSetKey): TextSetDetails {\n if (!key) return { group: '' as TextSetKey, fields: {} };\n const simpleSet = Object.values(allSimpleTextSets).find(\n (f) => f.group === key,\n );\n const richSet = Object.values(allRichTextSets).find((f) => f.group === key);\n if (!simpleSet && !richSet) throw new Error('This should not happen');\n return Object.assign(simpleSet ?? {}, richSet ?? {}) as TextSetDetails;\n}\n\nconst alzFieldKeys = getFieldSetKeys('orders.alz.fields', [\n 'company',\n 'service',\n 'agreement',\n 'costCenter',\n 'lzName',\n 'sandboxName',\n 'endDate',\n 'owner',\n 'crit',\n 'infoClass',\n 'archType',\n 'envColumns.name',\n 'envColumns.sandbox',\n 'envColumns.type',\n 'envColumns.test_data',\n 'repoColumns.name',\n 'repoColumns.existing',\n 'repoColumns.landing_zones',\n 'ownerTag',\n 'workloadName',\n 'ops',\n 'opsCi',\n 'status',\n 'metadata',\n 'sandboxdetails',\n 'sandboxreponame',\n 'type',\n 'env',\n 'repos',\n 'ops',\n] as const);\n\nconst batFieldKeys = getFieldSetKeys('orders.bat.fields', [\n 'roleColumns.name',\n 'roleColumns.canOrder',\n 'customProduct',\n 'productColumns.type',\n 'productColumns.objectId',\n 'productColumns.roleId',\n] as const);\n\nconst kssContactFieldKeys = getFieldSetKeys('contact.kss.fields', [\n 'topic',\n 'senderEmail',\n 'senderName',\n 'title',\n 'request',\n] as const);\n\nexport const allFieldSets = {\n alzFieldKeys,\n batFieldKeys,\n kssContactFieldKeys,\n} as const satisfies {\n [key: string]: FieldSetDetailsInternal;\n};\n\nconst alzTextKeys = getFieldSetKeys('orders.alz', [\n 'buttons.values.addEnv',\n 'buttons.values.addRepo',\n 'buttons.values.update',\n 'buttons.values.submit',\n 'buttons.values.submitted',\n 'unknownService',\n 'searchMatchesLabel',\n 'fields.ops.values.team_ops',\n 'fields.ops.values.cpo_ops',\n 'fields.ops.values.delegated_ops',\n 'fields.envColumns.type.values.Prod',\n 'fields.envColumns.type.values.PreProd',\n 'fields.envColumns.type.values.Test',\n 'fields.envColumns.type.values.Development',\n 'fields.envColumns.type.values.Troubleshooting',\n 'fields.envColumns.type.values.Trial',\n 'fields.envColumns.type.values.Course',\n 'fields.envColumns.test_data.values.synthetic',\n 'fields.envColumns.test_data.values.anonymized',\n 'fields.envColumns.test_data.values.indirect_identifiable',\n 'fields.envColumns.test_data.values.person_sensitive',\n] as const);\n\nconst batTextKeys = getFieldSetKeys('orders.bat', [\n 'buttons.values.showModal',\n 'buttons.values.addProduct',\n 'buttons.values.deleteProduct',\n 'fields.productColumns.type.values.lz_role',\n 'fields.productColumns.type.values.gh_role',\n] as const);\n\nconst kssContactTextKeys = getFieldSetKeys('contact.kss', [\n 'buttons.values.send',\n] as const);\n\nexport const allSimpleTextSets = {\n alzTextKeys,\n batTextKeys,\n kssContactTextKeys,\n} satisfies {\n [key: string]: FieldSetDetailsInternal;\n};\n\nexport const richTextPrefix = 'richtext.';\nconst alzRichTextKeys = getFieldSetKeys(\n `${richTextPrefix}orders.alz`,\n ['agreementNumberMissing'] as const,\n true,\n);\n\nexport const allRichTextSets = { alzRichTextKeys } satisfies {\n [key: string]: FieldSetDetailsInternal;\n};\n\nexport const allTextSets = Object.assign(allSimpleTextSets, allRichTextSets);\n","import type { OnlyKeysWithValsOfType } from '@/api/types';\n\nexport function groupBy<\n TItem,\n TKey extends keyof OnlyKeysWithValsOfType<TItem, string>,\n TGroupValue extends TItem[TKey] & string,\n TValue = TItem,\n>(arr: TItem[], groupKey: TKey, selector?: (item: TItem) => TValue) {\n return arr.reduce(\n function (result, current) {\n const keyProp: TItem[TKey] = current[groupKey];\n if (!isTypeAndString<TItem[TKey], TGroupValue>(keyProp)) {\n throw 'Only properties returning strings can be used as a group by key!';\n } else {\n keyProp;\n if (!result[keyProp]) {\n result[keyProp] = [];\n }\n if (selector) {\n result[keyProp].push(selector?.(current));\n } else {\n result[keyProp].push(current as unknown as TValue);\n }\n return result;\n }\n },\n {} as { [key in TGroupValue]: TValue[] },\n );\n}\n\nexport function groupByIntoArray<\n TItem,\n TKey extends keyof OnlyKeysWithValsOfType<TItem, string>,\n TValue = TItem,\n>(arr: TItem[], groupKey: TKey, selector?: (item: TItem) => TValue) {\n return Object.entries(groupBy(arr, groupKey, selector)).map(\n ([group, values]) => ({\n group: group as TItem[TKey],\n values: values as TValue[],\n }),\n );\n}\n\nfunction isTypeAndString<TBaseType, TWithString extends TBaseType & string>(\n val: TBaseType,\n): val is TWithString {\n return typeof val === 'string';\n}\n","<script setup lang=\"ts\" generic=\"T = string\">\nimport type {\n FieldLabel,\n Link,\n localeValue,\n OnlyKeysWithValsOfType,\n PartialSome,\n RequiredSome,\n Translated,\n} from '@/api/types';\nimport TextInput from '@/components/forms/InputText.vue';\nimport MarkdownInput from '@/components/forms/InputMarkdown.vue';\nimport Checkbox from '@/components/forms/InputCheckbox.vue';\nimport Dropdown from '@/components/forms/InputDropdown.vue';\nimport { useInternalState } from '@/utilities/useInternalState';\nimport { useI18n } from 'vue-i18n';\nimport { toDropdownItems } from './forms/InputDropdown.vue';\nimport { allFieldSets, getFieldSetByKey } from '@/api/field_labels';\nimport { computed, toRef } from 'vue';\nimport type { supported_locale } from '@/config';\nimport LinkInput from './forms/InputLink.vue';\nimport { groupBy } from '@/utilities/groupBy';\n\nconst props = defineProps<{\n modelValue: FieldLabel;\n allFields: FieldLabel[];\n}>();\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: typeof props.modelValue): void;\n}>();\n\nconst { t } = useI18n();\n\ntype InternalValType = RequiredSome<\n typeof props.modelValue,\n 'tooltip' | 'placeholder' | 'description'\n>;\n\nfunction toInternalState(externalState: FieldLabel): InternalValType {\n return {\n ...externalState,\n tooltip: externalState.tooltip ?? { no: '' },\n placeholder: externalState.placeholder ?? { no: '' },\n description: externalState.description ?? { no: '' },\n };\n}\n\nconst value = useInternalState<typeof props.modelValue, InternalValType>(\n toRef(props, 'modelValue'),\n toInternalState(props.modelValue),\n (val) => emit('update:modelValue', val),\n (newExtState) => toInternalState(newExtState),\n (newIntState) => {\n return {\n ...newIntState,\n tooltip: !newIntState.tooltip.no ? undefined : newIntState.tooltip,\n placeholder: !newIntState.placeholder.no\n ? undefined\n : newIntState.placeholder,\n description: !newIntState.description.no\n ? undefined\n : newIntState.description,\n };\n },\n true,\n true,\n);\n\nconst groupedFields = computed(() =>\n groupBy(props.allFields, 'group', (item) => item.field),\n);\n\nconst setOptions = toDropdownItems(\n Object.values(allFieldSets).filter((set) => {\n const usedFieldCount = groupedFields.value[set.group]?.length ?? 0;\n const availableFieldCount = Object.keys(set.fields).length;\n return (\n value.value.group === set.group || availableFieldCount > usedFieldCount\n );\n }),\n (set) => [\n set.group,\n t(`masterData.field_labels.groups.${set.group.replaceAll('.', '_')}`),\n set.group,\n ],\n true,\n undefined,\n);\n\nconst existingGroupFields = computed(() =>\n props.allFields.filter((f) => f.group === value.value.group),\n);\n\nconst fieldOptions = computed(() =>\n toDropdownItems(\n value.value.group\n ? Object.entries(getFieldSetByKey(value.value.group).fields)\n .map(([key, value]) => ({ key, value }))\n .filter(\n (f) =>\n f.key === value.value.field ||\n !existingGroupFields.value.find((e) => e.field === f.key),\n )\n : [],\n (item) => [item.key, `${item.value}.label`, item.key],\n true,\n ),\n);\n\nfunction setLocaleValue(\n key: keyof OnlyKeysWithValsOfType<InternalValType, localeValue>,\n locale: supported_locale,\n val: string,\n) {\n if (!value.value[key]) {\n value.value[key] = { no: '' };\n }\n value.value[key][locale] = val;\n}\nconst url = computed<PartialSome<Translated<Link>, 'text' | 'alt'>>({\n get() {\n return { url: value.value.link ?? '' };\n },\n set(newValue) {\n value.value.link = newValue.url ? newValue.url : undefined;\n },\n});\n</script>\n\n<template>\n <div class=\"flex grid-cols-2 flex-col gap-4 md:grid\">\n <Dropdown\n v-model=\"value.group\"\n label=\"masterData.field_labels.group\"\n :options=\"setOptions\"\n :getkey=\"(t) => t ?? ''\"\n allow-empty-value\n disable-empty-option\n :disabled=\"!!value.group\"\n />\n <Dropdown\n v-model=\"value.field\"\n label=\"masterData.field_labels.field\"\n :options=\"fieldOptions\"\n :getkey=\"(t) => t\"\n allow-empty-value\n disable-empty-option\n :disabled=\"!!value.field\"\n :class=\"{ invisible: !value.group }\"\n />\n <div class=\"col-span-2\">\n <Checkbox\n v-model=\"value.richTextDescription\"\n label=\"masterData.field_labels.richTextDescription\"\n direction=\"horizontal\"\n mode=\"toggle\"\n />\n </div>\n <div class=\"font-bold\">\n {{ t('language.values.no') }}\n </div>\n <div class=\"font-bold\">\n {{ t('language.values.en') }}\n </div>\n <TextInput\n v-model=\"value.label.no\"\n label=\"masterData.field_labels.label.no\"\n required\n />\n <TextInput v-model=\"value.label.en\" label=\" \" />\n <TextInput\n :model-value=\"value.tooltip?.no\"\n label=\"masterData.field_labels.tooltip.no\"\n @update:model-value=\"(val) => setLocaleValue('tooltip', 'no', val)\"\n />\n <TextInput\n :model-value=\"value.tooltip?.en\"\n label=\" \"\n @update:model-value=\"(val) => setLocaleValue('tooltip', 'en', val)\"\n />\n <TextInput\n :model-value=\"value.placeholder?.no\"\n label=\"masterData.field_labels.placeholder.no\"\n @update:model-value=\"(val) => setLocaleValue('placeholder', 'no', val)\"\n />\n <TextInput\n :model-value=\"value.placeholder?.en\"\n label=\" \"\n @update:model-value=\"(val) => setLocaleValue('placeholder', 'en', val)\"\n />\n <template v-if=\"!value.richTextDescription\">\n <TextInput\n :model-value=\"value.description?.no\"\n label=\"masterData.field_labels.description.no\"\n @update:model-value=\"(val) => setLocaleValue('description', 'no', val)\"\n />\n <TextInput\n :model-value=\"value.description?.en\"\n label=\" \"\n @update:model-value=\"(val) => setLocaleValue('description', 'en', val)\"\n />\n </template>\n <template v-else>\n <MarkdownInput\n v-model=\"value.description.no\"\n for-name=\"description_no\"\n :label=\"`${t('masterData.field_labels.description.no')} (${t('language.values.no')})`\"\n editor-height=\"20rem\"\n required\n class=\"col-span-2\"\n />\n <MarkdownInput\n v-model=\"value.description.en\"\n for-name=\"description_en\"\n :label=\"`${t('masterData.field_labels.description.no')} (${t('language.values.en')})`\"\n editor-height=\"20rem\"\n class=\"col-span-2\"\n />\n </template>\n <div class=\"col-span-2\">\n <LinkInput\n v-model=\"url\"\n for-name=\"field_labels_link\"\n label=\"masterData.field_labels.link\"\n inline\n hide-text\n hide-description\n can-target-blocks\n cannot-target-external\n />\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\" generic=\"T = string\">\nimport type { CustomText } from '@/api/types';\nimport TextInput from '@/components/forms/InputText.vue';\nimport MarkdownInput from '@/components/forms/InputMarkdown.vue';\nimport Dropdown from '@/components/forms/InputDropdown.vue';\nimport { useNestedMV } from '@/utilities/useInternalState';\nimport { useI18n } from 'vue-i18n';\nimport { toDropdownItems } from './forms/InputDropdown.vue';\nimport {\n allTextSets,\n getTextSetByKey,\n richTextPrefix,\n type TextSetDetails,\n} from '@/api/field_labels';\nimport { computed } from 'vue';\nimport { groupBy } from '@/utilities/groupBy';\n\nconst props = defineProps<{\n modelValue: CustomText;\n allFields: CustomText[];\n}>();\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: typeof props.modelValue): void;\n}>();\n\nconst { t } = useI18n();\n\nconst value = useNestedMV(props, (val) => emit('update:modelValue', val));\n\nconst setOptions = toDropdownItems(\n Object.values(allTextSets).filter((set) => {\n const availableFields = Object.keys(set.fields);\n const fieldsFromDb =\n groupBy(props.allFields, 'group', (item) => item.identifier)[set.group] ??\n [];\n const fieldsFromDbExceptDeprecated = fieldsFromDb.filter((usedField) =>\n availableFields.find((f) => f === usedField),\n );\n return (\n value.value.group === set.group ||\n availableFields.length > fieldsFromDbExceptDeprecated.length\n );\n }),\n (set) => [\n set.group,\n t(`masterData.strings.groups.${set.group.replaceAll('.', '_')}`),\n set,\n ],\n true,\n undefined,\n);\n\nconst existingGroupFields = computed(() =>\n props.allFields.filter((f) => f.group === value.value.group),\n);\n\nfunction getText(value: string): string {\n const isValueItem = value.indexOf('.values.') > -1;\n if (isValueItem) {\n return t(`${value.split('.values.')[0]}.label`) + ': ' + t(value);\n } else {\n return value.replace(richTextPrefix, '');\n }\n}\n\nconst textOptions = computed(() =>\n toDropdownItems(\n value.value.group\n ? Object.entries(getTextSetByKey(value.value.group).fields)\n .map(([key, value]) => ({ key, value }))\n .filter(\n (f) =>\n f.key === value.value.identifier ||\n !existingGroupFields.value.find((e) => e.identifier === f.key),\n )\n : [],\n (item) => [item.key, getText(item.value), item.key],\n true,\n ),\n);\n\nconst selectedGroup = computed<Pick<TextSetDetails, 'group' | 'richtext'>>({\n get() {\n return {\n group: value.value.group,\n richtext: getTextSetByKey(value.value.group).richtext,\n };\n },\n set(newValue) {\n value.value.group = newValue.group;\n },\n});\n</script>\n\n<template>\n <div class=\"flex grid-cols-2 flex-col gap-4 md:grid\">\n <Dropdown\n v-model=\"selectedGroup\"\n label=\"masterData.strings.group\"\n :options=\"setOptions\"\n :getkey=\"(t) => t?.group ?? ''\"\n allow-empty-value\n disable-empty-option\n :disabled=\"!!value.group\"\n />\n <Dropdown\n v-model=\"value.identifier\"\n label=\"masterData.strings.identifier\"\n :options=\"textOptions\"\n :getkey=\"(t) => t\"\n allow-empty-value\n disable-empty-option\n :disabled=\"!!value.identifier\"\n :class=\"{ invisible: !value.group }\"\n />\n <template v-if=\"!selectedGroup.richtext\">\n <div class=\"font-bold\">\n {{ t('language.values.no') }}\n </div>\n <div class=\"font-bold\">\n {{ t('language.values.en') }}\n </div>\n <TextInput\n v-model=\"value.text.no\"\n label=\"masterData.strings.text.no\"\n required\n />\n <TextInput v-model=\"value.text.en\" label=\" \" />\n </template>\n <template v-else>\n <MarkdownInput\n v-model=\"value.text.no\"\n for-name=\"custom_text_no\"\n :label=\"`${t('masterData.strings.text.no')} (${t('language.values.no')})`\"\n editor-height=\"20rem\"\n required\n class=\"col-span-2\"\n />\n <MarkdownInput\n v-model=\"value.text.en\"\n for-name=\"custom_text_en\"\n :label=\"`${t('masterData.strings.text.no')} (${t('language.values.en')})`\"\n editor-height=\"20rem\"\n class=\"col-span-2\"\n />\n </template>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport ContentPage from '@/components/ContentPage.vue';\nimport ButtonComponent from '@/components/ButtonComponent.vue';\nimport ModalComponent from '@/components/ModalComponent.vue';\nimport TextInput from '@/components/forms/InputText.vue';\nimport MarkdownInput from '@/components/forms/InputMarkdown.vue';\nimport Picker from '@/components/forms/InputPicker.vue';\nimport Dropdown, {\n toDropdownItems,\n} from '@/components/forms/InputDropdown.vue';\nimport Checkbox from '@/components/forms/InputCheckbox.vue';\nimport { useI18n } from 'vue-i18n';\nimport {\n type KeyOfRecursive,\n type ApplicationService,\n type AgreementReference,\n type Company,\n type SimpleLookupValue,\n type PartialSome,\n type User,\n getEmptyLocaleValue,\n type FieldLabel,\n type CustomText,\n type FormConfig,\n formConfigOwners,\n type FormConfigDTO,\n type ArchType,\n type InformationClass,\n type AlzFormTopic,\n} from '@/api/types';\nimport { computed, ref, watch, watchEffect } from 'vue';\nimport TableComponent from '@/components/TableComponent.vue';\nimport EditSimpleLookupValue from '@/components/EditSimpleLookupValue.vue';\nimport {\n addMasterDataRow,\n deleteMasterDataRow,\n getMasterData,\n updateMasterDataRow,\n type MdEndpoint,\n} from '@/api/masterdata';\nimport { assertDefined } from '@/utilities/debugUtils';\nimport { mapValueList } from '@/utilities/mapValueList';\nimport { useRoles, useUsers } from '@/api/user';\nimport { sleepUntil } from '@/utilities/sleep';\nimport EditFieldLabel from '@/components/EditFieldLabel.vue';\nimport {\n richTextPrefix,\n type FieldSetKey,\n type TextSetKey,\n} from '@/api/field_labels';\nimport EditCustomText from '@/components/EditCustomText.vue';\nimport { useStoreAbility } from '@/abilities';\n\nconst { t } = useI18n();\nconst { can } = useStoreAbility();\nconst { result: roles } = useRoles();\nconst roleOptions = computed(() =>\n mapValueList(\n roles.value?.map((r) => r.name) ?? [],\n 'userAdmin.manualRoles',\n true,\n ),\n);\n\ntype TableMap = {\n [TKey in MdEndpoint]: {\n endpoint: TKey;\n } & (TKey extends 'application_services'\n ? ApplicationService\n : TKey extends 'agreement_references'\n ? AgreementReference\n : TKey extends 'companies'\n ? Company\n : TKey extends 'infoclasses'\n ? InformationClass\n : TKey extends 'criticalities'\n ? SimpleLookupValue<number>\n : TKey extends 'archtypes'\n ? ArchType\n : TKey extends 'default_alz_roles'\n ? SimpleLookupValue\n : TKey extends 'default_github_teams'\n ? SimpleLookupValue\n : TKey extends 'field_labels'\n ? FieldLabel\n : TKey extends 'strings'\n ? CustomText\n : TKey extends 'form_configurations'\n ? FormConfig\n : TKey extends 'alz_form_topics'\n ? AlzFormTopic\n : never);\n};\n\nconst selectedType = ref<MdEndpoint>('application_services');\nconst _selectedItem = ref<TableMap[MdEndpoint] | null>(null);\nconst selectedItem = computed({\n get() {\n return _selectedItem.value;\n },\n set(value) {\n if (_selectedItem.value && tableData.value) {\n const match = tableData.value.indexOf(_selectedItem.value);\n if (match > -1 && value) {\n tableData.value[match] = value;\n }\n }\n _selectedItem.value = value;\n },\n});\n\nconst _selectedUser = ref<User>();\nconst selectedUser = computed({\n get: () => _selectedUser.value,\n set: (value) => {\n if (selectedItem.value?.endpoint !== 'agreement_references') {\n _selectedUser.value = undefined;\n } else {\n _selectedUser.value = value;\n selectedItem.value.forUserId = value?.id;\n selectedItem.value.forUserFullname = value?.fullName;\n }\n },\n});\nwatch(selectedItem, async () => {\n if (selectedItem.value?.endpoint !== 'agreement_references') {\n selectedUser.value = undefined;\n } else if (\n !!selectedItem.value?.forUserId &&\n selectedUser.value?.id !== selectedItem.value?.forUserId\n ) {\n selectedUser.value = await getUserById(selectedItem.value?.forUserId);\n }\n});\n\nconst users = useUsers();\nasync function searchUsers(query: string): Promise<User[]> {\n if (!users.value) return [];\n const itemLimit = 10;\n const matches =\n query.trim() == ''\n ? users.value\n : users.value.filter((user) =>\n user.fullName?.toLowerCase().includes(query),\n );\n return matches.slice(0, itemLimit);\n}\nasync function getUserById(userId: string | number) {\n await sleepUntil(() => !!users.value, 1000, 10);\n const match = users.value?.find((a) => a.id == userId);\n return match;\n}\n\nconst tableData = ref<TableMap[MdEndpoint][]>();\nconst loadingData = ref(false);\nconst loadFailed = ref(false);\nwatchEffect(async () => {\n loadingData.value = true;\n loadFailed.value = false;\n tableData.value = undefined;\n try {\n tableData.value = await getMasterData<TableMap[MdEndpoint]>(\n selectedType.value,\n );\n tableData.value.map((item) => (item.endpoint = selectedType.value));\n if (selectedType.value === 'form_configurations') {\n (tableData.value as FormConfig[]).map((item) => {\n item.config = JSON.parse((item as FormConfigDTO).jsonValue);\n });\n }\n } catch (err) {\n console.error(err);\n loadFailed.value = true;\n }\n loadingData.value = false;\n});\n\nfunction getKeyProperty<\n TKey extends MdEndpoint,\n TReturn = keyof PartialSome<TableMap[MdEndpoint], 'endpoint'>,\n>(type: TKey): TReturn {\n if (type === 'application_services') {\n return 'applicationUUID' satisfies keyof ApplicationService as TReturn;\n } else if (type === 'agreement_references') {\n return 'agreementNumber' satisfies keyof AgreementReference as TReturn;\n } else if (type === 'companies') {\n return 'shortName' satisfies keyof Company as TReturn;\n } else if (type === 'infoclasses') {\n return 'key' satisfies keyof SimpleLookupValue as TReturn;\n } else if (type === 'criticalities') {\n return 'key' satisfies keyof SimpleLookupValue as TReturn;\n } else if (type === 'archtypes') {\n return 'key' satisfies keyof SimpleLookupValue as TReturn;\n } else if (type === 'field_labels') {\n return 'field' satisfies keyof FieldLabel as TReturn;\n } else if (type === 'strings') {\n return 'identifier' satisfies keyof CustomText as TReturn;\n } else if (type === 'form_configurations') {\n return 'owner' satisfies keyof FormConfigDTO as TReturn;\n } else if (type === 'default_alz_roles') {\n return 'key' satisfies keyof SimpleLookupValue as TReturn;\n } else if (type === 'default_github_teams') {\n return 'key' satisfies keyof SimpleLookupValue as TReturn;\n } else if (type === 'alz_form_topics') {\n return 'key' satisfies keyof AlzFormTopic as TReturn;\n } else {\n throw new Error('Unknown type of masterdata, cannot get key property');\n }\n}\n\nfunction getKey<\n TKey extends MdEndpoint,\n TItem extends PartialSome<TableMap[MdEndpoint], 'endpoint'>,\n>(type: TKey | undefined, item: TItem): string | number | null {\n if (type === undefined) return null;\n const key = item[getKeyProperty(type)];\n if (typeof key === 'string' || typeof key === 'number') return key;\n else return null;\n}\n\nasync function onSave(item: typeof selectedItem.value) {\n if (!tableData.value) return;\n if (!assertDefined(item)) return;\n const endpoint = item.endpoint;\n const itemToSave: PartialSome<TableMap[MdEndpoint], 'endpoint'> = {\n ...item,\n endpoint: undefined,\n };\n if (endpoint === 'form_configurations') {\n (itemToSave as FormConfigDTO).jsonValue = JSON.stringify(\n (itemToSave as FormConfig).config,\n );\n delete (itemToSave as FormConfig).config;\n }\n const keyProp = getKeyProperty(endpoint);\n let key: string | undefined = itemToSave[keyProp];\n if (!key) {\n const result = await addMasterDataRow(endpoint, itemToSave, keyProp);\n (item as typeof itemToSave)[keyProp] = result[keyProp];\n } else {\n if (item.endpoint === 'field_labels' || item.endpoint === 'strings') {\n key = `${item.group}/${key}`;\n }\n await updateMasterDataRow(endpoint, key, itemToSave);\n }\n}\n\nconst columnsMap: {\n [TKey in MdEndpoint]: KeyOfRecursive<TableMap[TKey]>[];\n} = {\n application_services: ['applicationUUID', 'name'],\n agreement_references: ['agreementNumber', 'costCenter', 'forUserId', 'label'],\n companies: ['shortName', 'name'],\n infoclasses: ['key', 'text.no', 'extendedDescription.no'],\n criticalities: ['key', 'text.no', 'extendedDescription.no'],\n archtypes: ['key', 'text.no', 'extendedDescription.no'],\n field_labels: ['group', 'field', 'label.no'],\n strings: ['group', 'identifier', 'text.no'],\n form_configurations: ['owner'],\n default_alz_roles: ['key', 'text.no'],\n default_github_teams: ['key', 'text.no'],\n alz_form_topics: ['label.no'],\n};\n\nconst columns = computed((): KeyOfRecursive<TableMap[MdEndpoint]>[] => {\n return columnsMap[selectedType.value];\n});\n\nfunction getColumnHeader(column: KeyOfRecursive<TableMap[MdEndpoint]>) {\n return t(`masterData.${selectedType.value}.${column}`);\n}\n\nfunction getNewItem(): PartialSome<TableMap[MdEndpoint], 'endpoint'> | null {\n if (selectedType.value === 'application_services') {\n const newItem: ApplicationService = {\n applicationUUID: '',\n name: '',\n };\n return newItem;\n } else if (selectedType.value === 'agreement_references') {\n const newItem: AgreementReference = {\n agreementNumber: '',\n forUserId: '',\n };\n return newItem;\n } else if (selectedType.value === 'companies') {\n const newItem: Company = {\n shortName: '',\n name: '',\n };\n return newItem;\n } else if (selectedType.value === 'infoclasses') {\n const newItem: SimpleLookupValue = {\n key: '',\n text: getEmptyLocaleValue(),\n extendedDescription: getEmptyLocaleValue(),\n };\n return newItem;\n } else if (selectedType.value === 'criticalities') {\n const newItem: SimpleLookupValue<number> = {\n key: -1,\n text: getEmptyLocaleValue(),\n extendedDescription: getEmptyLocaleValue(),\n };\n return newItem;\n } else if (selectedType.value === 'archtypes') {\n const newItem: SimpleLookupValue = {\n key: '',\n text: getEmptyLocaleValue(),\n extendedDescription: getEmptyLocaleValue(),\n };\n return newItem;\n } else if (selectedType.value === 'field_labels') {\n const newItem: FieldLabel = {\n group: '' as FieldSetKey,\n field: '',\n label: getEmptyLocaleValue(),\n tooltip: getEmptyLocaleValue(),\n placeholder: getEmptyLocaleValue(),\n description: getEmptyLocaleValue(),\n };\n return newItem;\n } else if (selectedType.value === 'strings') {\n const newItem: CustomText = {\n group: '' as TextSetKey,\n identifier: '',\n text: getEmptyLocaleValue(),\n };\n return newItem;\n } else if (selectedType.value === 'form_configurations') {\n const newItem: FormConfig & FormConfigDTO = {\n owner: '',\n jsonValue: '',\n config: {},\n };\n return newItem;\n } else if (selectedType.value === 'default_alz_roles') {\n const newItem: SimpleLookupValue = {\n key: '',\n text: getEmptyLocaleValue(),\n extendedDescription: getEmptyLocaleValue(),\n };\n return newItem;\n } else if (selectedType.value === 'default_github_teams') {\n const newItem: SimpleLookupValue = {\n key: '',\n text: getEmptyLocaleValue(),\n extendedDescription: getEmptyLocaleValue(),\n };\n return newItem;\n } else if (selectedType.value === 'alz_form_topics') {\n const newItem: AlzFormTopic = {\n key: crypto.randomUUID(),\n label: getEmptyLocaleValue(),\n recipient: '',\n };\n return newItem;\n } else {\n return null;\n }\n}\n\nfunction onCreateButtonClick() {\n if (!tableData.value) return null;\n const item = getNewItem();\n if (!item) return null;\n tableData.value.push(item as TableMap[MdEndpoint]);\n item.endpoint = selectedType.value;\n return item;\n}\nasync function onDelete(itemToDelete: TableMap[MdEndpoint]) {\n let key = getKey(selectedType.value, itemToDelete);\n if (!key) return;\n if (\n itemToDelete.endpoint === 'field_labels' ||\n itemToDelete.endpoint === 'strings'\n ) {\n key = `${itemToDelete.group}/${key}`;\n }\n await deleteMasterDataRow(selectedType.value, key);\n}\n\nconst typeOptions = mapValueList(\n (Object.keys(columnsMap) as MdEndpoint[]).filter((col: MdEndpoint) => {\n if (col === 'agreement_references') {\n return can('manage', 'AgreementReference');\n } else {\n return can('manage', 'MasterData');\n }\n }),\n 'masterData.selectedType',\n);\nconst formConfigOwnerOptions = toDropdownItems(\n formConfigOwners,\n (item) => [item, item],\n true,\n);\n\nconst jsonValue = ref<string>();\nconst replaceExisting = ref(false);\nfunction importJson() {\n if (!assertDefined(jsonValue.value)) return;\n let toImport: typeof tableData.value;\n try {\n toImport = JSON.parse(jsonValue.value);\n if (!toImport) return;\n } catch (err) {\n console.error(err);\n return;\n }\n for (const row of toImport) {\n const keyProp = getKeyProperty(selectedType.value);\n const key = row[keyProp];\n if (tableData.value?.find((r) => r[keyProp] === key)) {\n if (replaceExisting.value) {\n tableData.value = tableData.value?.filter((r) => r[keyProp] !== key);\n } else {\n continue;\n }\n }\n row.endpoint = selectedType.value;\n if (selectedType.value === 'form_configurations') {\n (row as FormConfig).config = JSON.parse((row as FormConfigDTO).jsonValue);\n delete (row as Partial<FormConfigDTO>).jsonValue;\n }\n tableData.value?.push(row);\n onSave(row); // Just trigger async function, let each run by itself\n }\n jsonValue.value = undefined;\n}\n</script>\n\n<template>\n <ContentPage\n :title=\"t('header.items.masterdataEdit')\"\n class=\"bg-gnist-gray-light-light\"\n >\n <template #list>\n <div class=\"absolute z-10 hidden w-full md:block\">\n <div\n class=\"gnist-page-width grid h-8 w-full grid-flow-col justify-end gap-4 px-4\"\n >\n <ButtonComponent\n text=\"admin.blockProduction.importExport.header\"\n icon=\"import_export\"\n icon-class=\"text-xl\"\n chrome\n type=\"special\"\n class=\"tooltip-bottom h-6 self-center\"\n @click.prevent=\"jsonValue = JSON.stringify(tableData)\"\n />\n <ModalComponent\n size=\"big\"\n :show-modal=\"jsonValue !== undefined\"\n title=\"admin.blockProduction.importExport.header\"\n primary-button-type=\"danger\"\n button-text=\"admin.blockProduction.importExport.import\"\n :title-upper-case=\"false\"\n @close=\"jsonValue = undefined\"\n @handle-click=\"importJson\"\n >\n <TextInput\n v-model=\"jsonValue\"\n label=\"admin.blockProduction.importExport.JSON\"\n required\n multiline\n :rows=\"20\"\n />\n </ModalComponent>\n </div>\n </div>\n </template>\n <section class=\"py-8\">\n <div class=\"w-full max-w-full\">\n <div v-if=\"loadFailed\" class=\"alert alert-error\">\n {{ t('masterData.fail') }}\n </div>\n <div v-if=\"typeOptions.length === 0\" class=\"alert alert-warning\">\n {{ t('masterData.notAvailable') }}\n </div>\n <TableComponent\n v-else\n size=\"table-xs\"\n :rows=\"tableData\"\n show-spinner\n i18n-key=\"tagEditor.usageColumns\"\n :get-key=\"(item) => getKey(selectedType, item) ?? 'uknown_key'\"\n :columns=\"columns\"\n :get-column-header=\"getColumnHeader\"\n :sort-fields=\"columns\"\n :default-sortfield=\"columns[1]\"\n :create=\"{\n idProperty: getKeyProperty(selectedType),\n onCreateClick: onCreateButtonClick,\n }\"\n :edit=\"{\n onSave: async () => await onSave(selectedItem),\n isSelectedItemValid: true,\n title:\n selectedType === 'infoclasses' ||\n selectedType === 'criticalities' ||\n selectedType === 'archtypes'\n ? t(`masterData.selectedType.values.${selectedType}`)\n : undefined,\n modalProps: { size: 'big' },\n }\"\n :delete=\"{\n onDelete,\n getIdentificator: (row) =>\n getKey(selectedType, row)?.toString() ?? '?',\n }\"\n initial-row-class=\"my-6 flex justify-between\"\n @remove:row=\"\n (item) => {\n if (!item) return;\n const key = getKey(selectedType, item);\n tableData =\n tableData?.filter((i) => getKey(selectedType, i) !== key) ?? [];\n }\n \"\n @update:selected-item=\"\n (item) => (selectedItem = item as TableMap[MdEndpoint])\n \"\n >\n <template #beforeCreate>\n <Dropdown\n v-model=\"selectedType\"\n label=\"masterData.selectedType.title\"\n :options=\"typeOptions\"\n :getkey=\"(t) => t\"\n :disabled=\"loadingData\"\n class=\"[&>label]:flex-row [&>label]:gap-2 [&_.GnistInputLabel]:min-w-fit\"\n />\n </template>\n <template #columns=\"{ item: row }\">\n <template v-if=\"row.endpoint === 'application_services'\">\n <td>\n {{ row.applicationUUID }}\n </td>\n <td>\n {{ row.name }}\n </td>\n </template>\n <template v-else-if=\"row.endpoint === 'agreement_references'\">\n <td>\n {{ row.agreementNumber }}\n </td>\n <td>\n {{ row.costCenter }}\n </td>\n <td>\n {{ row.forUserFullname }}\n </td>\n <td>\n {{ row.label }}\n </td>\n </template>\n <template v-else-if=\"row.endpoint === 'companies'\">\n <td>\n {{ row.shortName }}\n </td>\n <td>\n {{ row.name }}\n </td>\n </template>\n <template\n v-else-if=\"\n row.endpoint === 'infoclasses' ||\n row.endpoint === 'criticalities' ||\n row.endpoint === 'archtypes' ||\n row.endpoint === 'default_alz_roles' ||\n row.endpoint === 'default_github_teams'\n \"\n >\n <td>\n {{ row.key }}\n </td>\n <td>\n {{ row.text.no }}\n </td>\n <td>\n {{ row.extendedDescription.no }}\n </td>\n </template>\n <template v-else-if=\"row.endpoint === 'field_labels'\">\n <td>\n {{\n t(\n `masterData.field_labels.groups.${row.group?.replaceAll('.', '_')}`,\n )\n }}\n </td>\n <td>\n {{ t(`${row.group}.${row.field}.label`) }}\n </td>\n <td>\n {{ row.label.no }}\n </td>\n </template>\n <template v-else-if=\"row.endpoint === 'strings'\">\n <td>\n {{\n t(\n `masterData.strings.groups.${row.group?.replaceAll('.', '_')}`,\n )\n }}\n </td>\n <td>\n {{\n t(\n `${row.group.replace(richTextPrefix, '')}.${row.identifier}`,\n )\n }}\n </td>\n <td>\n {{ row.text.no.substring(0, 50) }}\n {{ row.text.no.length > 50 ? '...' : '' }}\n </td>\n </template>\n <template v-else-if=\"row.endpoint === 'form_configurations'\">\n <td>{{ row.owner }}</td>\n </template>\n <template v-else-if=\"row.endpoint === 'alz_form_topics'\">\n <td>{{ row.label.no }}</td>\n </template>\n <template v-else>\n <td>Ukjent</td>\n </template>\n </template>\n <template #editor>\n <template v-if=\"selectedItem?.endpoint === 'application_services'\">\n <TextInput\n v-model=\"selectedItem.applicationUUID\"\n label=\"masterData.application_services.applicationUUID\"\n required\n />\n <TextInput\n v-model=\"selectedItem.name\"\n label=\"masterData.application_services.name\"\n required\n />\n </template>\n <template\n v-else-if=\"selectedItem?.endpoint === 'agreement_references'\"\n >\n <TextInput\n v-model=\"selectedItem.agreementNumber\"\n label=\"masterData.agreement_references.agreementNumber\"\n required\n />\n <TextInput\n v-model=\"selectedItem.costCenter\"\n label=\"masterData.agreement_references.costCenter\"\n required\n />\n <Picker\n v-model=\"selectedUser\"\n label=\"masterData.agreement_references.forUserId\"\n :getkey=\"(val) => val?.id ?? ''\"\n :gettext=\"(val) => val?.fullName ?? ''\"\n :taglistclass=\"[\n 'w-full grow [&>*]:w-full [&>*]:justify-between',\n ]\"\n :filter=\"searchUsers\"\n :get-by-id=\"getUserById\"\n :max-items=\"1\"\n required\n />\n <TextInput\n v-model=\"selectedItem.label\"\n label=\"masterData.agreement_references.label\"\n />\n </template>\n <template v-else-if=\"selectedItem?.endpoint === 'companies'\">\n <TextInput\n v-model=\"selectedItem.shortName\"\n label=\"masterData.companies.shortName\"\n required\n />\n <TextInput\n v-model=\"selectedItem.name\"\n label=\"masterData.companies.name\"\n required\n />\n </template>\n <template v-else-if=\"selectedItem?.endpoint === 'infoclasses'\">\n <EditSimpleLookupValue v-model=\"selectedItem\">\n <Checkbox\n v-model=\"selectedItem.sandbox\"\n label=\"masterData.infoclasses.sandbox\"\n direction=\"horizontal\"\n mode=\"toggle\"\n />\n </EditSimpleLookupValue>\n </template>\n <template v-else-if=\"selectedItem?.endpoint === 'criticalities'\">\n <EditSimpleLookupValue v-model=\"selectedItem\" />\n </template>\n <template v-else-if=\"selectedItem?.endpoint === 'archtypes'\">\n <EditSimpleLookupValue v-model=\"selectedItem\">\n <Dropdown\n v-model=\"selectedItem.roles\"\n label=\"masterData.archtypes.roles\"\n :options=\"roleOptions\"\n :getkey=\"(t) => t ?? ''\"\n allow-empty-value\n disable-empty-option\n :multiple=\"{ emptyLabel: '' }\"\n />\n <TextInput\n v-model=\"selectedItem.targetRepo\"\n label=\"masterData.archtypes.repo\"\n placeholder=\"masterData.archtypes.repoPlaceholder\"\n />\n </EditSimpleLookupValue>\n </template>\n <template v-else-if=\"selectedItem?.endpoint === 'field_labels'\">\n <EditFieldLabel\n v-model=\"selectedItem\"\n :all-fields=\"tableData as FieldLabel[]\"\n />\n </template>\n <template v-else-if=\"selectedItem?.endpoint === 'strings'\">\n <EditCustomText\n v-model=\"selectedItem\"\n :all-fields=\"tableData as CustomText[]\"\n />\n </template>\n <template\n v-else-if=\"selectedItem?.endpoint === 'form_configurations'\"\n >\n <Dropdown\n v-model=\"selectedItem.owner\"\n label=\"masterData.form_configurations.owner\"\n :options=\"formConfigOwnerOptions\"\n :getkey=\"(t) => t ?? ''\"\n allow-empty-value\n disable-empty-option\n :disabled=\"!!selectedItem.owner\"\n />\n <template v-if=\"selectedItem.owner === ''\">\n <!-- AWAITING FORM TYPE SELECTION-->\n </template>\n <template v-else-if=\"selectedItem.owner === 'AzureLandingZones'\">\n <TextInput\n v-model=\"selectedItem.config.location\"\n label=\"location\"\n required\n />\n <TextInput\n v-model=\"selectedItem.config.sandboxApplicationUUID\"\n label=\"default_address_space\"\n required\n />\n <TextInput\n v-model=\"selectedItem.config.workload\"\n label=\"workload\"\n required\n />\n <TextInput\n v-model=\"selectedItem.config.sandboxApplicationUUID\"\n label=\"Sandbox ApplicationUUID\"\n required\n />\n <MarkdownInput\n v-model=\"selectedItem.config.pr_template\"\n for-name=\"pr_template\"\n label=\"pr_template\"\n :description=\"'### Placeholders\\n* `{{FormUrl}}`: Url to edit this PR and the order form\\n* `{{UserInfo}}`: Information about the current user\\n * `{{LastUpdated}}`: Current date and time (when the template is applied)'\"\n md-description\n editor-height=\"20rem\"\n class=\"col-span-2\"\n />\n </template>\n <template v-else>\n {{ t('masterData.form_configurations.unknownForm') }}\n </template>\n </template>\n <template\n v-else-if=\"selectedItem?.endpoint === 'default_alz_roles'\"\n >\n <EditSimpleLookupValue v-model=\"selectedItem\" />\n </template>\n <template\n v-else-if=\"selectedItem?.endpoint === 'default_github_teams'\"\n >\n <EditSimpleLookupValue v-model=\"selectedItem\" />\n </template>\n <template v-else-if=\"selectedItem?.endpoint === 'alz_form_topics'\">\n <TextInput\n v-model=\"selectedItem.label.no\"\n :label=\"`${t('language.values.no')} ${t('masterData.alz_form_topics.label.no')}`\"\n required\n />\n <TextInput\n v-model=\"selectedItem.label.en\"\n :label=\"`${t('language.values.en')} ${t('masterData.alz_form_topics.label.no')}`\"\n required\n />\n <TextInput\n v-model=\"selectedItem.recipient\"\n label=\"masterData.alz_form_topics.recipient\"\n required\n />\n </template>\n <template v-else>\n {{ t('masterData.unknownDetailsType') }}\n <pre>\n {{ JSON.stringify(selectedItem) }}\n </pre>\n </template>\n </template>\n </TableComponent>\n </div>\n </section>\n </ContentPage>\n</template>\n","import { apiUrl } from '@/config';\nimport {\n type AlzSystem,\n type ExtendedAlzSystemDefinitionDTO,\n type AlzSystemDefinitionItem,\n type AlzSystemDefinitionDTO,\n} from './types';\nimport {\n compose,\n composeWithRefresh,\n type ComposableResult,\n} from './composable';\nimport { computed, type Ref } from 'vue';\nimport { throwErrorPageTrigger } from '@/utilities/throwErrorPageTrigger';\nimport {\n archTypes,\n companies,\n criticalities,\n informationClasses,\n} from './masterdata';\nimport { useCurrentUser } from './auth';\nimport { addMonths } from 'date-fns';\n\nconst githubUrl = apiUrl + '/github';\n\nexport function useMyAlzSystems(\n showAll: boolean,\n): ComposableResult<AlzSystemDefinitionItem[]> {\n return compose(getMyAlzSystems(showAll));\n}\n\nasync function getMyAlzSystems(\n showAll: boolean,\n): Promise<AlzSystemDefinitionItem[]> {\n const response = await fetch(\n `${githubUrl}/alz${showAll ? '' : '/my_systems'}`,\n {\n method: 'GET',\n credentials: 'include',\n },\n );\n throwErrorPageTrigger(response);\n if (!response.ok) throw new Error(await response.text());\n return await response.json();\n}\n\nexport function useAlzSystem(\n systemId: string | undefined,\n isSandbox: boolean,\n): ComposableResult<AlzSystem> {\n const composable: ComposableResult<ExtendedAlzSystemDefinitionDTO> = compose(\n !systemId ? null : getAlzVendingFilesForApplication(systemId),\n );\n const user = useCurrentUser();\n const data = computed((): AlzSystem => {\n if (!composable.result.value) {\n return {\n isSandboxSystem: isSandbox,\n name: '',\n owner: user.value\n ? {\n objectId: user.value.issuerUserId,\n displayName:\n user.value.fullName ??\n `${user.value.firstName} ${user.value.lastName}`,\n }\n : undefined,\n workloadName: '',\n endDate: isSandbox ? addMonths(new Date(), 6) : undefined,\n environments: [],\n repos: [],\n customProducts: [],\n };\n }\n for (const env of composable.result.value.environments) {\n env.existingFileIdentifier ??= env.fileIdentifier;\n }\n return {\n ...composable.result.value,\n isSandboxSystem: composable.result.value.systemFileData.sandbox,\n name: composable.result.value.systemFileData.name,\n systemId: composable.result.value.systemFileData.id,\n service: composable.result.value.systemFileData.application_uuid\n ? {\n applicationUUID:\n composable.result.value.systemFileData.application_uuid,\n }\n : undefined,\n company: companies.result.value?.find(\n (c) => c.shortName === composable.result.value?.systemFileData.hf,\n ),\n agreementNumber: composable.result.value.agreementNumber\n ? {\n agreementNumber: composable.result.value.agreementNumber,\n }\n : undefined,\n crit: criticalities.result.value?.find(\n (c) => c.key === composable.result.value?.crit,\n ),\n infoClass: informationClasses.result.value?.find(\n (c) => c.key === composable.result.value?.infoClass,\n ),\n archType: archTypes.result.value?.find(\n (c) => c.key === composable.result.value?.archType,\n ),\n ops: composable.result.value!.systemFileData.operations_model,\n opsCi: composable.result.value.systemFileData.operations_ci_uuid,\n repos: composable.result.value.systemFileData.repositories ?? [],\n customProducts: [], // TODO: actually get data from backend\n };\n });\n return { ...composable, result: data };\n}\n\nasync function getAlzVendingFilesForApplication(\n systemId: string,\n): Promise<ExtendedAlzSystemDefinitionDTO> {\n const response = await fetch(`${githubUrl}/alz/${systemId}`, {\n method: 'GET',\n credentials: 'include',\n });\n throwErrorPageTrigger(response);\n if (!response.ok) throw new Error(await response.text());\n return await response.json();\n}\n\nexport async function createLzSystem(\n dto: Omit<AlzSystemDefinitionDTO, 'systemId'>,\n): Promise<AlzSystemDefinitionDTO> {\n const response = await fetch(`${githubUrl}/alz`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify(dto),\n });\n if (!response.ok) throw new Error(await response.text());\n return await response.json();\n}\nexport async function updateLzSystem(\n systemId: string,\n dto: Omit<AlzSystemDefinitionDTO, 'systemId'>,\n) {\n const response = await fetch(`${githubUrl}/alz/${systemId}`, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify(dto),\n });\n if (!response.ok) throw new Error(await response.text());\n}\n\nexport function useTeamGroupsForSystem(\n systemId: Ref<string | undefined>,\n): ComposableResult<{ [repo: string]: string }> {\n return composeWithRefresh(\n () => (systemId.value ? getTeamGroupsForSystem(systemId.value) : {}),\n systemId,\n );\n}\n\nasync function getTeamGroupsForSystem(\n systemId: string,\n): Promise<{ [repo: string]: string }> {\n const response = await fetch(`${githubUrl}/gh/${systemId}/teamgroups`, {\n method: 'GET',\n credentials: 'include',\n });\n if (!response.ok) throw new Error(await response.text());\n return await response.json();\n}\n","<script setup lang=\"ts\">\nimport MaterialIcon from '@/components/MaterialIcon.vue';\nimport IconLink from '@/components/IconLink.vue';\nimport { useRouter } from 'vue-router';\nimport {\n useDynamicLabelTexts,\n type IInputLabelProps,\n} from './forms/InputLabel.vue';\n\nconst props =\n defineProps<\n Pick<\n IInputLabelProps,\n | 'label'\n | 'dynamicTextKey'\n | 'tooltip'\n | 'placeholder'\n | 'description'\n | 'forName'\n | 'link'\n | 'tooltipClass'\n >\n >();\n\nconst texts = useDynamicLabelTexts(props);\nconst router = useRouter();\nconst linkTarget = props.link ? router.resolve(props.link) : undefined;\n</script>\n\n<template>\n <fieldset class=\"border p-4 ps-4\">\n <legend class=\"flex\">\n <h2>\n {{ texts.label }}\n </h2>\n <span\n v-if=\"texts.tooltip\"\n :data-tip=\"texts.tooltip\"\n class=\"tooltip static ml-1 whitespace-break-spaces font-normal sm:relative\"\n :class=\"tooltipClass\"\n >\n <MaterialIcon\n class=\"text-2xl hover:text-secondary\"\n :aria-describedby=\"`desc_${texts.forName}`\"\n >\n info\n </MaterialIcon>\n </span>\n <span\n v-if=\"linkTarget\"\n class=\"static ml-1 whitespace-break-spaces font-normal sm:relative\"\n >\n <IconLink\n label=\"buttons.external_help\"\n icon=\"open_in_new\"\n icon-class=\"text-2xl hover:text-gnist-gray\"\n :aria-describedby=\"`desc_${texts.forName}`\"\n :to=\"linkTarget\"\n target=\"_blank\"\n />\n </span>\n <span v-if=\"texts.tooltip\" :id=\"`desc_${texts.forName}`\" class=\"sr-only\">\n {{ texts.tooltip }}\n </span>\n </legend>\n <slot />\n </fieldset>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from 'vue-i18n';\nimport InputLabel, {\n useDynamicLabelTexts,\n type IInputLabelProps,\n} from './InputLabel.vue';\nimport { computed } from 'vue';\n\nconst props = defineProps<\n IInputLabelProps & {\n modelValue?: Date | string | null;\n disabled?: boolean;\n /** Used for connecting label and input */\n forName?: string;\n inputClass?: string | string[];\n min?: Date;\n max?: Date;\n }\n>();\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: Date): void;\n}>();\nconst { t } = useI18n();\nconst value = computed(() =>\n !props.modelValue\n ? null\n : new Date(props.modelValue)?.toISOString().split('T')[0],\n);\n\nfunction onChange(val: string) {\n const parsedVal = new Date(val);\n emit('update:modelValue', parsedVal);\n}\nconst texts = useDynamicLabelTexts(props);\n</script>\n<template>\n <label :for=\"forName\" class=\"flex flex-col whitespace-nowrap\">\n <InputLabel v-bind=\"props\" />\n <input\n :id=\"forName\"\n :value=\"value\"\n type=\"date\"\n :name=\"forName\"\n :title=\"texts.label\"\n class=\"my-2 grow border p-2\"\n :class=\"inputClass\"\n :required=\"required\"\n :placeholder=\"t(texts.placeholder ?? '')\"\n :disabled=\"disabled\"\n :min=\"\n min?.toISOString().split('T')[0] ??\n new Date().toISOString().split('T')[0]\n \"\n :max=\"max?.toISOString().split('T')[0]\"\n @input=\"(ev) => onChange((ev.target as HTMLInputElement).value)\"\n />\n </label>\n</template>\n","<script setup lang=\"ts\" generic=\"T = string\">\nimport { batRoleTypes, type AlzSystem, type CustomProduct } from '@/api/types';\nimport TextInput from '@/components/forms/InputText.vue';\nimport { useNestedMV } from '@/utilities/useInternalState';\nimport { useI18n } from 'vue-i18n';\nimport TableComponent from './TableComponent.vue';\nimport Checkbox from './forms/InputCheckbox.vue';\nimport ButtonComponent from './ButtonComponent.vue';\nimport Dropdown, { toDropdownItems } from './forms/InputDropdown.vue';\nimport { computed, ref, watch } from 'vue';\nimport { mapValueList } from '@/utilities/mapValueList';\nimport { assertDefined } from '@/utilities/debugUtils';\nimport { translateStringOrLocale } from '@/i18n';\nimport { standardGithubTeams, standardLzRoles } from '@/api/masterdata';\nimport type { allFieldSets } from '@/api/field_labels';\nimport type { IInputLabelProps } from './forms/InputLabel.vue';\nimport { useTeamGroupsForSystem } from '@/api/github';\n\nconst props = defineProps<{\n modelValue: AlzSystem;\n getDynamicLabelProps: <\n TGroup extends keyof typeof allFieldSets,\n TKey extends keyof (typeof allFieldSets)[TGroup]['fields'],\n >(\n group: TGroup,\n key: TKey,\n ) => Pick<IInputLabelProps, 'dynamicTextKey' | 'mdDescription' | 'link'>;\n}>();\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: typeof props.modelValue): void;\n}>();\n\nconst { t } = useI18n();\n\nconst value = useNestedMV(props, (val) => emit('update:modelValue', val));\n\nconst systemId = computed(() => value.value.systemId);\n\nconst { result: systemTeamGroups } = useTeamGroupsForSystem(systemId);\n\nconst environmentList = computed(() =>\n toDropdownItems(\n value.value.environments ?? [],\n (c) => [c.fileIdentifier, c.name],\n true,\n ),\n);\nconst repoList = computed(() =>\n toDropdownItems(value.value.repos ?? [], (c) => [c.name, c.name], true),\n);\n\nconst lzRoleOptions = toDropdownItems(\n standardLzRoles.result.value,\n (role) => [role.key, translateStringOrLocale(role.text).value],\n true,\n);\nconst ghTeamOptions = computed(() =>\n Object.fromEntries(\n Object.entries(systemTeamGroups.value ?? {}).map(([repo, group]) => [\n repo,\n toDropdownItems(\n standardGithubTeams.result.value?.map((team) => `${group}-${team.key}`),\n (team) => [team, team],\n ),\n ]),\n ),\n);\n\ntype EnvironmentRoleData = {\n name: string;\n roles: { name: string; canOrder: boolean }[];\n};\nconst envRoles = ref<EnvironmentRoleData[]>([]);\nfunction change(envName: string, role: string, canOrder: boolean) {\n const env = value.value.environments.find((e) => e.name === envName);\n if (!assertDefined(env)) return;\n env.orderRoles ??= [];\n if (canOrder && !env.orderRoles.find((r) => r === role)) {\n env.orderRoles.push(role);\n } else if (!canOrder) {\n env.orderRoles = env.orderRoles.filter((r) => r !== role);\n }\n}\nwatch(\n () => value.value,\n () => {\n const newList: EnvironmentRoleData[] = [];\n for (const env of value.value.environments) {\n let data = envRoles.value.find((e) => e.name === env.name);\n data ??= {\n name: env.name,\n roles: [],\n };\n data.roles =\n standardLzRoles.result.value?.map((role) => ({\n name: role.key,\n canOrder: !!env.orderRoles?.find((r) => r === role.key),\n })) ?? [];\n newList.push(data);\n }\n envRoles.value = newList;\n },\n { deep: true, immediate: true },\n);\nconst roleTypeOptions = mapValueList(\n batRoleTypes,\n 'orders.bat.fields.productColumns.type',\n true,\n);\nwatch(\n value.value,\n () => {\n if (value.value.customProducts.length > 0) return;\n value.value.customProducts.push({\n title: 'Batprodukt#1',\n roles: [\n {\n type: 'lz_role',\n roleId: 'reader',\n objectId: 'prediksjonbemanningakuttmottakdev.json',\n },\n {\n type: 'lz_role',\n roleId: 'contributor',\n objectId: 'prediksjonbemanningakuttmottakdev.json',\n },\n {\n type: 'lz_role',\n roleId: 'reader',\n objectId: 'prediksjonbemanningakuttmottaktest.json',\n },\n ],\n });\n },\n { immediate: true },\n);\n\nfunction deleteCustomProduct(product: CustomProduct) {\n const index = value.value.customProducts.indexOf(product);\n if (index === -1) {\n console.error(`Failed to find index of ${product.title}`);\n return;\n }\n value.value.customProducts.splice(index, 1);\n}\n</script>\n\n<template>\n <div class=\"alert alert-warning\">\n DETTE ER EN PROTOTYPE OG HAR INGEN STØTTE I BACKEND!\n </div>\n <div class=\"mt-8 flex gap-32 bg-gnist-gray-light p-4\">\n <div class=\"flex flex-col gap-8\">\n <h3 class=\"whitespace-nowrap\">{{ t('orders.bat.roleProducts') }}</h3>\n <div\n v-for=\"(lz, idx) in envRoles\"\n :key=\"idx\"\n class=\"border border-black p-2\"\n >\n <h4 class=\"my-2 mb-4\">\n {{ t('orders.bat.standardRoles') }}\n {{ lz.name.toUpperCase() }}\n </h4>\n <TableComponent\n :rows=\"lz.roles\"\n :get-key=\"(row) => row.name\"\n i18n-key=\"orders.bat.fields.roleColumns\"\n uses-dynamic-text-keys\n :columns=\"['name', 'canOrder']\"\n >\n <template #columns=\"{ item }\">\n <td>\n {{ item.name }}\n </td>\n <td>\n <Checkbox\n :model-value=\"item.canOrder\"\n v-bind=\"\n getDynamicLabelProps('batFieldKeys', 'roleColumns.canOrder')\n \"\n direction=\"vertical\"\n mode=\"toggle\"\n sr-only\n @update:model-value=\"(val) => change(lz.name, item.name, val)\"\n />\n </td>\n </template>\n </TableComponent>\n </div>\n </div>\n <div class=\"flex flex-col gap-8\">\n <h3>{{ t('orders.bat.customProducts') }}</h3>\n <ButtonComponent\n text=\"orders.bat.buttons.values.addProduct\"\n class=\"self-start\"\n @click=\"value.customProducts.push({ title: '', roles: [] })\"\n />\n <div\n v-for=\"(product, idx) in value.customProducts\"\n :key=\"idx\"\n class=\"border border-black p-2\"\n >\n <ButtonComponent\n icon=\"delete\"\n text=\"orders.bat.buttons.values.deleteProduct\"\n class=\"absolute right-0 z-10\"\n type=\"danger\"\n @click=\"deleteCustomProduct(product)\"\n />\n\n <TextInput\n v-model=\"product.title\"\n v-bind=\"getDynamicLabelProps('batFieldKeys', 'customProduct')\"\n required\n />\n <TableComponent\n :rows=\"product.roles\"\n :get-key=\"(row) => `${row.objectId}.${row.roleId}`\"\n i18n-key=\"orders.bat.fields.productColumns\"\n uses-dynamic-text-keys\n :columns=\"['type', 'objectId', 'roleId']\"\n >\n <template #columns=\"{ item }\">\n <td>\n <Dropdown\n v-model=\"item.type\"\n v-bind=\"\n getDynamicLabelProps('batFieldKeys', 'productColumns.type')\n \"\n :options=\"roleTypeOptions\"\n :getkey=\"(t) => t\"\n required\n sr-only\n />\n </td>\n <td>\n <Dropdown\n v-model=\"item.objectId\"\n v-bind=\"\n getDynamicLabelProps(\n 'batFieldKeys',\n 'productColumns.objectId',\n )\n \"\n :options=\"item.type === 'lz_role' ? environmentList : repoList\"\n :getkey=\"(t) => t\"\n required\n sr-only\n />\n </td>\n <td>\n <Dropdown\n v-if=\"item.objectId\"\n v-model=\"item.roleId\"\n v-bind=\"\n getDynamicLabelProps('batFieldKeys', 'productColumns.roleId')\n \"\n :options=\"\n item.type === 'lz_role'\n ? lzRoleOptions\n : (ghTeamOptions[item.objectId] ?? [])\n \"\n :getkey=\"(t) => t\"\n required\n sr-only\n />\n </td>\n </template>\n </TableComponent>\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport ContentPage from '../components/ContentPage.vue';\nimport AlzSubNav from '@/components/AlzSubNav.vue';\nimport ButtonComponent from '@/components/ButtonComponent.vue';\nimport { ParagraphShimmer } from 'vue3-shimmer';\nimport TextInput from '@/components/forms/InputText.vue';\nimport Picker from '@/components/forms/InputPicker.vue';\nimport Dropdown, {\n toDropdownItems,\n} from '@/components/forms/InputDropdown.vue';\nimport Checkbox from '@/components/forms/InputCheckbox.vue';\nimport TableComponent from '@/components/TableComponent.vue';\nimport LoadingSpinner from '@/components/LoadingSpinner.vue';\nimport { computed, ref, watch, watchEffect } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { useI18n } from 'vue-i18n';\nimport {\n alzOperationTypes,\n type AgreementReference,\n type ApplicationService,\n type AlzEnvironment,\n type Repo,\n type AlzSystem,\n type FieldLabel,\n type AlzSystemDefinitionDTO,\n alzEnvironmentTypes,\n alzSandboxEnvironmentTypes,\n testDataTypes,\n} from '@/api/types';\nimport { translateStringOrLocale } from '@/i18n';\nimport { createLzSystem, updateLzSystem, useAlzSystem } from '@/api/github';\nimport { sleepUntil } from '@/utilities/sleep';\nimport {\n myAgreementReferences,\n applicationServices,\n archTypes,\n companies,\n criticalities,\n informationClasses,\n useDynamicText,\n adminAgreementReferences,\n} from '@/api/masterdata';\nimport { deepClone } from '@/utilities/deepClone';\nimport { throwOnError } from '@/api/composable';\nimport {\n allFieldSets,\n allRichTextSets,\n allSimpleTextSets,\n} from '@/api/field_labels';\nimport MarkdownRenderer from '@/components/block/MarkdownRenderer.vue';\nimport AdvancedFieldset from '@/components/AdvancedFieldset.vue';\nimport { mapValueList } from '@/utilities/mapValueList';\nimport MaterialIcon from '@/components/MaterialIcon.vue';\nimport ModalComponent from '@/components/ModalComponent.vue';\nimport { useValidationTracking } from '@/utilities/useValidationTracking';\nimport InputDate from '@/components/forms/InputDate.vue';\nimport { addMonths } from 'date-fns';\nimport { useStoreAbility, useSubject } from '@/abilities';\nimport type { IInputLabelProps } from '@/components/forms/InputLabel.vue';\nimport AlzBatProductEditor from '@/components/AlzBatProductEditor.vue';\n\nconst { t } = useI18n();\nconst { can } = useStoreAbility();\n\nconst router = useRouter();\nconst route = useRoute();\nconst systemId = route.params.systemId as string | undefined;\n\nconst isEdit = !!systemId;\n\nconst alzFieldKeys = allFieldSets.alzFieldKeys.fields;\nconst batFieldKeys = allFieldSets.batFieldKeys.fields;\nconst alzTextKeys = allRichTextSets.alzRichTextKeys.fields;\n\nconst { loaded: textLoaded, result: texts } = useDynamicText(\n [allFieldSets.alzFieldKeys.group, allFieldSets.batFieldKeys.group],\n [allSimpleTextSets.alzTextKeys.group, allSimpleTextSets.batTextKeys.group],\n allRichTextSets.alzRichTextKeys.group,\n router,\n);\n\nconst richTextLookup = computed(() => {\n const lookup: { [key: string]: string } = {};\n for (const txt of texts.value?.dbRichtext ?? []) {\n lookup[`${txt.group}.${txt.identifier}`] = translateStringOrLocale(\n txt.text,\n ).value;\n }\n return lookup;\n});\nconst dbFieldLookup = computed(() => {\n const lookup: { [key: string]: FieldLabel } = {};\n for (const fld of texts.value?.dbFieldLabels ?? []) {\n lookup[`${fld.group}.${fld.field}`] = fld;\n }\n return lookup;\n});\n\nconst { result: _landingzone, loaded } = throwOnError(\n useAlzSystem(systemId, !!route.query.sandbox),\n);\n\nconst system = ref<AlzSystem | null>(null);\nwatch(\n _landingzone,\n () => {\n system.value = deepClone(_landingzone.value);\n // If loading an existing system\n if (system.value?.isSandboxSystem && system.value?.systemId) {\n sandbox_env.value = system.value.environments[0];\n sandbox_env.value.sandbox_repo_name = system.value.repos?.[0]?.name;\n }\n },\n { immediate: true },\n);\n\nconst submitting = ref(false);\nconst submitted = ref(false);\nconst submitFailed = ref(false);\nasync function submitOrder(): Promise<void> {\n if (!system.value) {\n throw new Error('No data?!?!');\n }\n if (!isValid.value) {\n throw new Error('Form is not valid!');\n }\n const environments = sandbox_env.value\n ? [sandbox_env.value]\n : system.value.environments;\n for (const env of environments) {\n if (env.existingFileIdentifier) {\n env.fileIdentifier = env.existingFileIdentifier;\n }\n }\n const dto: AlzSystemDefinitionDTO = {\n agreementNumber: system.value.agreementNumber?.agreementNumber,\n costCenter: system.value.agreementNumber?.costCenter,\n endDate: system.value.endDate,\n ownerObjectId: system.value.owner?.objectId,\n crit: system.value.crit?.key,\n infoClass: system.value.infoClass?.key,\n archType: system.value.archType?.key,\n vendingRepo: system.value.archType?.targetRepo,\n ownerTag: system.value.ownerTag,\n workloadName: system.value.workloadName,\n environments,\n systemFileData: {\n name: system.value.name,\n application_uuid: system.value.service?.applicationUUID,\n hf: system.value.company?.shortName,\n operations_model: system.value.ops,\n operations_ci_uuid:\n system.value.ops === 'delegated_ops' ? system.value.opsCi : undefined,\n sandbox: system.value.isSandboxSystem,\n repositories: sandbox_env.value\n ? sandbox_env.value.sandbox_repo_name\n ? [\n {\n name: sandbox_env.value.sandbox_repo_name,\n landing_zones: [sandbox_env.value.fileIdentifier],\n },\n ]\n : []\n : system.value.repos,\n },\n productsData: {\n customProducts: system.value.customProducts,\n orderRoles: Object.fromEntries(\n system.value?.environments.map((env) => [\n env.fileIdentifier,\n env.orderRoles ?? [],\n ]),\n ),\n },\n };\n submitting.value = true;\n submitted.value = false;\n submitFailed.value = false;\n try {\n if (!system.value.systemId) {\n const result = await createLzSystem(dto);\n system.value.systemId = result.systemFileData.id;\n router.push({ path: '/orders/alz' });\n } else {\n await updateLzSystem(system.value.systemId, dto);\n }\n submitted.value = true;\n } catch (err) {\n // TODO: better error handling\n console.error(err);\n submitFailed.value = true;\n }\n submitting.value = false;\n}\n\nconst companyOptions = computed(() =>\n toDropdownItems(\n companies.result.value,\n (c) => [\n c.shortName.toString(),\n translateStringOrLocale(c.name ?? '').value,\n c,\n ],\n true,\n ),\n);\nconst critOptions = computed(() =>\n toDropdownItems(\n criticalities.result.value,\n (c) => [c.key.toString(), translateStringOrLocale(c.text).value, c],\n true,\n ),\n);\nconst infoClassOptions = computed(() =>\n toDropdownItems(\n informationClasses.result.value?.filter(\n (infoClass) => !system.value?.isSandboxSystem || infoClass.sandbox,\n ),\n (c) => [c.key, translateStringOrLocale(c.text).value, c],\n true,\n ),\n);\nconst archtypeOptions = computed(() =>\n toDropdownItems(\n archTypes.result.value?.filter((archType) => {\n return (\n (archType.roles?.length ?? 0) == 0 ||\n can('use', useSubject('AlzArchetype', archType))\n );\n }),\n (c) => [c.key, translateStringOrLocale(c.text).value, c],\n true,\n ),\n);\n\nconst operationOptions = mapValueList(\n alzOperationTypes,\n 'orders.alz.fields.ops',\n true,\n);\nconst envTypeOptions = computed(() =>\n mapValueList(\n system.value?.isSandboxSystem\n ? alzSandboxEnvironmentTypes\n : alzEnvironmentTypes,\n 'orders.alz.fields.envColumns.type',\n true,\n ),\n);\nconst testDataOptions = computed(() =>\n mapValueList(testDataTypes, 'orders.alz.fields.envColumns.test_data', true),\n);\n\nconst environmentList = computed(() =>\n toDropdownItems(system.value?.environments ?? [], (c) => [\n c.fileIdentifier,\n c.name,\n ]),\n);\nconst repoList = computed(() =>\n toDropdownItems(system.value?.repos ?? [], (c) => [c.name, c.name]),\n);\n\nfunction addEnvironment() {\n if (!system.value) return null;\n const emptyEnv: AlzEnvironment = {\n fileIdentifier: '',\n name: '',\n sandbox: true,\n };\n system.value.environments = [...system.value.environments, emptyEnv];\n return emptyEnv;\n}\nfunction addRepo() {\n if (!system.value) return null;\n const emptyRepo: Repo = {\n name: '',\n landing_zones: [],\n };\n system.value.repos = [...system.value.repos, emptyRepo];\n return emptyRepo;\n}\n\nasync function searchServices(query: string): Promise<ApplicationService[]> {\n if (!applicationServices.result.value) return [];\n const itemLimit = 10;\n const matches =\n query.trim() == ''\n ? applicationServices.result.value\n : applicationServices.result.value.filter((service) =>\n service.name?.toLowerCase().includes(query),\n );\n return matches.slice(0, itemLimit);\n}\nasync function getServiceById(id: string | number) {\n await sleepUntil(() => applicationServices.loaded.value, 1000, 10);\n return (\n applicationServices.result.value?.find((a) => a.applicationUUID == id) ?? {\n applicationUUID: id.toString(),\n name: t('orders.alz.unknownService'),\n }\n );\n}\nconst useAdminAgreementList = can('use', 'AgreementReference');\nconst agreementReferences = computed(() =>\n useAdminAgreementList\n ? adminAgreementReferences.result.value\n : myAgreementReferences.result.value,\n);\nconst missingAgreementReference = computed(\n () =>\n (agreementReferences.value?.length ?? 0) === 0 &&\n !system.value?.agreementNumber?.agreementNumber,\n);\nasync function searchAgreements(query: string): Promise<AgreementReference[]> {\n if (!agreementReferences.value) return [];\n const itemLimit = 10;\n const matches =\n query.trim() == ''\n ? agreementReferences.value\n : agreementReferences.value.filter((agreement) =>\n agreement.agreementNumber.toLowerCase().includes(query),\n );\n for (const match of matches) {\n match.readFromDb = true;\n }\n return matches.slice(0, itemLimit);\n}\nasync function getAgreementByNumber(num: string | number) {\n await sleepUntil(\n () =>\n useAdminAgreementList\n ? adminAgreementReferences.loaded.value\n : myAgreementReferences.loaded.value,\n 1000,\n 10,\n );\n const match = agreementReferences.value?.find(\n (a) => a.agreementNumber == num,\n );\n if (match) match.readFromDb = true;\n return match;\n}\n\n//#region Validation logics\n// Production workloads cannot be sandboxes\nwatchEffect(() => {\n for (const env of system.value?.environments ?? []) {\n if (env.type == 'Prod') {\n env.sandbox = false;\n }\n }\n});\n// Set default values for sandboxes\nconst sandbox_env = ref<AlzEnvironment>();\nwatchEffect(() => {\n if (system.value?.isSandboxSystem) {\n sandbox_env.value ??= {\n existingFileIdentifier:\n system.value.environments[0]?.existingFileIdentifier,\n fileIdentifier: system.value.environments[0]?.fileIdentifier ?? '',\n name: 'sbox',\n sandbox: true,\n };\n } else {\n sandbox_env.value = undefined;\n }\n});\n// Calculate file names for landing zones\nfunction calculateFileIdentifier(lz: AlzEnvironment) {\n return (\n (system.value?.name + (lz?.name ?? ''))\n .toLowerCase()\n .replace(/[^a-z0-9]/g, '') + '.json'\n );\n}\nwatchEffect(() => {\n for (const lz of system.value?.environments ?? []) {\n lz.fileIdentifier = calculateFileIdentifier(lz);\n }\n if (sandbox_env.value) {\n sandbox_env.value.fileIdentifier = calculateFileIdentifier(\n sandbox_env.value,\n );\n }\n});\n//#endregion\nconst showValidationMessages = ref<boolean>(false);\nconst { formRef, isValid } = useValidationTracking(\n [system, sandbox_env],\n showValidationMessages,\n true,\n isEdit,\n);\nfunction getDynamicLabelProps<\n TGroup extends keyof typeof allFieldSets,\n TKey extends keyof (typeof allFieldSets)[TGroup]['fields'],\n>(\n group: TGroup,\n key: TKey,\n): Pick<IInputLabelProps, 'dynamicTextKey' | 'mdDescription' | 'link'> {\n if (group === 'alzFieldKeys') {\n const textKey = alzFieldKeys[key as keyof typeof alzFieldKeys];\n return {\n dynamicTextKey: textKey,\n mdDescription: dbFieldLookup.value[textKey]?.richTextDescription,\n link: dbFieldLookup.value[textKey]?.link,\n };\n } else if (group === 'batFieldKeys') {\n const textKey = batFieldKeys[key as keyof typeof batFieldKeys];\n return {\n dynamicTextKey: textKey,\n mdDescription: dbFieldLookup.value[textKey]?.richTextDescription,\n link: dbFieldLookup.value[textKey]?.link,\n };\n } else {\n throw new Error(`Unknown set of fields: ${group}`);\n }\n}\nconst showBatModal = ref(false);\n</script>\n\n<template>\n <ContentPage\n :title=\"t('header.items.orders.alz_order_form')\"\n class=\"bg-gnist-gray-light-light\"\n >\n <ParagraphShimmer\n v-if=\"!loaded || !textLoaded\"\n :lines=\"6\"\n :random-size=\"true\"\n class=\"mx-auto w-full max-w-5xl\"\n />\n <div v-else-if=\"!system\">(noe gikk galt)</div>\n <div v-else class=\"mx-2 py-8 md:mx-auto\">\n <AlzSubNav />\n <!-- BAT Products ordering is not finished, so for now we hide the button to open it up -->\n <div v-show=\"false\" class=\"flex justify-end\">\n <ButtonComponent\n text=\"orders.bat.buttons.values.showModal\"\n class=\"\"\n @click=\"showBatModal = true\"\n />\n\n <ModalComponent\n :show-modal=\"showBatModal\"\n title=\"orders.bat.title\"\n size=\"big\"\n primary-button-type=\"none\"\n @close=\"showBatModal = false\"\n >\n <AlzBatProductEditor\n v-model=\"system\"\n :get-dynamic-label-props=\"getDynamicLabelProps\"\n :environment-list=\"environmentList\"\n :repo-list=\"repoList\"\n />\n </ModalComponent>\n </div>\n <AdvancedFieldset\n v-if=\"isEdit\"\n class=\"bg-gnist-gray-light p-4\"\n v-bind=\"getDynamicLabelProps('alzFieldKeys', 'status')\"\n >\n <template v-if=\"system.pullRequestUrl\">\n Venter på behandling av\n <a class=\"underline\" :href=\"system.pullRequestUrl\">\n PR#{{ system.pullRequestId }}\n </a>\n </template>\n <template v-else-if=\"system.systemFileUrl\">\n Siste endringer levert.<br />\n Konfigurasjon lagret her:\n <a class=\"underline\" :href=\"system.systemFileUrl\">\n {{ system.systemFileUrl }}\n </a>\n </template>\n </AdvancedFieldset>\n <form ref=\"formRef\" class=\"flex flex-col gap-12\">\n <AdvancedFieldset\n class=\"flex min-w-0 grid-cols-2 flex-col gap-12 border bg-gnist-gray-light p-4 ps-4 md:grid\"\n v-bind=\"getDynamicLabelProps('alzFieldKeys', 'metadata')\"\n >\n <div class=\"grid justify-items-center\">\n <MarkdownRenderer\n :value=\"\n t(\n `${system.isSandboxSystem ? alzFieldKeys.sandboxdetails : alzFieldKeys.metadata}.description`,\n ' ',\n )\n \"\n blob-location=\"public\"\n />\n </div>\n <div class=\"row-start-1\">\n <Dropdown\n v-model=\"system.company\"\n v-bind=\"getDynamicLabelProps('alzFieldKeys', 'company')\"\n :options=\"companyOptions\"\n :getkey=\"(t) => t?.shortName\"\n required\n />\n <Picker\n v-if=\"!system.isSandboxSystem\"\n v-model=\"system.service\"\n v-bind=\"getDynamicLabelProps('alzFieldKeys', 'service')\"\n suggestedlabel=\"orders.alz.searchMatchesLabel\"\n :getkey=\"(val) => val?.applicationUUID ?? ''\"\n :gettext=\"(val) => val?.name ?? ''\"\n :taglistclass=\"['w-full grow [&>*]:w-full [&>*]:justify-between']\"\n :filter=\"searchServices\"\n :get-by-id=\"getServiceById\"\n :max-items=\"1\"\n show-empty-suggestions\n required\n />\n <div v-if=\"missingAgreementReference\" class=\"alert alert-warning\">\n <MarkdownRenderer\n :value=\"\n richTextLookup[alzTextKeys.agreementNumberMissing] ??\n 'Ta kontakt for å få registrert ditt avtalenummer før bestilling'\n \"\n blob-location=\"public\"\n />\n </div>\n <template v-else>\n <Picker\n v-model=\"system.agreementNumber\"\n v-bind=\"getDynamicLabelProps('alzFieldKeys', 'agreement')\"\n suggestedlabel=\"orders.alz.searchMatchesLabel\"\n :getkey=\"(val) => val?.agreementNumber ?? ''\"\n :gettext=\"\n (val) =>\n val?.readFromDb\n ? `${val.agreementNumber}, ${t(`${alzFieldKeys.costCenter}.label`)} ${val.costCenter ?? '-'}${val.label ? `, ${val.label}` : ''}`\n : ''\n \"\n :taglistclass=\"[\n 'w-full grow [&>*]:w-full [&>*]:justify-between',\n ]\"\n :filter=\"searchAgreements\"\n :get-by-id=\"getAgreementByNumber\"\n :max-items=\"1\"\n show-empty-suggestions\n required\n />\n </template>\n <TextInput\n v-model=\"system.name\"\n v-bind=\"\n getDynamicLabelProps(\n 'alzFieldKeys',\n system.isSandboxSystem ? 'sandboxName' : 'lzName',\n )\n \"\n required\n :minlength=\"1\"\n :maxlength=\"80\"\n />\n <InputDate\n v-if=\"system.isSandboxSystem\"\n v-model=\"system.endDate\"\n v-bind=\"getDynamicLabelProps('alzFieldKeys', 'endDate')\"\n required\n :max=\"addMonths(new Date(), 6)\"\n :disabled=\"isEdit\"\n />\n <TextInput\n v-if=\"!isEdit\"\n :model-value=\"system.owner?.displayName\"\n v-bind=\"getDynamicLabelProps('alzFieldKeys', 'owner')\"\n required\n :minlength=\"1\"\n :maxlength=\"20\"\n disabled\n />\n </div>\n </AdvancedFieldset>\n\n <AdvancedFieldset\n class=\"flex min-w-0 grid-cols-2 flex-col gap-12 bg-gnist-gray-light md:grid\"\n v-bind=\"getDynamicLabelProps('alzFieldKeys', 'type')\"\n >\n <div class=\"grid justify-items-center\">\n <MarkdownRenderer\n :value=\"t(`${alzFieldKeys.type}.description`, ' ')\"\n blob-location=\"public\"\n />\n </div>\n\n <div class=\"row-start-1\">\n <Dropdown\n v-model=\"system.crit\"\n v-bind=\"getDynamicLabelProps('alzFieldKeys', 'crit')\"\n :options=\"critOptions\"\n :getkey=\"(t) => t?.key\"\n required\n />\n <Dropdown\n v-model=\"system.infoClass\"\n v-bind=\"getDynamicLabelProps('alzFieldKeys', 'infoClass')\"\n :options=\"infoClassOptions\"\n :getkey=\"(t) => t?.key\"\n required\n />\n <Dropdown\n v-if=\"sandbox_env\"\n v-model=\"sandbox_env.type\"\n v-bind=\"getDynamicLabelProps('alzFieldKeys', 'envColumns.type')\"\n :options=\"envTypeOptions\"\n :getkey=\"(t) => t\"\n required\n />\n <Dropdown\n v-if=\"sandbox_env\"\n v-model=\"sandbox_env.test_data\"\n v-bind=\"\n getDynamicLabelProps('alzFieldKeys', 'envColumns.test_data')\n \"\n :options=\"testDataOptions\"\n :getkey=\"(t) => t\"\n required\n />\n <Dropdown\n v-model=\"system.archType\"\n v-bind=\"getDynamicLabelProps('alzFieldKeys', 'archType')\"\n :options=\"archtypeOptions\"\n :getkey=\"(t) => t?.key\"\n required\n />\n <TextInput\n v-model=\"system.workloadName\"\n v-bind=\"getDynamicLabelProps('alzFieldKeys', 'workloadName')\"\n :validate=\"/^[a-zA-Z0-9]{2,8}$/\"\n :validation-label=\"t('orders.alz.wlNameValidation')\"\n required\n :minlength=\"2\"\n :maxlength=\"8\"\n />\n <TextInput\n v-if=\"system.isSandboxSystem\"\n v-model=\"system.ownerTag\"\n v-bind=\"getDynamicLabelProps('alzFieldKeys', 'ownerTag')\"\n required\n />\n <TextInput\n v-if=\"system.isSandboxSystem && sandbox_env\"\n v-model=\"sandbox_env.sandbox_repo_name\"\n v-bind=\"getDynamicLabelProps('alzFieldKeys', 'sandboxreponame')\"\n :validate=\"/^[a-z0-9]+(-[a-z0-9]+)*$/\"\n :validation-label=\"t('orders.alz.repoNameValidation')\"\n :minlength=\"1\"\n :maxlength=\"50\"\n />\n </div>\n </AdvancedFieldset>\n\n <AdvancedFieldset\n v-if=\"!system.isSandboxSystem\"\n class=\"col-span-2 bg-gnist-gray-light\"\n v-bind=\"getDynamicLabelProps('alzFieldKeys', 'env')\"\n >\n <TableComponent\n size=\"table-md\"\n :rows=\"system.environments\"\n show-spinner\n i18n-key=\"orders.alz.fields.envColumns\"\n uses-dynamic-text-keys\n :get-key=\"(_, idx) => idx\"\n :columns=\"['name', 'type', 'test_data', 'sandbox']\"\n :create=\"{\n idProperty: 'name',\n onCreateClick: addEnvironment,\n title: 'orders.alz.buttons.values.addEnv',\n }\"\n :delete=\"{\n getIdentificator: (val) => val.name,\n onDelete: (row) => {\n if (!system?.environments) return;\n system.environments = system.environments.filter(\n (e) => e.name !== row.name,\n );\n },\n }\"\n class=\"EnvTable [&_td_label]:border-l [&_td_label]:pl-4\"\n >\n <template #columnHeader=\"{ item: env }\">\n <TextInput\n v-model=\"env.name\"\n v-bind=\"getDynamicLabelProps('alzFieldKeys', 'envColumns.name')\"\n required\n :minlength=\"2\"\n :maxlength=\"4\"\n sr-only\n class=\"[&_input]:max-w-20\"\n />\n </template>\n <template #columns=\"{ item: env }\">\n <td>\n <Dropdown\n v-model=\"env.type\"\n v-bind=\"\n getDynamicLabelProps('alzFieldKeys', 'envColumns.type')\n \"\n :options=\"envTypeOptions\"\n :getkey=\"(t) => t\"\n required\n sr-only\n class=\"min-w-32\"\n />\n </td>\n <td>\n <Dropdown\n v-if=\"env.type !== 'Prod'\"\n v-model=\"env.test_data\"\n v-bind=\"\n getDynamicLabelProps('alzFieldKeys', 'envColumns.test_data')\n \"\n :options=\"testDataOptions\"\n :getkey=\"(t) => t\"\n required\n sr-only\n class=\"min-w-32\"\n />\n </td>\n <td>\n <Checkbox\n v-model=\"env.sandbox\"\n v-bind=\"\n getDynamicLabelProps('alzFieldKeys', 'envColumns.sandbox')\n \"\n direction=\"vertical\"\n mode=\"toggle\"\n sr-only\n :disabled=\"env.type === 'Prod'\"\n />\n </td>\n </template>\n </TableComponent>\n </AdvancedFieldset>\n <AdvancedFieldset\n v-if=\"!system.isSandboxSystem\"\n class=\"col-span-2 bg-gnist-gray-light\"\n v-bind=\"getDynamicLabelProps('alzFieldKeys', 'repos')\"\n >\n <TableComponent\n size=\"table-md\"\n :rows=\"system.repos\"\n show-spinner\n i18n-key=\"orders.alz.fields.repoColumns\"\n uses-dynamic-text-keys\n :get-key=\"(_, idx) => idx\"\n :columns=\"['name', 'existing', 'landing_zones']\"\n :create=\"{\n idProperty: 'name',\n onCreateClick: addRepo,\n title: 'orders.alz.buttons.values.addRepo',\n }\"\n :delete=\"{\n getIdentificator: (val) => val.name,\n onDelete: (row) => {\n if (!system?.repos) return;\n system.repos = system.repos.filter((r) => r.name !== row.name);\n },\n }\"\n >\n <template #columnHeader=\"{ item: repo }\">\n <TextInput\n v-model=\"repo.name\"\n v-bind=\"\n getDynamicLabelProps('alzFieldKeys', 'repoColumns.name')\n \"\n :validate=\"/^[a-z0-9]+(-[a-z0-9]+)*$/\"\n :validation-label=\"t('orders.alz.repoNameValidation')\"\n required\n :minlength=\"1\"\n :maxlength=\"50\"\n sr-only\n class=\"!flex-row-reverse items-center gap-2\"\n />\n </template>\n <template #columns=\"{ item: repo }\">\n <td>\n <Checkbox\n v-model=\"repo.existing\"\n v-bind=\"\n getDynamicLabelProps('alzFieldKeys', 'repoColumns.existing')\n \"\n direction=\"vertical\"\n mode=\"toggle\"\n sr-only\n />\n </td>\n <td>\n <Dropdown\n v-model=\"repo.landing_zones\"\n v-bind=\"\n getDynamicLabelProps(\n 'alzFieldKeys',\n 'repoColumns.landing_zones',\n )\n \"\n :options=\"environmentList\"\n :getkey=\"(t) => t\"\n :multiple=\"{ emptyLabel: '' }\"\n required\n sr-only\n />\n </td>\n </template>\n </TableComponent>\n </AdvancedFieldset>\n\n <AdvancedFieldset\n v-if=\"!system.isSandboxSystem\"\n class=\"flex min-w-0 grid-cols-2 flex-col gap-12 border bg-gnist-gray-light p-4 ps-4 md:grid\"\n v-bind=\"getDynamicLabelProps('alzFieldKeys', 'ops')\"\n >\n <div class=\"grid justify-items-center\">\n <MarkdownRenderer\n :value=\"t(`${alzFieldKeys.ops}.description`, ' ')\"\n blob-location=\"public\"\n />\n </div>\n\n <div class=\"row-start-1\">\n <TextInput\n v-model=\"system.ownerTag\"\n v-bind=\"getDynamicLabelProps('alzFieldKeys', 'ownerTag')\"\n required\n />\n <Dropdown\n v-model=\"system.ops\"\n v-bind=\"getDynamicLabelProps('alzFieldKeys', 'ops')\"\n :options=\"operationOptions\"\n :getkey=\"(t) => t\"\n required\n />\n <TextInput\n v-if=\"system.ops === 'delegated_ops'\"\n v-model=\"system.opsCi\"\n v-bind=\"getDynamicLabelProps('alzFieldKeys', 'opsCi')\"\n required\n :minlength=\"1\"\n :maxlength=\"20\"\n />\n </div>\n </AdvancedFieldset>\n <div class=\"flex items-center justify-end gap-4\">\n <MaterialIcon\n v-if=\"submitted\"\n icon=\"check_circle\"\n label=\"orders.alz.buttons.values.submitted\"\n class=\"material-symbols-rounded ml-1 cursor-default text-3xl font-extrabold text-gnist-green\"\n />\n <MaterialIcon\n v-if=\"submitFailed\"\n icon=\"error_outline\"\n label=\"orders.alz.buttons.values.submitted\"\n class=\"material-symbols-rounded ml-1 cursor-default text-3xl font-extrabold text-gnist-red\"\n />\n <LoadingSpinner v-if=\"submitting\" class=\"h-9 w-9\" />\n <ButtonComponent\n :text=\"\n !isValid\n ? 'orders.alz.buttons.values.validate'\n : isEdit\n ? 'orders.alz.buttons.values.update'\n : 'orders.alz.buttons.values.submit'\n \"\n class=\"my-2 w-auto self-end justify-self-start\"\n :disabled=\"submitting\"\n @click.prevent=\"\n isValid ? submitOrder() : (showValidationMessages = true)\n \"\n />\n </div>\n </form>\n </div>\n </ContentPage>\n</template>\n\n<style>\n.EnvTable th,\n.EnvTable td {\n @apply align-top;\n}\n.EnvTable label {\n @apply grid;\n grid-template-areas:\n 'input info'\n 'desc desc';\n @apply items-center;\n}\n.EnvTable label .GnistInputLabel .LabelEnd {\n @apply order-first;\n}\n.EnvTable label .GnistInputLabel {\n @apply w-max;\n grid-area: info;\n}\n.EnvTable label input {\n grid-area: input;\n @apply mr-1;\n}\n.EnvTable label .LabelDescription {\n grid-area: desc;\n}\n.EnvTable .table-md :where(th, td) {\n @apply pr-0;\n}\n.EnvTable .ButtonRow {\n @apply pr-4;\n @apply align-middle;\n @apply text-right;\n /* Grow the last column to the remaining space */\n @apply w-full;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ParagraphShimmer } from 'vue3-shimmer';\nimport ContentPage from '../components/ContentPage.vue';\nimport ButtonComponent from '@/components/ButtonComponent.vue';\nimport AlzSubNav from '@/components/AlzSubNav.vue';\nimport { useI18n } from 'vue-i18n';\nimport { useMyAlzSystems } from '@/api/github';\nimport { throwOnError } from '@/api/composable';\nimport { useStoreAbility } from '@/abilities';\n\nconst { t } = useI18n();\nconst { can } = useStoreAbility();\n\nconst { result: systems } = throwOnError(\n useMyAlzSystems(can('manage', 'AlzOrders')),\n);\nconst groups: { label: string; sandbox: boolean }[] = [\n { label: 'mySystemsListHeader', sandbox: false },\n { label: 'mySandboxesListHeader', sandbox: true },\n];\n</script>\n\n<template>\n <ContentPage :title=\"t('header.items.orders.my_alz_applications')\">\n <ParagraphShimmer\n v-if=\"!systems\"\n :lines=\"6\"\n :random-size=\"true\"\n class=\"mx-auto w-full max-w-5xl\"\n />\n <div v-else class=\"flex w-full flex-col\">\n <AlzSubNav />\n <div class=\"flex flex-col gap-4\">\n <fieldset\n v-for=\"group in groups\"\n :key=\"`${group.sandbox}`\"\n class=\"flex min-w-0 flex-col gap-4 border p-4 ps-4\"\n >\n <legend>{{ t(`orders.alz.${group.label}`) }}</legend>\n <div\n v-for=\"system in systems.filter(\n (s) => s.data.sandbox === group.sandbox,\n )\"\n :key=\"system.data.id\"\n >\n <RouterLink\n class=\"ring-offset-primary-blueDark grow basis-1 whitespace-nowrap rounded-lg px-4 py-2.5 text-sm font-medium text-gnist-black ring-white ring-opacity-60 ring-offset-2 focus:outline-none focus:ring-2\"\n :to=\"{\n name: 'alz_order_form',\n params: { systemId: system.data.id },\n }\"\n >\n <ButtonComponent\n :text=\"\n system.source === 'PullRequest'\n ? `${system.data.name} (PR#${system.pullRequestId})`\n : system.data.name\n \"\n />\n </RouterLink>\n </div>\n </fieldset>\n <div class=\"flex self-end\">\n <RouterLink\n class=\"ring-offset-primary-blueDark grow basis-1 whitespace-nowrap rounded-lg px-4 py-2.5 text-sm font-medium text-gnist-black ring-white ring-opacity-60 ring-offset-2 focus:outline-none focus:ring-2\"\n :to=\"{ name: 'alz_order_form' }\"\n >\n <ButtonComponent text=\"orders.alz.newSystem\" type=\"special\" />\n </RouterLink>\n <RouterLink\n class=\"ring-offset-primary-blueDark grow basis-1 whitespace-nowrap rounded-lg px-4 py-2.5 text-sm font-medium text-gnist-black ring-white ring-opacity-60 ring-offset-2 focus:outline-none focus:ring-2\"\n :to=\"{ name: 'alz_order_form', query: { sandbox: 'true' } }\"\n >\n <ButtonComponent text=\"orders.alz.newSandbox\" type=\"special\" />\n </RouterLink>\n </div>\n </div>\n </div>\n </ContentPage>\n</template>\n","import { compose } from '@/api/composable';\nimport { apiUrl } from '@/config';\nimport { computed, type ComputedRef } from 'vue';\n\nconst statusUrl = apiUrl + '/status';\n\nexport function useFeatureToggle(featureId: string): ComputedRef<boolean> {\n const { result } = compose(getFeatureStatus(featureId));\n const value = computed(() => !!result.value);\n return value;\n}\nasync function getFeatureStatus<T>(featureId: string): Promise<T | null> {\n const resp = await fetch(`${statusUrl}/features/${featureId}`);\n if (resp.ok) {\n return await resp.json();\n }\n return null;\n}\n","<script setup lang=\"ts\">\nimport { editProfile, useCurrentUserThrowIfNotLoggedOn } from '@/api/auth';\nimport { deleteUserAccount, updateUser } from '@/api/user';\nimport ModalComponent from '@/components/ModalComponent.vue';\nimport Checkbox from '@/components/forms/InputCheckbox.vue';\nimport TextInput from '@/components/forms/InputText.vue';\nimport Dropdown from '@/components/forms/InputDropdown.vue';\nimport { computed, ref, watch } from 'vue';\nimport ButtonComponent from '../components/ButtonComponent.vue';\nimport { useI18n } from 'vue-i18n';\nimport { useFeatureToggle } from '@/utilities/useFeatureToggle';\nimport { mapValueList } from '@/utilities/mapValueList';\nimport { SUPPORTED_LOCALES } from '@/config';\nimport type { CurrentUser } from '@/api/types';\nimport { deepClone } from '@/utilities/deepClone';\n\nconst { t } = useI18n();\n\nconst useB2C = useFeatureToggle('UseB2C');\n\nconst user = useCurrentUserThrowIfNotLoggedOn();\nconst userModel = ref<CurrentUser>();\nwatch(\n user,\n () => {\n userModel.value = deepClone(user.value);\n },\n { immediate: true },\n);\n\nconst confirmDelete = ref(false);\nconst b2cDelete = ref(false);\n\nconst submit = () => {\n if (!userModel.value) return;\n updateUser(userModel.value);\n user.value = deepClone(userModel.value);\n};\n\nconst canSave = computed(() => {\n return JSON.stringify(user.value) !== JSON.stringify(userModel.value);\n});\n\nconst doDelete = () => {\n deleteUserAccount(b2cDelete.value);\n};\n\nconst localeOptions = mapValueList(SUPPORTED_LOCALES, 'language');\n</script>\n\n<template>\n <div class=\"mt-10 flex w-full max-w-2xl flex-col\">\n <form class=\"flex flex-col gap-8 p-4\" @submit.prevent=\"submit\">\n <h2>\n {{ t('profile.edit') }}\n </h2>\n\n <div v-if=\"userModel\">\n <TextInput\n v-model=\"userModel.firstName\"\n for-name=\"firstname\"\n label=\"profile.givenName\"\n />\n <TextInput\n v-model=\"userModel.lastName\"\n for-name=\"lastname\"\n label=\"profile.familyName\"\n />\n <Dropdown\n v-model=\"userModel.emailLocale\"\n label=\"profile.emailLocale\"\n :options=\"localeOptions\"\n :getkey=\"(val) => val ?? 'empty'\"\n />\n </div>\n\n <div v-if=\"userModel\">\n <label class=\"font-semibold\">\n {{ t('profile.emailNotficationTitle') }}\n </label>\n <Checkbox\n v-model=\"userModel.sendCommentReplyNotification\"\n for-name=\"checkbox-commento\"\n label=\"profile.emailNotficationCommentOnThread\"\n direction=\"horizontal\"\n />\n <Checkbox\n v-model=\"userModel.sendNewsNotification\"\n for-name=\"checkbox-news\"\n label=\"profile.emailNotificationNewNewsArticle\"\n direction=\"horizontal\"\n />\n\n <Checkbox\n v-model=\"userModel.sendSuggestionCommentNotification\"\n for-name=\"checkbox-suggestion-comment\"\n label=\"profile.emailNotificationSuggestionComment\"\n direction=\"horizontal\"\n />\n\n <Checkbox\n v-model=\"userModel.sendSuggestionChangedNotification\"\n for-name=\"checkbox-suggestion-changed\"\n label=\"profile.emailNotificationSuggestionChanged\"\n direction=\"horizontal\"\n />\n </div>\n\n <div class=\"flex flex-wrap justify-end gap-4\">\n <ButtonComponent\n v-if=\"useB2C\"\n class=\"self-end\"\n type=\"special\"\n :text=\"t('profile.edit_b2c')\"\n truncate-overflow\n @click=\"editProfile()\"\n />\n <ButtonComponent\n class=\"self-end\"\n :text=\"t('profile.save')\"\n type=\"primary\"\n :disabled=\"!canSave\"\n :submit=\"true\"\n />\n </div>\n\n <hr />\n\n <ButtonComponent\n class=\"mb-8 mt-8 self-end\"\n type=\"danger\"\n :text=\"t('profile.deleteAccount')\"\n @click=\"confirmDelete = true\"\n />\n </form>\n\n <ModalComponent\n :show-modal=\"confirmDelete\"\n :title=\"t('profile.deleteAccount')\"\n @close=\"confirmDelete = false\"\n @handle-click=\"doDelete\"\n >\n <template #default>\n <p>{{ t('profile.deleteAccountConfirmation') }}</p>\n <Checkbox\n v-if=\"useB2C\"\n v-model=\"b2cDelete\"\n label=\"profile.deleteB2CAccount\"\n direction=\"horizontal\"\n mode=\"toggle\"\n />\n </template>\n </ModalComponent>\n </div>\n</template>\n","export enum KnownHttpHeaders {\n Authorization = 'Authorization',\n CacheControl = 'Cache-Control',\n ContentType = 'Content-Type',\n OcpApimSubscriptionKey = 'Ocp-Apim-Subscription-Key',\n OcpApimTrace = 'Ocp-Apim-Trace',\n OcpApimTraceLocation = 'Ocp-Apim-Trace-Location',\n OcpApimSasToken = 'Ocp-Apim-Sas-Token',\n SoapAction = 'SOAPAction',\n IfMatch = 'If-Match',\n XMsApiName = 'X-Ms-Api-Name',\n}\n","export enum KnownMimeTypes {\n FormData = 'multipart/form-data',\n Json = 'application/json',\n Xml = 'text/xml',\n UrlEncodedForm = 'application/x-www-form-urlencoded',\n}\n","export const pageUrlSignIn = '/?page=signin';\nexport const portalHeaderName = 'x-ms-apim-client';\nexport const subscriptionKeyHeaderName = 'Ocp-Apim-Subscription-Key';\n","import { KnownHttpHeaders } from '@/temp/constants/knownHttpHeaders';\nimport { KnownMimeTypes } from '@/temp/constants/knownMimeTypes';\nimport * as Constants from '@/temp/constants/constants';\nimport { ref, type Ref } from 'vue';\nimport { apiUrl } from '@/config';\nimport type {\n ApiMAnalyticsDTO,\n ApiMSubscriptionDTO,\n ApiDTO,\n ApiPickerDTO,\n BlockApimDetails,\n ApiMetaData,\n ApimProduct,\n} from './types';\nimport {\n composeWithRefresh,\n type ComposableResult,\n compose,\n} from './composable';\n\nconst apimUrl = apiUrl + '/apim';\n\nexport async function callApi(\n endPoint: string,\n operation: string,\n key: string,\n body: string,\n token?: string,\n): Promise<{ data?: unknown; resp: Response; dataErr?: unknown }> {\n const headers: HeadersInit = {\n [KnownHttpHeaders.ContentType]: KnownMimeTypes.Json,\n [KnownHttpHeaders.CacheControl]: 'no-cache',\n [Constants.subscriptionKeyHeaderName]: key,\n };\n if (token) {\n headers[KnownHttpHeaders.Authorization] = `Bearer ${token}`;\n }\n const resp = await fetch(endPoint, {\n method: operation,\n headers: headers,\n body: body ? body : undefined,\n });\n console.log('Got reply from API', resp);\n const respText = await resp.text();\n try {\n const data = JSON.parse(respText);\n console.log('Got data from API', data);\n return { data, resp };\n } catch (dataErr) {\n return { resp, dataErr, data: respText };\n }\n}\n\nexport const useApim = (\n startDate: string,\n endDate: string,\n): Ref<ApiMAnalyticsDTO | null> => {\n const apima = ref<ApiMAnalyticsDTO | null>(null);\n\n getApiMAnalytics(startDate, endDate).then((result) => (apima.value = result));\n\n return apima;\n};\nexport const getApiMAnalytics = async (\n startDate: string,\n endDate: string,\n): Promise<ApiMAnalyticsDTO | null> => {\n const response = await fetch(\n `${apiUrl}/apim/analytics?startDate=${startDate}&endDate=${endDate}`,\n {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n },\n );\n\n if (!response.ok) return null;\n\n return await response.json();\n};\nexport const requestApimSubscription = async (\n productId: string,\n): Promise<ApiMSubscriptionDTO> => {\n const response = await fetch(`${apimUrl}/${productId}/subscription`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n });\n return await response.json();\n};\n\nexport const getApiSubscriptions = async (\n apimId: string,\n): Promise<ApiMSubscriptionDTO[] | null> => {\n const response = await fetch(`${apimUrl}/${apimId}/subscriptions`, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n });\n if (!response.ok) return null;\n return await response.json();\n};\n\nexport const useSubscriptionList = (\n apiName?: string,\n): ComposableResult<ApiMSubscriptionDTO[]> => {\n return compose(getApiMSubscriptions(apiName));\n};\n\nconst getApiMSubscriptions = async (\n apiName?: string,\n): Promise<ApiMSubscriptionDTO[] | null> => {\n if (apiName) {\n return await getApiSubscriptions(apiName);\n }\n const response = await fetch(`${apimUrl}/subscriptions`, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n });\n if (!response.ok) return null;\n return await response.json();\n};\n\nexport const useApiList = (\n onlyLoadSingleApi?: Ref<BlockApimDetails | undefined>,\n): ComposableResult<ApiPickerDTO[] | null> => {\n const refresh = async () => {\n if (!onlyLoadSingleApi) return await getApiList();\n const data = await getApiMetadata(onlyLoadSingleApi.value?.apimId);\n return data ? [data] : null;\n };\n return composeWithRefresh(refresh, onlyLoadSingleApi);\n};\nexport const getApiList = async (): Promise<ApiPickerDTO[]> => {\n const response = await fetch(`${apimUrl}`, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n });\n if (!response.ok) throw new Error('error.get_api_failed');\n return await response.json();\n};\nexport const getApiMetadata = async (\n apimName?: string,\n): Promise<ApiPickerDTO | null> => {\n if (!apimName) return null;\n const response = await fetch(`${apimUrl}/${apimName}/meta`, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n });\n if (!response.ok) throw new Error('error.get_api_failed');\n const data: ApiMetaData = await response.json();\n return { ...data, versions: [data] };\n};\n\nexport const getApiData = async (apiName: string): Promise<ApiDTO> => {\n const response = await fetch(apiUrl + '/apim/' + apiName + '/operations', {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n });\n if (!response.ok) throw new Error('error.get_operations_failed');\n return await response.json();\n};\n\nexport const useApimProductsList = (): ComposableResult<\n Omit<ApimProduct, 'apis'>[]\n> => {\n return compose(getApimProducts());\n};\n\nconst getApimProducts = async (): Promise<\n Omit<ApimProduct, 'apis'>[] | null\n> => {\n const response = await fetch(`${apimUrl}/products`, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n });\n if (!response.ok) return null;\n return await response.json();\n};\n\nexport const getApimProductDetails = async (\n productId: string,\n): Promise<ApimProduct | null> => {\n const response = await fetch(`${apimUrl}/products/${productId}`, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n });\n if (!response.ok) return null;\n return await response.json();\n};\n","<script setup lang=\"ts\">\nimport MaterialIcon from '@/components/MaterialIcon.vue';\nimport { computed, ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nconst props = defineProps<{\n label: string;\n subscriptionkey: string;\n}>();\n\nconst { t } = useI18n();\n\nconst showSubscriptionKey = ref(false);\nconst displayedKeyValue = computed(() =>\n showSubscriptionKey.value\n ? props.subscriptionkey ?? ''\n : '••••••••••••••••••••••••••••••••',\n);\n\nconst copyToClipboard = () => {\n navigator.clipboard.writeText(props.subscriptionkey ?? '');\n};\n</script>\n<template>\n <label> {{ t(label) }}:</label>\n <div class=\"relative ml-2 inline-flex h-8 max-w-full\">\n <input\n disabled\n type=\"text\"\n class=\"h-8 overflow-hidden rounded border pl-2 pr-6 text-sm\"\n size=\"48\"\n :value=\"displayedKeyValue\"\n />\n <button\n class=\"absolute right-6 mr-0.5 mt-0.5 h-[1.75rem] p-1 hover:cursor-pointer hover:bg-gnist-white active:bg-gnist-gray-light\"\n @click=\"showSubscriptionKey = !showSubscriptionKey\"\n >\n <MaterialIcon class=\"text-[1rem]\" aria-hidden=\"true\">\n {{ showSubscriptionKey ? 'visibility_off' : 'visibility' }}\n </MaterialIcon>\n </button>\n <button\n class=\"absolute right-0 mr-0.5 mt-0.5 h-[1.75rem] p-1 hover:cursor-pointer hover:bg-gnist-white active:bg-gnist-gray-light\"\n @click=\"copyToClipboard\"\n >\n <MaterialIcon class=\"text-[1rem]\" aria-hidden=\"true\">\n content_copy\n </MaterialIcon>\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport ButtonComponent from '@/components/ButtonComponent.vue';\nimport { useSubscriptionList } from '@/api/apiM';\nimport { useI18n } from 'vue-i18n';\nimport SubscriptionKey from '@/components/SubscriptionKey.vue';\nimport { useRoute } from 'vue-router';\nimport { apimproductsRouteId } from '@/config';\nimport TableComponent from '@/components/TableComponent.vue';\nimport type { ApiMSubscriptionDTO } from '@/api/types';\n\nconst { t } = useI18n();\n\nconst route = useRoute();\nconst selectedApi = route.query.api?.toString();\nconst { result: subscriptions } = useSubscriptionList(selectedApi);\n</script>\n\n<template>\n <div class=\"my-10 w-full\">\n <h2 class=\"p-8\">\n {{ t('profile.subscriptions') }}\n </h2>\n <RouterLink :to=\"{ name: apimproductsRouteId }\">\n <ButtonComponent\n class=\"self-center\"\n type=\"primary\"\n :text=\"t('profile.seeProducts')\"\n />\n </RouterLink>\n <p v-if=\"!!selectedApi\" class=\"mt-4\">\n {{ t('profile.subscriptionsFiltered') }}:\n <span class=\"font-bold\">\n {{ selectedApi }}\n </span>\n </p>\n <TableComponent\n :rows=\"subscriptions\"\n show-spinner\n i18n-key=\"profile.subscriptionTable\"\n :get-key=\"(sub) => sub.id\"\n :columns=\"[\n 'displayName',\n 'state.title',\n 'keys.title' as keyof ApiMSubscriptionDTO,\n ]\"\n :sort-fields=\"['displayName', 'state']\"\n column-header-class=\"font-normal\"\n class=\"mt-4\"\n >\n <template #columnHeader=\"{ item: sub }\">\n {{ sub.displayName }}\n </template>\n <template #columns=\"{ item: sub }\">\n <td>\n {{ t(`profile.subscriptionTable.state.values.${sub.state}`) }}\n </td>\n <td class=\"flex items-center justify-between gap-10\">\n <div\n v-if=\"sub.state === 'Active'\"\n class=\"grid w-max grid-cols-[max-content_max-content] gap-x-8\"\n >\n <SubscriptionKey\n label=\"profile.subscriptionTable.keys.primary\"\n :subscriptionkey=\"sub.primaryKey\"\n />\n <SubscriptionKey\n label=\"profile.subscriptionTable.keys.secondary\"\n :subscriptionkey=\"sub.secondaryKey\"\n />\n </div>\n </td>\n </template>\n </TableComponent>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport ContentPage from '@/components/ContentPage.vue';\nimport ModalComponent from '@/components/ModalComponent.vue';\nimport LoadingSpinner from '@/components/LoadingSpinner.vue';\nimport {\n getApimProductDetails,\n requestApimSubscription,\n useApimProductsList,\n useSubscriptionList,\n} from '@/api/apiM';\nimport { useI18n } from 'vue-i18n';\nimport { ref, watchEffect } from 'vue';\nimport { useCurrentUser } from '@/api/auth';\nimport { computed } from 'vue';\nimport ButtonComponent from '@/components/ButtonComponent.vue';\nimport { type ApimProduct } from '@/api/types';\nimport { mySubscriptionsRouteId } from '@/config';\nimport TableComponent from '@/components/TableComponent.vue';\nimport { useResizeListener } from '@/utilities/useResizeListener';\n\nconst { t } = useI18n();\n\nconst { result: products } = useApimProductsList();\nconst { result: subscriptions } = useSubscriptionList();\nconst user = useCurrentUser();\n\nconst productSubMapping = computed(() =>\n Object.fromEntries(\n products.value?.map((p) => [\n p.id,\n subscriptions.value?.filter((s) =>\n s.scope?.includes(`/products/${p.id}`),\n ),\n ]) ?? [],\n ),\n);\nconst isSubmittingApiMRequest = ref(false);\nasync function requestApimProduct(productId: string) {\n isSubmittingApiMRequest.value = true;\n try {\n const subscription = await requestApimSubscription(productId);\n if (subscriptions.value) {\n subscriptions.value?.push(subscription);\n }\n isSubmittingApiMRequest.value = false;\n } catch (err) {\n isSubmittingApiMRequest.value = false;\n throw err;\n }\n}\n\nconst activeProduct = ref<Omit<ApimProduct, 'apis'> | undefined>();\nconst activeProductDetails = ref<ApimProduct | null>(null);\nwatchEffect(async () => {\n if (!activeProduct.value) return;\n activeProductDetails.value = null;\n activeProductDetails.value = await getApimProductDetails(\n activeProduct.value.id,\n );\n});\nconst { isBelowSmall } = useResizeListener();\n</script>\n\n<template>\n <ContentPage\n :title=\"t('apimproducts.title')\"\n :description=\"t('apimproducts.preamble')\"\n >\n <div v-if=\"!products\" class=\"flex w-full flex-col items-center\">\n <LoadingSpinner class=\"h-16 w-16\" />\n </div>\n <div v-else class=\"mb-8 grid gap-8 md:grid-cols-2\">\n <div\n v-for=\"product in products\"\n :key=\"product.productName\"\n class=\"flex min-w-0 flex-col gap-4 bg-gnist-white p-4 shadow-xl\"\n >\n <h2>{{ product.productName }}</h2>\n <p>{{ product.description }}</p>\n\n <ButtonComponent\n class=\"self-start\"\n :text=\"t('apimproducts.seeApis')\"\n truncate-overflow\n @click=\"activeProduct = product\"\n />\n <div class=\"border border-black p-4\">\n <h3>{{ t('apimproducts.yourSubs') }}</h3>\n <div v-if=\"!user\">\n {{ t('apimproducts.mustSignin') }}\n </div>\n <progress\n v-else-if=\"isSubmittingApiMRequest\"\n class=\"progress w-full\"\n />\n <div v-else-if=\"productSubMapping[product.id]?.length === 0\">\n <div>{{ t('apimproducts.noSubsForProduct') }}</div>\n <ButtonComponent\n :text=\"t('apimproducts.orderProduct')\"\n class=\"self-start\"\n truncate-overflow\n @click=\"requestApimProduct(product.id)\"\n />\n </div>\n <div v-else>\n <TableComponent\n :rows=\"productSubMapping[product.id]\"\n show-spinner\n i18n-key=\"profile.subscriptionTable\"\n :get-key=\"(sub) => sub.id\"\n :columns=\"['displayName', 'state.title']\"\n column-header-class=\"font-normal\"\n no-zebra\n >\n <template #columnHeader=\"{ item: sub }\">\n <RouterLink\n :to=\"{ name: mySubscriptionsRouteId }\"\n class=\"underline\"\n >\n {{ sub.displayName }}\n </RouterLink>\n </template>\n <template #columns=\"{ item: sub }\">\n <td>\n {{ t(`profile.subscriptionTable.state.values.${sub.state}`) }}\n </td>\n </template>\n </TableComponent>\n </div>\n </div>\n </div>\n </div>\n </ContentPage>\n <ModalComponent\n :show-modal=\"!!activeProduct\"\n :title=\"t('apimproducts.apiList')\"\n primary-button-type=\"none\"\n size=\"big\"\n :no-scroll=\"isBelowSmall\"\n @close=\"() => (activeProduct = undefined)\"\n >\n <template #default>\n <TableComponent\n size=\"table-xs\"\n pin=\"rows\"\n :rows=\"activeProductDetails?.apis\"\n show-spinner\n i18n-key=\"apimproducts\"\n :get-key=\"(api) => api.name\"\n :columns=\"['name', 'description']\"\n >\n <template #columnHeader=\"{ item: api }\">\n {{ api.displayName }}\n </template>\n <template #columns=\"{ item: api }\">\n <td>\n {{ api.description }}\n </td>\n </template>\n </TableComponent>\n </template>\n </ModalComponent>\n</template>\n","import { type Ref, ref } from 'vue';\nimport type { News } from './types';\nimport { apiUrl } from '@/config';\n\nconst newsUrl = apiUrl + '/news';\n\nexport const useNews = (): Ref<News[]> => {\n const news = ref<News[]>([]);\n\n getNews().then((result) => (news.value = result));\n\n return news;\n};\n\nexport const getNews = async (): Promise<News[]> => {\n return fetch(newsUrl, {\n method: 'GET',\n credentials: 'include',\n })\n .then((response) => response.json())\n .then((news) => news);\n};\n\nexport const updateNewsArtice = async (news: News): Promise<News> => {\n return fetch(`${newsUrl}/${news.newsArticleId}`, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify(news),\n })\n .then((response) => response.json())\n .then((news) => news);\n};\n\nexport const addNewsArticle = async (news: News): Promise<News> => {\n return fetch(newsUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify(news),\n })\n .then((response) => response.json())\n .then((news) => news);\n};\n\nexport const deleteNewsArticle = async (\n newsArticleId: string,\n): Promise<void> => {\n await fetch(`${newsUrl}/${newsArticleId}`, {\n method: 'DELETE',\n credentials: 'include',\n });\n};\n","<script setup lang=\"ts\">\nimport { addNewsArticle, updateNewsArtice } from '@/api/news';\nimport { getEmptyLocaleValue, type ChangeProps, type News } from '@/api/types';\nimport { ref } from 'vue';\nimport ButtonComponent from './ButtonComponent.vue';\nimport MarkdownInput from '@/components/forms/InputMarkdown.vue';\nimport TextInput from '@/components/forms/InputText.vue';\nimport DateInput from '@/components/forms/InputDate.vue';\nimport Checkbox from '@/components/forms/InputCheckbox.vue';\nimport { useI18n } from 'vue-i18n';\nimport { useValidationTracking } from '@/utilities/useValidationTracking';\n\nconst { t } = useI18n();\n\nconst props = defineProps<{\n newsItem?: News;\n}>();\nconst emit = defineEmits<{\n (e: 'edit'): void;\n (e: 'cancel'): void;\n (e: 'update'): void;\n}>();\n\nconst defaultContent = `\n::::::Flex [dir=horizontal gap=2rem wrap=false]\n\n:::Basic []\n\n<Tekst her>\n\n:::\n\n:::Image [maxwidth=16rem]\n\n<bilde her>\n\n:::\n\n::::::`;\n\nconst item = ref<ChangeProps<News, 'datePublished', Date>>({\n ...props.newsItem,\n title: props.newsItem?.title ?? getEmptyLocaleValue(),\n content: props.newsItem?.content ?? {\n no: defaultContent,\n en: defaultContent,\n },\n datePublished: props.newsItem?.datePublished\n ? new Date(props.newsItem.datePublished)\n : new Date(),\n});\n\nconst showValidationMessages = ref<boolean>();\nconst triggerFormValidation = ref<boolean>(false);\nconst { onValidChanged, formRef, isValid } = useValidationTracking(\n [item.value.title, item.value.content],\n triggerFormValidation,\n);\nconst saveNews = async () => {\n if (!isValid.value) {\n triggerFormValidation.value = true;\n return;\n }\n triggerFormValidation.value = false;\n\n const newsData = {\n ...item.value,\n datePublished: item.value.datePublished.toISOString(),\n } satisfies News;\n item.value.newsArticleId\n ? await updateNewsArtice(newsData)\n : await addNewsArticle(newsData);\n\n emit('edit');\n emit('update');\n};\n</script>\n\n<template>\n <form ref=\"formRef\" class=\"m-8 rounded-sm border p-4\">\n <div\n class=\"my-4 mt-auto flex grid-cols-[auto_1fr_1fr] justify-between gap-4 md:grid\"\n >\n <DateInput\n v-model=\"item.datePublished\"\n label=\"news.date\"\n class=\"justify-self-end\"\n />\n <TextInput\n v-model=\"item.title.no\"\n label=\"news.newsTitle\"\n required\n show-validation-message\n />\n <TextInput\n v-model=\"item.title.en\"\n label=\"news.newsTitleEn\"\n required\n show-validation-message\n />\n </div>\n\n <Checkbox\n v-model=\"item.published\"\n label=\"news.published\"\n direction=\"horizontal\"\n mode=\"toggle\"\n class=\"mt-4\"\n />\n <MarkdownInput\n v-model=\"item.content.no\"\n for-name=\"content_no\"\n label=\"news.newsContent\"\n required\n blob-location=\"/news\"\n :show-validation-message=\"showValidationMessages\"\n @report-validation-error=\"\n (name, hasError) => onValidChanged(name, !hasError)\n \"\n />\n <MarkdownInput\n v-model=\"item.content.en\"\n for-name=\"content_en\"\n label=\"news.newsContentEn\"\n required\n blob-location=\"/news\"\n :show-validation-message=\"showValidationMessages\"\n @report-validation-error=\"\n (name, hasError) => onValidChanged(name, !hasError)\n \"\n />\n <div class=\"flex justify-end\">\n <div class=\"gnist-button-group\">\n <ButtonComponent\n :text=\"t('buttons.cancel')\"\n submit\n @click=\"() => $emit('edit')\"\n />\n <ButtonComponent\n :text=\"t('news.save')\"\n submit\n type=\"primary\"\n :disabled=\"!isValid\"\n @click=\"() => saveNews()\"\n />\n </div>\n </div>\n </form>\n</template>\n","import { watch, type Ref, ref } from 'vue';\nimport { useWaitForObservedElement } from './useWaitForObservedElement';\n\n/** Use to add click handlers to images from dynamic content (e.g. rendered markdown) */\nexport function useImageClick(\n elementId: Ref<string>,\n onImageClick: (imageElement: HTMLImageElement) => void,\n) {\n const parentElement = useWaitForObservedElement(elementId);\n const imageElements = ref<NodeListOf<HTMLImageElement> | null>(null);\n watch(parentElement, () => {\n if (!parentElement.value) return;\n let disconnect = startObserve(parentElement.value, imageElements);\n watch(\n () => parentElement,\n () => {\n disconnect();\n if (!parentElement.value) return;\n disconnect = startObserve(parentElement.value, imageElements);\n },\n );\n });\n watch(imageElements, () => {\n imageElements.value?.forEach((imageElement) => {\n imageElement.onclick = () => onImageClick(imageElement);\n });\n });\n return imageElements;\n}\nfunction startObserve(\n target: HTMLElement,\n imageListRef: Ref<NodeListOf<HTMLImageElement> | null>,\n) {\n imageListRef.value = target.querySelectorAll('img');\n const observer = new MutationObserver(function () {\n imageListRef.value = target.querySelectorAll('img');\n });\n observer.observe(target, { childList: true, subtree: true });\n return () => observer.disconnect();\n}\n","<script setup lang=\"ts\">\nimport { useStoreAbility } from '@/abilities';\nimport { deleteNewsArticle } from '@/api/news';\nimport type { News } from '@/api/types';\nimport { computed, ref } from 'vue';\nimport MaterialIcon from './MaterialIcon.vue';\nimport ModalComponent from './ModalComponent.vue';\nimport MarkdownRenderer from '@/components/block/MarkdownRenderer.vue';\nimport { useI18n } from 'vue-i18n';\nimport { translateStringOrLocale } from '@/i18n';\nimport { useImageClick } from '@/utilities/useImageClick';\n\nconst { t } = useI18n();\n\nconst { can } = useStoreAbility();\n\nconst props = defineProps<{\n newsItem: News;\n right?: boolean;\n}>();\n\nconst emits = defineEmits<{\n (e: 'edit'): void;\n (e: 'update'): void;\n}>();\n\nconst showModal = ref(false);\nconst showImageModal = ref(false);\nconst imageModalSource = ref<string | null>(null);\n\nconst handleClick = async () => {\n if (props.newsItem.newsArticleId) {\n await deleteNewsArticle(props.newsItem.newsArticleId);\n emits('update');\n }\n};\nconst _title = translateStringOrLocale(props.newsItem.title);\nconst _content = translateStringOrLocale(props.newsItem.content);\nconst articleItemId = computed(() => `article-${props.newsItem.newsArticleId}`);\nuseImageClick(articleItemId, (imageElement) => {\n imageModalSource.value = imageElement.src;\n showImageModal.value = true;\n});\n</script>\n\n<template>\n <article\n :id=\"articleItemId\"\n class=\"rounded-sm border border-gnist-gray-light bg-gnist-gray-light-light p-2 text-gnist-black sm:p-6\"\n :class=\"{ 'min-h-[20rem]': newsItem.imageSource }\"\n >\n <div v-if=\"can('create', 'News')\" class=\"flex justify-end\">\n <div\n :title=\"t('news.edit')\"\n :class=\"[\n 'flex h-10 w-10 items-center justify-center rounded-full text-4xl hover:cursor-pointer hover:bg-gnist-gray-light',\n ]\"\n >\n <MaterialIcon class=\"\" @click=\"$emit('edit')\"> edit_note </MaterialIcon>\n </div>\n <div\n :title=\"t('news.delete')\"\n :class=\"[\n 'flex h-10 w-10 items-center justify-center rounded-full text-4xl hover:cursor-pointer hover:bg-gnist-gray-light',\n ]\"\n >\n <MaterialIcon\n class=\"text-4xl hover:cursor-pointer\"\n @click=\"showModal = true\"\n >\n delete\n </MaterialIcon>\n </div>\n </div>\n\n <h2>\n {{ _title }}\n </h2>\n <p class=\"text-p4 my-4\">\n {{\n newsItem.datePublished\n ? new Date(newsItem.datePublished).toLocaleDateString(undefined, {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n })\n : new Date().toLocaleDateString(undefined, {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n })\n }}\n </p>\n <MarkdownRenderer\n :value=\"_content\"\n blob-location=\"/news\"\n class=\"text-p2 my-2\"\n />\n\n <ModalComponent\n :show-modal=\"showImageModal\"\n title=\"\"\n :size=\"'full'\"\n :show-close-icon=\"true\"\n @close=\"showImageModal = false\"\n >\n <template #default>\n <img\n v-if=\"imageModalSource\"\n :src=\"imageModalSource\"\n tabindex=\"0\"\n @click=\"showImageModal = false\"\n />\n </template>\n <template #buttons> </template>\n </ModalComponent>\n <ModalComponent\n :show-modal=\"showModal\"\n :title=\"t('news.deleteArticle')\"\n @close=\"showModal = false\"\n @handle-click=\"handleClick\"\n >\n <template #default>\n <p>{{ t('news.deleteArticleConfirmation') }}</p>\n </template>\n </ModalComponent>\n </article>\n</template>\n\n<style scoped>\n:deep(img) {\n /* Add z-index to ensure click works when floating images */\n z-index: 1;\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { News } from '@/api/types';\nimport { ref } from 'vue';\nimport EditNewsCard from './EditNewsCard.vue';\nimport NewsCard from './NewsCard.vue';\n\ndefineProps<{\n newsItem: News;\n right?: boolean;\n}>();\n\ndefineEmits<{\n (e: 'update'): void;\n}>();\nconst edit = ref(false);\n</script>\n\n<template>\n <div>\n <EditNewsCard v-if=\"edit\" :news-item=\"newsItem\" @edit=\"edit = false\" />\n <NewsCard\n v-else\n :news-item=\"newsItem\"\n :right=\"right\"\n @edit=\"edit = true\"\n @update=\"$emit('update')\"\n />\n </div>\n</template>\n\n<style></style>\n","export default \"__VITE_ASSET__HQvFswJD__\"","<script lang=\"ts\" setup>\nimport { getNews, useNews } from '@/api/news';\nimport NewsArticle from '@/components/NewsArticle.vue';\nimport EditNewsCard from '@/components/EditNewsCard.vue';\nimport ContentPage from '../components/ContentPage.vue';\nimport ButtonComponent from '@/components/ButtonComponent.vue';\nimport { ref } from 'vue';\nimport { useStoreAbility } from '@/abilities';\nimport newsLogo from '@/assets/images/news.svg';\nimport { useI18n } from 'vue-i18n';\nimport { useScrollToIdWhenPresent } from '@/utilities/useScrollToIdWhenPresent';\nimport { useRoute } from 'vue-router';\n\nconst { t } = useI18n();\n\nconst { can } = useStoreAbility();\nconst news = useNews();\nconst newArticle = ref(false);\n\nconst route = useRoute();\nuseScrollToIdWhenPresent('article-' + route.params.articleId);\n</script>\n<template>\n <ContentPage :title=\"t('news.title')\" class=\"bg-gnist-white\">\n <template #banner>\n <div class=\"mb-4 hidden min-h-[6rem] flex-row md:flex\">\n <p class=\"text-p1 block pb-4 pt-1\">\n {{ t('news.description') }}\n </p>\n <div class=\"my-[-4rem] ml-16 mr-6 px-[53px] flex items-start\">\n <img\n alt=\"\"\n :src=\"newsLogo\"\n width=\"150\"\n class=\"w-[150px] min-w-[150px]\"\n />\n </div>\n </div>\n </template>\n <template #default>\n <div class=\"mb-12 mt-4 flex flex-col gap-12 md:mt-0 lg:px-8\">\n <div v-if=\"can('create', 'News')\" class=\"my-4 flex w-full lg:px-2\">\n <ButtonComponent\n :text=\"t('news.publish')\"\n class=\"ml-auto mr-8\"\n @click=\"newArticle = true\"\n />\n </div>\n <EditNewsCard\n v-if=\"newArticle\"\n @edit=\"newArticle = false\"\n @update=\"() => getNews().then((n) => (news = n))\"\n />\n <NewsArticle\n v-for=\"n in news\"\n :key=\"n.newsArticleId\"\n :news-item=\"n\"\n :right=\"true\"\n @update=\"() => getNews().then((n) => (news = n))\"\n />\n </div>\n </template>\n </ContentPage>\n</template>\n\n<style></style>\n","<script setup lang=\"ts\">\nimport ButtonComponent from '@/components/ButtonComponent.vue';\nimport Checkbox from '@/components/forms/InputCheckbox.vue';\nimport ModalComponent from '@/components/ModalComponent.vue';\nimport {\n updateNotification,\n useNotifications,\n type NotificationQueryParams,\n updateNotificationCount,\n deleteNotification,\n} from '@/api/status';\nimport type { Notification } from '@/api/types';\nimport { formatDate } from '@/utilities/formatDate';\nimport { ParagraphShimmer } from 'vue3-shimmer';\nimport { useI18n } from 'vue-i18n';\nimport { translateStringOrLocale } from '@/i18n';\nimport { ref } from 'vue';\n\nconst { t } = useI18n();\n\nconst params = ref<NotificationQueryParams>({ includeRead: false });\nconst { result: notifications } = useNotifications(params);\n\nconst markReadUnread = async (\n notification: Pick<Notification, 'id' | 'read'> | undefined,\n read: boolean,\n) => {\n await updateNotification(notification?.id, read);\n if (notification === undefined) {\n notifications.value?.map((n) => (n.read = read));\n } else notification.read = read;\n\n updateNotificationCount();\n setTimeout(() => {\n if (!notifications.value || params.value.includeRead) return;\n notifications.value = notifications.value.filter((n) => !n.read);\n }, 1500);\n};\n\nconst notificationToDelete = ref<number | null>(null);\nconst deleteItem = async () => {\n if (notificationToDelete.value === null) return;\n const deleteId = notificationToDelete.value;\n notificationToDelete.value = null;\n await deleteNotification(deleteId);\n if (!notifications.value) return;\n notifications.value = notifications.value.filter((n) => n.id !== deleteId);\n};\n</script>\n\n<template>\n <div class=\"w-full bg-gnist-gray-light-light text-gnist-black\">\n <ParagraphShimmer\n v-if=\"notifications === null\"\n :lines=\"20\"\n :random-size=\"true\"\n class=\"mx-auto w-full max-w-5xl\"\n />\n\n <div v-else class=\"mx-2 py-8 md:mx-auto md:w-[50rem]\">\n <div class=\"flex flex-col items-start md:flex-row\">\n <Checkbox\n v-model=\"params.includeRead\"\n label=\"notifications.hideRead\"\n direction=\"horizontal\"\n mode=\"toggle\"\n inverted\n />\n <ButtonComponent\n :text=\"t('notifications.markAllRead')\"\n @click.prevent=\"markReadUnread(undefined, true)\"\n />\n </div>\n <div\n v-for=\"notification in notifications\"\n :key=\"notification.id\"\n class=\"m-1 ml-0 bg-gnist-white p-2 pl-0\"\n :class=\"{ 'bg-opacity-50': notification.read }\"\n >\n <div>\n <RouterLink :to=\"notification.link\">\n <div\n class=\"grid grid-cols-[max-content_1fr_min-content]\"\n :class=\"{ 'opacity-50': notification.read }\"\n >\n <div\n class=\"flex w-24 items-end justify-center border-r-2 border-r-gnist-gray-light p-2 pb-1 md:items-center md:pb-2\"\n >\n {{ formatDate(notification.time, false) }}\n </div>\n <div class=\"min-w-0 p-2 px-4\">\n <div class=\"mb-2 flex items-center\">\n <div\n v-if=\"!notification.read\"\n class=\"block h-2 w-2 rounded-2xl bg-gnist-red-dark p-1 text-sm leading-none text-white\"\n >\n  \n </div>\n <p\n class=\"overflow-hidden text-ellipsis whitespace-nowrap\"\n :class=\"{ 'ml-2': !notification.read }\"\n >\n {{\n t(translateStringOrLocale(notification.title).value ?? '')\n }}\n </p>\n </div>\n <p\n class=\"badge badge-outline badge-sm block max-w-full overflow-hidden text-ellipsis whitespace-nowrap border-gnist-gray bg-gnist-blue-light-light\"\n >\n {{\n t(\n `notifications.type.${notification.type}`,\n notification.type,\n )\n }}\n </p>\n </div>\n </div>\n </RouterLink>\n <div\n class=\"absolute -top-1 bottom-0 left-0 mr-2 flex gap-2 md:left-auto md:right-0 md:top-0 md:items-center md:gap-4\"\n >\n <ButtonComponent\n v-if=\"!notification.read\"\n text=\"notifications.markRead\"\n icon=\"mark_email_read\"\n accessible-button\n @click.prevent=\"markReadUnread(notification, true)\"\n />\n <ButtonComponent\n v-else\n text=\"notifications.markUnread\"\n icon=\"mark_email_unread\"\n accessible-button\n @click.prevent=\"markReadUnread(notification, false)\"\n />\n <ButtonComponent\n text=\"notifications.delete\"\n icon=\"delete\"\n accessible-button\n @click.prevent=\"notificationToDelete = notification.id\"\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n <ModalComponent\n :show-modal=\"notificationToDelete !== null\"\n :title=\"t('notifications.confirmDelete')\"\n @close=\"notificationToDelete = null\"\n @handle-click=\"deleteItem\"\n >\n <template #default>\n <p>\n {{ t('notifications.deletePermanently') }}\n </p>\n </template>\n </ModalComponent>\n</template>\n","import { apiUrl } from '@/config';\nimport {\n composeLazy,\n defaultComputed,\n type LazyComposableResult,\n} from './composable';\nimport { translateCategory, type Category, type PartialSome } from './types';\nimport { computed, unref, type Ref } from 'vue';\nimport {\n useRouter,\n type RouteLocationResolvedGeneric,\n type Router,\n} from 'vue-router';\nimport { getBlocksRouteLink } from '@/utilities/routeUtils';\n\nconst categoryUrl = apiUrl + '/categories';\n\nconst allCategoriesLazy = composeLazy(() => getCategories());\nexport function useCategoriesLazy(\n delayInit?: boolean,\n): LazyComposableResult<Category[]> {\n if (!delayInit) allCategoriesLazy.init();\n return allCategoriesLazy;\n}\nexport function useBlockListCategories(\n categoryIdFilter?: number[] | Ref<number[] | undefined>,\n) {\n const { result: categoriesNullable } = useCategoriesLazy();\n const _categories = defaultComputed(categoriesNullable, []);\n const categories = computed(() => {\n const _categoryIdFilter = unref(categoryIdFilter);\n return _categories.value\n .filter(\n (c) =>\n _categoryIdFilter === undefined ||\n _categoryIdFilter.includes(c.categoryId),\n )\n .map((c) => translateCategory(c));\n });\n return categories;\n}\nexport function useCategoryHomePageLink(\n c: Category | undefined,\n router?: Router,\n): RouteLocationResolvedGeneric | undefined {\n if (!c) return undefined;\n router ??= useRouter();\n return router.resolve(\n getBlocksRouteLink(c.homePageId, { categories: c.categoryId }),\n );\n}\n\nconst getCategories = async (): Promise<Category[]> => {\n const response = await fetch(categoryUrl, {\n method: 'GET',\n credentials: 'include',\n });\n if (!response.ok) throw new Error('error.get_categories_failed');\n return response.json();\n};\nexport async function updateCategory(\n item: PartialSome<Category, 'categoryId'>,\n): Promise<void> {\n if (!item?.categoryId) throw 'Missing primary key';\n const resp = await fetch(`${categoryUrl}/${item.categoryId}`, {\n method: 'PUT',\n credentials: 'include',\n body: JSON.stringify(item),\n headers: { 'Content-Type': 'application/json' },\n });\n if (!resp.ok) throw new Error('error.update_category_failed');\n}\nexport async function createCategory(\n item: Omit<Category, 'categoryId'>,\n): Promise<Category> {\n const resp = await fetch(`${categoryUrl}`, {\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify(item),\n headers: { 'Content-Type': 'application/json' },\n });\n if (!resp.ok) throw new Error('error.create_category_failed');\n return await resp.json();\n}\nexport async function deleteCategory(categoryId: string) {\n fetch(`${categoryUrl}/${categoryId}`, {\n method: 'DELETE',\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n });\n}\n","<script setup lang=\"ts\">\nimport { WithUndefined, type VueClass } from '@/api/types';\nimport { computed, type StyleValue } from 'vue';\nimport { useAttrs } from 'vue';\nimport type { RouteLocation, RouterLinkProps } from 'vue-router';\n\nconst props = defineProps<\n Partial<RouterLinkProps> & {\n href?: string;\n outerClass?: VueClass;\n outerStyle?: StyleValue;\n }\n>();\n\ndefineOptions({\n inheritAttrs: false,\n});\nconst _attrs = useAttrs();\nconst attrs = { ..._attrs, target: undefined };\n\nconst routerLinkProps = computed(\n () =>\n WithUndefined<typeof props, RouterLinkProps>(\n props,\n { href: undefined, outerClass: undefined, outerStyle: undefined },\n { target: _attrs.target },\n ) as RouterLinkProps,\n);\n</script>\n\n<template>\n <template v-if=\"to\">\n <RouterLink\n v-bind=\"routerLinkProps\"\n :href=\"(routerLinkProps.to as RouteLocation).fullPath\"\n class=\"grid cursor-pointer\"\n :class=\"outerClass\"\n :style=\"outerStyle\"\n >\n <div v-bind=\"attrs\">\n <slot />\n </div>\n </RouterLink>\n </template>\n <template v-else-if=\"href\">\n <a :href=\"href\" class=\"grid\" :class=\"outerClass\" :style=\"outerStyle\">\n <div v-bind=\"attrs\">\n <slot />\n </div>\n </a>\n </template>\n <template v-else>\n <div v-bind=\"attrs\" :class=\"outerClass\" :style=\"outerStyle\">\n <slot />\n </div>\n </template>\n</template>\n","<script setup lang=\"ts\">\nimport { Status, type Tag, type Block, type localeValue } from '@/api/types';\nimport MaterialIcon from '../MaterialIcon.vue';\nimport PageTitle from '../PageTitle.vue';\nimport SuggestionStatusBadgeVue from '../SuggestionStatusBadge.vue';\nimport { Menu, MenuButton, MenuItems, MenuItem } from '@headlessui/vue';\nimport { getBlocksRouteLink } from '@/utilities/routeUtils';\nimport { computed, toRef } from 'vue';\nimport { useCategoriesLazy, useCategoryHomePageLink } from '@/api/category';\nimport { bannerClasses } from '../PageBanner.vue';\nimport { useI18n } from 'vue-i18n';\nimport {\n addFavorite,\n removeFavoriteByBlockId,\n useBlockFavorite,\n} from '@/api/favorite';\nimport { translateStringOrLocale } from '@/i18n';\nimport { compose, throwOnError } from '@/api/composable';\nimport { getVersions } from '@/api/versions';\nimport { useCurrentUser } from '@/api/auth';\nimport OptionalRouterLink from '../OptionalRouterLink.vue';\n\nconst { t } = useI18n();\nconst props = defineProps<{\n title: string | localeValue;\n showVersionSelector?: boolean;\n block: Block;\n description?: string | localeValue;\n tags: Tag[];\n isPreview: boolean;\n noLeftMargin?: boolean;\n rightMargin?: boolean;\n}>();\nconst _title = translateStringOrLocale(() => props.title);\nconst _description = translateStringOrLocale(() => props.description);\n\nconst { result: versions } = throwOnError(\n compose(getVersions(props.block.blockId, false, false, props.isPreview)),\n);\n\nconst { result: categories } = useCategoriesLazy();\n\nconst categoryBackgroundColorClass = computed(() => {\n const category = categories.value?.find(\n (c) => c.categoryId === props.block.category?.categoryId,\n );\n return category ? `bg-gnist-${category.color}` : '';\n});\n\nconst user = useCurrentUser();\nconst { result: favorite } = useBlockFavorite(toRef(props.block));\n\nconst toggleFavorite = async () => {\n if (!props.block) return;\n if (favorite.value) {\n removeFavoriteByBlockId(props.block.blockId);\n favorite.value = null;\n } else {\n const newFavorite = await addFavorite(props.block.blockId);\n favorite.value = newFavorite;\n }\n};\n\nconst selectedVersion = computed(() =>\n versions.value?.find(\n (i) => i.versionNumber === props.block.currentVersionNumber,\n ),\n);\nconst category = translateStringOrLocale(() => props.block.category?.name);\n</script>\n\n<template>\n <div role=\"banner\">\n <div\n class=\"gnist-page-width w-full lg:grid lg:gap-10\"\n :class=\"[\n ...bannerClasses,\n noLeftMargin\n ? rightMargin\n ? 'lg:grid-cols-4'\n : 'lg:grid-cols-3'\n : 'lg:grid-cols-4',\n ]\"\n >\n <div v-if=\"!noLeftMargin\" class=\"col-span-1 w-full 2xl:mr-auto\">\n <slot name=\"leftMargin\" />\n </div>\n <div\n class=\"relative col-span-3 mx-5 mt-12 inline-block lg:max-w-2xl 2xl:mr-auto\"\n >\n <p>\n <OptionalRouterLink\n class=\"badge inline-flex max-w-full items-center truncate rounded-md p-4 text-center font-medium\"\n :class=\"[categoryBackgroundColorClass, 'text-gnist-black']\"\n :style=\"{ backgroundColor: categoryBackgroundColorClass }\"\n :to=\"useCategoryHomePageLink(block.category)\"\n >\n {{ category }}\n </OptionalRouterLink>\n </p>\n <PageTitle\n class=\"mb-0 mt-2 lg:min-w-[36rem] lg:pt-3\"\n :underline=\"false\"\n >\n {{ _title }}\n </PageTitle>\n <p class=\"text-subtitle mb-8 max-w-2xl text-gnist-black\">\n <span v-if=\"_description\">{{ _description }}</span>\n <slot name=\"description\" />\n </p>\n <div\n v-if=\"showVersionSelector && versions?.length\"\n class=\"mb-12 mt-8 flex items-center gap-4\"\n >\n <Menu as=\"div\" class=\"gnist-dropdown\">\n <MenuButton class=\"gnist-button block\">\n {{ t('block.version') }}:\n {{ block.currentVersionNumber ?? '' }}\n <span v-if=\"selectedVersion?.isBacklog\">\n {{ t('block.versionInBacklogSuffix') }}\n </span>\n <span v-else-if=\"selectedVersion?.status == Status.Archived\">\n {{ t('block.versionArchivedSuffix') }}\n </span>\n </MenuButton>\n <MenuItems class=\"gnist-dropdown-content min-w-[16ch]\">\n <MenuItem\n v-for=\"version in versions\"\n :key=\"version.versionId\"\n v-slot=\"{ active, close }\"\n >\n <RouterLink\n :to=\"\n getBlocksRouteLink(block.blockId, {\n version: version.versionNumber,\n preview: isPreview ? 1 : undefined,\n })\n \"\n :class=\"{\n 'outline-2': true,\n outline: active,\n 'align-stretch block rounded-md p-4 text-left': true,\n }\"\n @click.prevent=\"close\"\n >\n {{ version.versionNumber }}\n <span v-if=\"version.isBacklog\">\n {{ t('block.versionInBacklogSuffix') }}\n </span>\n <span v-else-if=\"version.status == Status.Archived\">\n {{ t('block.versionArchivedSuffix') }}\n </span>\n </RouterLink>\n </MenuItem>\n </MenuItems>\n </Menu>\n <div\n v-if=\"block.suggestion\"\n class=\"ml-4 flex items-center gap-2 text-gnist-black\"\n >\n <h4>{{ t('block.suggestionLinkHeader') }}:</h4>\n <p\n class=\"badge badge-outline badge-sm border-gnist-gray text-gnist-black\"\n :class=\"[\n block.suggestion.type === 'Suggestion'\n ? 'bg-gnist-green'\n : 'bg-gnist-orange',\n ]\"\n >\n {{ t(`suggestions.types.${block.suggestion.type}`) }}\n </p>\n <SuggestionStatusBadgeVue :suggestion=\"block.suggestion\" />\n <RouterLink\n class=\"underline\"\n :to=\"{\n name: 'suggestion_details',\n params: { suggestionId: block.suggestion.id },\n }\"\n >\n {{ translateStringOrLocale(block.suggestion.title).value }}\n </RouterLink>\n </div>\n <button\n v-if=\"favorite !== null && user !== null\"\n class=\"flex items-center hover:cursor-pointer\"\n @click=\"toggleFavorite()\"\n >\n <MaterialIcon class=\"pr-2 text-3xl\" aria-hidden=\"true\">\n {{ favorite !== undefined ? 'star' : 'grade' }}\n </MaterialIcon>\n <span>\n {{\n favorite !== undefined\n ? t('favorite.remove')\n : t('favorite.add')\n }}\n </span>\n </button>\n </div>\n <div v-if=\"favorite?.notes\" class=\"p-2\">\n <label class=\"font-bold\">{{ t('favorite.myNote') }}</label>\n <div class=\"italic text-gnist-gray\">\n {{ favorite.notes }}\n </div>\n </div>\n </div>\n\n <div v-if=\"rightMargin\" class=\"col-span-1 w-full 2xl:ml-auto\">\n <slot name=\"rightMargin\" />\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { getBlobUrl, type IBlobUrlInput } from '@/api/blob';\nimport type { BlockImage, Schema, Translated, VueClass } from '@/api/types';\nimport { computed, ref, useAttrs, watch } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport type { RouteLocationRaw } from 'vue-router';\nimport OptionalDiv from '../OptionalDiv.vue';\n\nconst props = defineProps<{\n schema?: Schema;\n value: Translated<BlockImage> | { fullUrl: string; alt?: string };\n blobLocation?: IBlobUrlInput;\n decorative?: boolean;\n longDescTarget?: RouteLocationRaw;\n linkToLongDesc?: boolean;\n noDrag?: boolean;\n noDefaultClass?: boolean;\n captionClass?: VueClass;\n showCaption?: boolean;\n}>();\nconst imgRef = ref<HTMLImageElement | undefined>();\nconst loaded = ref(false);\nconst size = ref<{\n width: number;\n height: number;\n naturalWidth: number;\n}>({ width: 0, height: 0, naturalWidth: 0 });\nfunction refreshSize() {\n size.value = {\n width: imgRef.value?.width ?? 0,\n height: imgRef.value?.height ?? 0,\n naturalWidth: imgRef.value?.naturalWidth ?? imgRef.value?.width ?? 0,\n };\n}\nwatch([loaded, imgRef], () => {\n if (!loaded.value || !imgRef.value) return;\n refreshSize();\n});\ndefineExpose({ size, refreshSize });\n\nconst { t } = useI18n();\n\nconst imageUrl = computed(() => {\n if ('fullUrl' in props.value) return props.value.fullUrl;\n if (!props.value?.name || !props.blobLocation) return undefined;\n return getBlobUrl(props.blobLocation, props.value.name);\n});\ndefineOptions({\n inheritAttrs: false,\n});\nconst attrs = useAttrs();\n</script>\n\n<template>\n <OptionalDiv v-if=\"value\" :show=\"schema?.showTitle\">\n <h2\n v-if=\"schema?.showTitle\"\n :id=\"schema.title.replace(/[^a-z1-9-_]/gi, '-')\"\n >\n {{ schema.title }}\n </h2>\n <div v-bind=\"attrs\" class=\"flex w-full items-start\">\n <img\n ref=\"imgRef\"\n :src=\"imageUrl\"\n :alt=\"decorative ? '' : value.alt\"\n :class=\"noDefaultClass ? '' : 'max-h-96 max-w-full'\"\n :role=\"decorative ? 'presentation' : undefined\"\n :longdesc=\"longDescTarget\"\n :draggable=\"noDrag === true ? false : undefined\"\n @load=\"loaded = true\"\n />\n <RouterLink\n v-if=\"longDescTarget && linkToLongDesc\"\n class=\"not-sr-only focus:not-sr-only\"\n :to=\"longDescTarget\"\n @click.prevent\n >\n {{ t('accessibility.longdescLinkText') }}\n </RouterLink>\n </div>\n <div\n v-if=\"showCaption && value.alt\"\n class=\"text-left italic\"\n :class=\"captionClass\"\n >\n {{ value.alt }}\n </div>\n </OptionalDiv>\n</template>\n","<script setup lang=\"ts\">\nimport type { Step, Translated } from '@/api/types';\nimport { useI18n } from 'vue-i18n';\nimport MaterialIcon from './MaterialIcon.vue';\n\ndefineProps<{\n step: Pick<Translated<Step[]>, 'title'>;\n isActive?: boolean;\n index: number;\n isAddStep?: boolean;\n}>();\n\nconst emit = defineEmits<{ (e: 'click'): void }>();\n\nconst { t } = useI18n();\n</script>\n<template>\n <button\n class=\"mx-auto block h-16 w-16 flex-initial text-center\"\n :class=\"{\n 'bg-gnist-blue-dark text-gnist-white': isActive,\n 'bg-gnist-white text-gnist-blue-dark': !isActive,\n 'rounded-full border-[2px] border-gnist-blue-dark': !isAddStep,\n }\"\n :aria-label=\"\n isAddStep\n ? t('admin.blockProduction.newStep')\n : `${t('admin.blockProduction.selectStep')}${step.title}`\n \"\n :data-cy-id=\"isAddStep ? 'StepsEditorAddStep' : undefined\"\n @click.prevent=\"emit('click')\"\n >\n <MaterialIcon v-if=\"isAddStep\" class=\"text-6xl font-extrabold\">\n add\n </MaterialIcon>\n <span v-else class=\"text-2xl font-semibold\">{{ index + 1 }}</span>\n </button>\n <p class=\"mt-2 w-32 cursor-default break-words text-center text-gnist-black\">\n {{ step.title }}\n </p>\n</template>\n","<script setup lang=\"ts\">\nimport { useCurrentUser } from '@/api/auth';\nimport type { Guid, Schema, Step, Translated } from '@/api/types';\nimport { computed, ref } from 'vue';\nimport BlockStep from './BlockStep.vue';\nimport ButtonComponent from './ButtonComponent.vue';\nimport MarkdownRenderer from '@/components/block/MarkdownRenderer.vue';\nimport { useI18n } from 'vue-i18n';\nimport { apimproductsRouteId, mySubscriptionsRouteId } from '@/config';\n\nconst getStartedId = 'kom-i-gang';\n\nconst { t } = useI18n();\n\nconst props = defineProps<{\n steps: Translated<Step[]>[];\n schema: Schema;\n hasApiSubscription?: boolean;\n apiId?: string;\n blockId: Guid;\n versionId: number;\n}>();\n\nconst userInfo = useCurrentUser();\n\nconst activeStep = ref(0);\n\nconst shownDescription = computed(() => {\n return props.steps[activeStep.value].description;\n});\n</script>\n\n<template>\n <div data-cy-id=\"BlockSteps\">\n <h2 :id=\"getStartedId\">\n {{ t('gettingStarted.title') }}\n </h2>\n <div class=\"m-auto mt-10\">\n <div class=\"m-auto flex flex-wrap justify-evenly\">\n <div\n v-for=\"(step, idx) in steps\"\n :key=\"step.order\"\n class=\"mb-6 hover:cursor-pointer\"\n data-cy-id=\"BlockStepButton\"\n >\n <BlockStep\n :step=\"step\"\n :index=\"idx\"\n :is-active=\"activeStep === idx\"\n @click=\"activeStep = idx\"\n />\n </div>\n </div>\n <div\n class=\"text-p1 bg-gnist-blue-light-light px-12 pb-8 pt-9 text-gnist-black\"\n data-cy-id=\"BlockStepDescription\"\n >\n <MarkdownRenderer\n :schema=\"schema\"\n :value=\"shownDescription\"\n :blob-location=\"{ blockId: blockId, versionId: versionId }\"\n />\n <div v-if=\"props.steps[activeStep].showApimOrderButton\">\n <div class=\"m-auto flex justify-center\">\n <p v-if=\"!userInfo\">\n {{ t('block.requireLogin') }}\n </p>\n <RouterLink\n v-else\n :to=\"{\n name: hasApiSubscription\n ? mySubscriptionsRouteId\n : apimproductsRouteId,\n query: hasApiSubscription ? { api: apiId } : undefined,\n }\"\n >\n <ButtonComponent\n class=\"self-center\"\n type=\"primary\"\n :text=\"\n hasApiSubscription\n ? t('block.seeSubscriptions')\n : t('block.requestApiMAccess')\n \"\n />\n </RouterLink>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n","import type { Point } from '@/api/types';\n\nexport function handleDrag(\n ev: MouseEvent,\n onMove: (cursor: Point) => void,\n onStart?: (cursor: Point) => void,\n) {\n const cursor: Point = { x: 0, y: 0 };\n function updateCursorPos(ev: MouseEvent) {\n if (ev.pageX || ev.pageY) {\n cursor.x = ev.pageX;\n cursor.y = ev.pageY;\n } else {\n const de = document.documentElement;\n const db = document.body;\n cursor.x =\n ev.clientX + (de.scrollLeft || db.scrollLeft) - (de.clientLeft || 0);\n cursor.y =\n ev.clientY + (de.scrollTop || db.scrollTop) - (de.clientTop || 0);\n }\n return cursor;\n }\n updateCursorPos(ev);\n onStart?.(cursor);\n document.onmousemove = (ev_move) => {\n updateCursorPos(ev_move);\n onMove(cursor);\n };\n document.onmouseup = () => {\n document.onmousemove = null;\n };\n return cursor;\n}\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n';\nimport { ref } from 'vue';\nimport type {\n Dimensions,\n InteractiveImageItem,\n Point,\n Translated,\n} from '@/api/types';\nimport { handleDrag } from '@/utilities/dragUtils';\nimport ImageRenderer from '@/components/block/ImageRenderer.vue';\nimport type { IBlobUrlInput } from '@/api/blob';\nimport { watch } from 'vue';\n\nconst props = defineProps<{\n value: Translated<InteractiveImageItem>;\n editMode: boolean | undefined;\n focusIndex: number | undefined;\n index: number;\n zoomFactor: number;\n blobLocation?: IBlobUrlInput;\n}>();\nconst emit = defineEmits<{\n (e: 'popup', label: string, text: string): void;\n (e: 'resize', size: Dimensions): void;\n (e: 'move', position: Point): void;\n}>();\n\nconst { t } = useI18n();\n\nfunction startDrag(ev: MouseEvent) {\n function getClientXY(el: Element | null) {\n const rect = el?.getBoundingClientRect();\n return { x: Math.trunc(rect?.x ?? 0), y: Math.trunc(rect?.y ?? 0) };\n }\n function diffXY(a: Point, b: Point) {\n return { x: a.x - b.x, y: a.y - b.y };\n }\n function sumXY(a: Point, b: Point) {\n return { x: a.x + b.x, y: a.y + b.y };\n }\n function divXY(point: Point, factor: number) {\n return { x: Math.trunc(point.x / factor), y: Math.trunc(point.y / factor) };\n }\n let offset: Point = { x: 0, y: 0 };\n function getParentWithClass(\n element: HTMLElement | null | undefined,\n className: string,\n ) {\n if (!element) return null;\n if (element.parentElement?.classList.contains(className)) {\n return element.parentElement;\n } else {\n return getParentWithClass(element.parentElement, className);\n }\n }\n function onStart(cursor: Point) {\n offset = sumXY(\n getClientXY(\n getParentWithClass(el.value, 'InteractiveImageVisualBoxesContainer'),\n ),\n diffXY(cursor, getClientXY(ev.target as Element | null)),\n );\n }\n function onMove(cursor: Point) {\n emit('move', divXY(diffXY(cursor, offset), props.zoomFactor));\n }\n handleDrag(ev, onMove, onStart);\n}\n\nconst el = ref<HTMLDivElement | undefined>();\nwatch(el, () => {\n if (!el.value) return;\n const resizeObserver = new ResizeObserver((entries) => {\n const entry = entries[0]?.borderBoxSize[0];\n if (!entry) return;\n const newSize = {\n width: Math.trunc(entry.inlineSize),\n height: Math.trunc(entry.blockSize),\n };\n if (\n props.value.size.width !== newSize.width ||\n props.value.size.height !== newSize.height\n ) {\n emit('resize', newSize);\n }\n });\n resizeObserver.observe(el.value);\n});\n</script>\n\n<template>\n <div\n v-if=\"!value.textOnly\"\n ref=\"el\"\n class=\"absolute overflow-hidden\"\n :class=\"{\n 'cursor-pointer': value.extendedText,\n border: editMode,\n 'border-gnist-red': focusIndex === index,\n 'border-4': focusIndex === index,\n 'bg-gnist-white/50': editMode,\n resize: editMode,\n 'hover:bg-gnist-white/50': !editMode && value.extendedText,\n 'focus-within:bg-gnist-white/50': !editMode && value.extendedText,\n 'rounded-3xl': !editMode,\n }\"\n :style=\"{\n width: `${value.size.width}px`,\n height: `${value.size.height}px`,\n top: `${value.position.y}px`,\n left: `${value.position.x}px`,\n }\"\n >\n <button\n class=\"flex h-full w-full flex-col items-center justify-end focus-visible:outline-none\"\n :class=\"{\n 'cursor-default': !value.extendedText && !editMode,\n 'cursor-move': editMode,\n }\"\n :tabindex=\"0\"\n :aria-disabled=\"!value.extendedText\"\n :aria-description=\"t('interactiveImage.readMore')\"\n :aria-labelledby=\"\n value.showLabelInVisual ? `button-label-${index}` : undefined\n \"\n :aria-label=\"value.showLabelInVisual ? value.label : undefined\"\n @click.prevent=\"\n if (value.extendedText && !editMode) {\n emit('popup', value.label, value.extendedText);\n }\n \"\n @mousedown=\"\n (ev) => {\n if (editMode) startDrag(ev);\n }\n \"\n >\n <ImageRenderer\n v-if=\"value.image.name && !value.hideImageInVisual\"\n :schema=\"{\n type: 'image',\n name: 'image',\n title: 'Bildefil',\n showTitle: false,\n }\"\n :value=\"{ name: value.image.name, alt: value.label }\"\n :blob-location=\"blobLocation\"\n class=\"w-full\"\n decorative\n no-drag\n />\n <label\n :id=\"`button-label-${index}`\"\n class=\"text-xl font-bold\"\n :class=\"{\n 'cursor-pointer': value.extendedText,\n 'cursor-move': editMode,\n hidden: !value.showLabelInVisual,\n 'text-gnist-black': editMode,\n 'text-gnist-blue': !editMode,\n }\"\n >\n {{ value.label }}\n </label>\n </button>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport MarkdownRenderer from '@/components/block/MarkdownRenderer.vue';\nimport ImageRenderer from '@/components/block/ImageRenderer.vue';\nimport InteractiveImageVisualBoxRenderer from '@/components/block/InteractiveImageVisualBoxRenderer.vue';\nimport InteractiveImageTextBoxRenderer from '@/components/block/InteractiveImageTextBoxRenderer.vue';\nimport ModalComponent from '@/components/ModalComponent.vue';\nimport { useResizeListener } from '@/utilities/useResizeListener';\nimport { nextTick, ref, watch } from 'vue';\nimport ButtonComponent from '@/components/ButtonComponent.vue';\nimport { useI18n } from 'vue-i18n';\nimport { useRoute } from 'vue-router';\nimport type { Point, InteractiveImage, Translated } from '@/api/types';\nimport type { IBlobUrlInput } from '@/api/blob';\n\nconst props = defineProps<{\n value: Translated<InteractiveImage>;\n blobLocation: IBlobUrlInput;\n maximized?: boolean;\n editMode?: boolean;\n focusIndex?: number;\n}>();\nconst emit = defineEmits<{\n (e: 'move', position: Point, index: number): void;\n}>();\n\nconst { t } = useI18n();\nconst route = useRoute();\n\nconst bgRef = ref<InstanceType<typeof ImageRenderer> | undefined>();\nconst { windowWidth } = useResizeListener();\nconst zoomFactor = ref(1);\nwatch(\n () => [windowWidth.value, props.maximized],\n async () => {\n if (!bgRef.value || !windowWidth.value) return;\n await nextTick();\n bgRef.value.refreshSize();\n },\n);\nwatch([() => bgRef.value?.size], () => {\n if (!bgRef.value) return;\n zoomFactor.value = Math.min(\n bgRef.value.size.width / bgRef.value.size.naturalWidth,\n 1,\n );\n});\n\nconst popupItem = ref<{ label: string; text: string } | null>(null);\n\nconst visualVersionRef = ref<HTMLElement | null>(null);\nconst embedded = ref<{ topOffset: number; box?: boolean }>();\nwatch(popupItem, () => {\n if (!popupItem.value) return;\n if (route.query['embed'] === 'box') {\n embedded.value = { topOffset: 0, box: true };\n }\n if (route.query['embed'] !== 'full') return;\n visualVersionRef.value?.scrollIntoView();\n if (window !== window.top) {\n embedded.value = {\n topOffset: visualVersionRef.value?.getBoundingClientRect().y ?? 0,\n };\n }\n});\n</script>\n\n<template>\n <div\n class=\"grid grid-cols-1 grid-rows-[max-content_max-content_1fr] items-center justify-items-center\"\n >\n <div\n class=\"InteractiveImage max-h-fit max-w-fit self-stretch justify-self-stretch\"\n :class=\"{ maximized }\"\n >\n <div\n role=\"navigation\"\n aria-labelledby=\"skip-to-textversion\"\n class=\"text-center focus-within:py-2\"\n >\n <RouterLink\n id=\"skip-to-textversion\"\n class=\"sr-only focus:not-sr-only\"\n :to=\"{\n hash: '#text-version',\n query: route.query,\n path: route.path,\n }\"\n >\n <span>{{ t('interactiveImage.skipToText') }}</span>\n </RouterLink>\n </div>\n <MarkdownRenderer\n v-if=\"value.initialText\"\n :schema=\"{\n type: 'markdown',\n name: 'initialText',\n title: '',\n showTitle: false,\n }\"\n class=\"mb-12\"\n :value=\"value.initialText\"\n :blob-location=\"blobLocation\"\n data-cy-id=\"InteractiveImage_InitialText\"\n />\n <section\n id=\"visual-version\"\n ref=\"visualVersionRef\"\n :aria-label=\"t('interactiveImage.visualVersion')\"\n >\n <ImageRenderer\n v-if=\"value.background.name\"\n ref=\"bgRef\"\n :schema=\"{\n type: 'image',\n name: 'image',\n title: 'Bakgrunn',\n showTitle: false,\n }\"\n :value=\"value.background\"\n :blob-location=\"blobLocation\"\n :decorative=\"!value.background.alt\"\n no-default-class\n show-caption\n class=\"mb-40\"\n caption-class=\"mt-8\"\n />\n <div\n class=\"InteractiveImageVisualBoxesContainer absolute inset-0 origin-top-left\"\n :style=\"{ transform: `scale(${zoomFactor})` }\"\n >\n <InteractiveImageVisualBoxRenderer\n v-for=\"(item, index) in value.items\"\n :key=\"index\"\n :value=\"item\"\n :edit-mode=\"editMode\"\n :focus-index=\"focusIndex\"\n :index=\"index\"\n :blob-location=\"blobLocation\"\n :zoom-factor=\"zoomFactor\"\n :data-cy-id=\"`InteractiveImageElement_${index}`\"\n @popup=\"(label, text) => (popupItem = { label, text })\"\n @resize=\"(newSize) => (item.size = newSize)\"\n @move=\"(position) => emit('move', position, index)\"\n />\n <ModalComponent\n :show-modal=\"popupItem !== null\"\n :title=\"popupItem?.label ?? ''\"\n size=\"big\"\n show-overflow\n show-close-icon\n :title-upper-case=\"false\"\n :embedded=\"embedded\"\n @close=\"popupItem = null\"\n >\n <template #default>\n <MarkdownRenderer\n v-if=\"blobLocation && popupItem\"\n :schema=\"{\n type: 'markdown',\n name: 'extendedText',\n title: '',\n showTitle: false,\n }\"\n :value=\"popupItem.text\"\n :blob-location=\"blobLocation\"\n class=\"min-h-60\"\n />\n </template>\n <template #buttons>\n <div className=\"flex justify-end\">\n <div class=\"gnist-button-group\">\n <ButtonComponent\n type=\"primary\"\n :text=\"t('buttons.ok')\"\n @click.prevent=\"popupItem = null\"\n />\n </div>\n </div>\n </template>\n </ModalComponent>\n </div>\n </section>\n <section\n id=\"text-version\"\n class=\"flex flex-col\"\n :aria-label=\"t('interactiveImage.textVersion')\"\n >\n <InteractiveImageTextBoxRenderer\n v-for=\"(item, index) in value.items\"\n :key=\"index\"\n :value=\"item\"\n :index=\"index\"\n :blob-location=\"blobLocation\"\n />\n </section>\n </div>\n </div>\n</template>\n\n<style scoped>\n#text-version :deep(h2) {\n @apply mt-0;\n}\n#text-version :deep(h3),\n#text-version :deep(h4) {\n @apply pt-0;\n}\n</style>\n","export default function (input: string): string {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return input.replaceAll(/[^A-Za-z0-9.\\-_:]/g, '_');\n}\n","<script lang=\"ts\">\nexport function ensureTabVisible(headerId: string) {\n const tab = document.getElementById(\n `tab_selector_${headerId}`,\n ) as HTMLInputElement;\n tab?.click();\n}\n</script>\n<script setup lang=\"ts\">\nimport idEncode from '@/utilities/idEncode';\nimport { useAttrs } from 'vue';\n\ndefineProps<{\n groupName: string;\n header: string;\n initialChecked?: boolean;\n headerType?: 'h3' | 'h4' | 'none';\n headerAttributes?: Record<string, string>;\n}>();\nconst attrs = useAttrs();\n</script>\n\n<template>\n <input\n :id=\"`tab_selector_${idEncode(header)}`\"\n type=\"radio\"\n :name=\"groupName\"\n role=\"tab\"\n class=\"tab\"\n :aria-label=\"header\"\n :checked=\"initialChecked\"\n :title=\"header\"\n />\n <div\n role=\"tabpanel\"\n class=\"tab-content overflow-hidden rounded-box border-base-300\"\n v-bind=\"attrs\"\n :title=\"header\"\n >\n <component\n :is=\"headerType ?? 'h3'\"\n v-if=\"headerType !== 'none'\"\n :id=\"idEncode(header)\"\n class=\"flex items-center\"\n v-bind=\"headerAttributes\"\n >\n {{ header }}\n <slot name=\"header\" />\n </component>\n <slot />\n </div>\n</template>\n\n<style scoped>\n/* This is needed to ensure we get \"above\" the tab-content div, for some reason */\ninput:checked {\n z-index: 1;\n}\ninput[type='radio']::after {\n @apply line-clamp-1;\n}\n</style>\n","import { onMounted } from 'vue';\n\n/**\n * This helper can be used if different components loads conflicting CSS (e.g. different themes).\n * This will ensure that the CSS that can be identified by the given value in a attribute of either href (in prod) or data-vite-dev-id (in dev) will be put as the last one loaded in the head.\n */\nexport function useCssReorder(cssIdentifier: string) {\n onMounted(() => {\n const themeStyleNode = document.querySelector(\n `[href*=${cssIdentifier}],[data-vite-dev-id*=${cssIdentifier}]`,\n );\n if (themeStyleNode)\n document.querySelector('head')?.appendChild(themeStyleNode);\n });\n}\n","<script setup lang=\"ts\">\nimport { md } from '@/utilities/markdown/MarkdownIt';\nimport MaterialIcon from './MaterialIcon.vue';\nimport { useCssReorder } from '@/utilities/useCssReorder';\n\nuseCssReorder('stackoverflow-light');\n\nconst props = defineProps<{\n content: object;\n}>();\n\nfunction renderSchema(text: string): string {\n const start = '``` json\\n';\n const end = '\\n```';\n\n text = start.concat(text);\n text = text.concat(end);\n\n return md.render(text);\n}\n\nconst copyToClipboard = () => {\n navigator.clipboard.writeText(JSON.stringify(props.content, null, 2) || '');\n};\n</script>\n<template>\n <div class=\"flex justify-between bg-gnist-gray-light p-2\">\n <span>JSON</span>\n <MaterialIcon\n class=\"hover:cursor-pointer\"\n aria-hidden=\"true\"\n @click=\"copyToClipboard\"\n >\n content_copy\n </MaterialIcon>\n </div>\n <!-- eslint-disable vue/no-v-html -->\n <div\n class=\"max-h-96 overflow-y-auto bg-gray-100 p-4 [&_code.hljs]:bg-[inherit]\"\n v-html=\"renderSchema(JSON.stringify(content, null, 2))\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport type { ApiSchema } from '@/api/types';\nimport { ref, watchEffect } from 'vue';\nimport MaterialIcon from './MaterialIcon.vue';\nimport JsonCodeBlock from './JsonCodeBlock.vue';\nimport { useI18n } from 'vue-i18n';\nimport TableComponent from './TableComponent.vue';\n\nconst { t } = useI18n();\n\nconst showAs = ref<'table' | 'json'>('table');\nconst hideTable = ref<boolean>(false);\nconst flattenedSchema = ref<FlattenProperty[]>();\n\nconst props = defineProps<{\n schema: ApiSchema;\n}>();\n\ntype Property = SimpleProperty | ArrayProperty | ObjectProperty;\n\ntype SimpleProperty = {\n type: string;\n description?: string;\n xApimInline?: boolean;\n};\n\ntype ObjectProperty = {\n type: 'object';\n properties: {\n [key: string]: Property;\n };\n required?: string[];\n example?: [];\n xApimInline?: boolean;\n};\n\ntype ArrayProperty = {\n type: 'array';\n items: Property;\n};\n\ntype FlattenProperty = {\n path: string;\n required: boolean;\n type: string;\n description?: string;\n};\n\nfunction isArrayProperty(property: Property): property is ArrayProperty {\n return property.type === 'array';\n}\n\nfunction isObjectProperty(property: Property): property is ObjectProperty {\n return property.type === 'object';\n}\n\nfunction flatten(\n property: Property,\n prefix = '',\n required = false,\n): FlattenProperty[] {\n let result: FlattenProperty[] = [];\n if (isObjectProperty(property)) {\n for (const key in property.properties) {\n const newPrefix = prefix ? `${prefix}.${key}` : key;\n const childRequired = property.required?.includes(key) || false;\n const childResult = flatten(\n property.properties[key],\n newPrefix,\n childRequired,\n );\n result = result.concat(childResult);\n }\n } else if (isArrayProperty(property)) {\n if (property.items.type === 'object' || property.items.type === 'array') {\n const childResult = flatten(property.items, `${prefix}[]`);\n result = result.concat(childResult);\n } else {\n result.push({\n path: prefix,\n required: required,\n type: property.items.type + '[]',\n });\n }\n } else {\n result.push({\n path: prefix,\n required: required,\n type: property.type,\n description: property.description ?? undefined,\n });\n }\n return result;\n}\n\nfunction removeExample(schema: ApiSchema) {\n const newSchema: Property = { ...schema };\n if (isObjectProperty(newSchema) && newSchema.example) {\n newSchema.example = undefined;\n }\n return newSchema;\n}\n\nwatchEffect(async () => {\n flattenedSchema.value = flatten(props.schema);\n\n if (flattenedSchema.value.length == 0) {\n hideTable.value = true;\n showAs.value = 'json';\n }\n});\n</script>\n<template>\n <div v-show=\"!hideTable\" class=\"mb-4 flex\">\n <button\n class=\"gnist-icon-button gnist-button mr-2\"\n :class=\"{\n 'gnist-button-primary gnist-button-primary bg-gnist-sp-blue-dark':\n showAs === 'table',\n }\"\n :title=\"t('block.tableView')\"\n @click=\"() => (showAs = 'table')\"\n >\n <MaterialIcon aria-hidden=\"true\"> format_list_bulleted </MaterialIcon>\n </button>\n <button\n class=\"gnist-icon-button gnist-button\"\n :class=\"{\n 'gnist-button-primary gnist-button-primary bg-gnist-sp-blue-dark':\n showAs === 'json',\n }\"\n :title=\"t('block.rawView')\"\n @click=\"() => (showAs = 'json')\"\n >\n <MaterialIcon aria-hidden=\"true\"> data_object </MaterialIcon>\n </button>\n </div>\n <div v-if=\"showAs === 'json'\" class=\"SizeLimitSchema\">\n <JsonCodeBlock :content=\"removeExample(schema)\" />\n </div>\n <TableComponent\n v-else-if=\"showAs === 'table'\"\n class=\"SizeLimitSchema max-h-96 border\"\n no-zebra\n column-header-class=\"font-normal\"\n :rows=\"flattenedSchema\"\n i18n-key=\"block.response\"\n :get-key=\"(line) => line.path\"\n :columns=\"['path', 'required', 'type', 'description']\"\n >\n <template #columnHeader=\"{ item: line }\">\n {{ line.path }}\n </template>\n <template #columns=\"{ item: line }\">\n <td>\n {{ line.required }}\n </td>\n <td>\n {{ line.type }}\n </td>\n <td class=\"p-2\">\n {{ line.description ?? '' }}\n </td>\n </template>\n </TableComponent>\n</template>\n<style scoped>\ntd:first-child {\n line-break: anywhere;\n}\n/* For some reason the tab component sometimes fails to calculate the correct width for the tabs,\n if the content is too big and has not a fixed sixe (e.g. 90% won't work even if it actually limits the size).\n Thus this complicated calculation to limit the size. */\n.SizeLimitSchema {\n --extra-padding-for-good-measure: 3rem;\n max-width: calc(\n var(--main-content-width) - var(--api-details-padding) -\n var(--representations-tab-padding) - var(--example-tab-padding) -\n var(--extra-padding-for-good-measure)\n );\n @apply xl:max-w-[45rem];\n}\n</style>\n","<script setup lang=\"ts\">\nimport ApimSchemaViewer from '@/components/ApimSchemaViewer.vue';\nimport JsonCodeBlock from '@/components/JsonCodeBlock.vue';\nimport BlockContentTab from '@/components/BlockContentTab.vue';\nimport { useI18n } from 'vue-i18n';\nimport type { ApiSchema } from '@/api/types';\nimport { useAttrs } from 'vue';\n\nconst { t } = useI18n();\n\ndefineProps<{\n groupName: string;\n schema: ApiSchema | null | undefined;\n example: string | null | undefined;\n}>();\n\ndefineOptions({\n inheritAttrs: false,\n});\nconst attrs = useAttrs();\n</script>\n\n<template>\n <div v-if=\"schema && example\" role=\"tablist\" class=\"tabs tabs-lifted\">\n <BlockContentTab\n v-if=\"schema\"\n :group-name=\"groupName\"\n :header=\"`${t('block.responseSchema')}`\"\n initial-checked\n header-type=\"none\"\n v-bind=\"attrs\"\n >\n <ApimSchemaViewer :schema=\"schema\" />\n </BlockContentTab>\n <BlockContentTab\n v-if=\"example\"\n :group-name=\"groupName\"\n :header=\"`${t('block.example')}`\"\n header-type=\"none\"\n v-bind=\"attrs\"\n >\n <JsonCodeBlock :content=\"JSON.parse(example)\" />\n </BlockContentTab>\n </div>\n <template v-else>\n <ApimSchemaViewer v-if=\"schema\" :schema=\"schema\" />\n <JsonCodeBlock v-if=\"example\" :content=\"JSON.parse(example)\" />\n </template>\n</template>\n","import type { ApiDTO, ApiOperation } from '@/api/types';\n\nexport function computeEndpoint(\n apiData: Pick<ApiDTO, 'gatewayUrl' | 'apiPathUrl'> | null,\n operation: Pick<ApiOperation, 'templateUrl'> | null,\n) {\n if (!apiData?.gatewayUrl || !apiData?.apiPathUrl) return '';\n\n return `${apiData?.gatewayUrl}${apiData?.apiPathUrl}${operation?.templateUrl}`;\n}\n","<script setup lang=\"ts\">\nimport type { OperationParam } from '@/components/ApiParameterInput.vue';\nimport TableComponent from '@/components/TableComponent.vue';\nimport { computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nconst props = defineProps<{\n pathParams: OperationParam[];\n queryParams: OperationParam[];\n}>();\n\nconst { t } = useI18n();\n\nfunction enrichParam(\n param: OperationParam,\n position: 'inTemplate' | 'inQuery',\n) {\n const typeI18nId = `block.apiParams.types.${param.parameterContractType}`;\n let translatedType = t(typeI18nId);\n if (translatedType === typeI18nId) {\n translatedType = param.parameterContractType;\n }\n return { ...param, in: t(`block.apiParams.${position}`), translatedType };\n}\n\nconst allParams = computed(() =>\n props.pathParams\n .map((i) => enrichParam(i, 'inTemplate'))\n .concat(props.queryParams.map((i) => enrichParam(i, 'inQuery'))),\n);\n</script>\n\n<template>\n <TableComponent\n v-if=\"pathParams.length > 0 || queryParams.length > 0\"\n class=\"SizeLimitTable max-h-[36rem] border\"\n column-header-class=\"font-normal\"\n :rows=\"allParams\"\n i18n-key=\"block.apiParams\"\n :get-key=\"(param) => param.name\"\n :columns=\"['name', 'in', 'isRequired', 'translatedType', 'description']\"\n >\n <template #columnHeader=\"{ item: param }\">\n {{ param.name }}\n </template>\n <template #columns=\"{ item: param }\">\n <td>\n {{ param.in }}\n </td>\n <td>\n {{ t(`booleans.${param.isRequired ?? false}`).toLowerCase() }}\n </td>\n <td>\n {{ param.translatedType }}\n </td>\n <td class=\"whitespace-pre-wrap leading-tight\">\n {{ param.description }}\n </td>\n </template>\n </TableComponent>\n</template>\n\n<style scoped>\n/* For some reason the tab component sometimes fails to calculate the correct width for the tabs,\n if the content is too big and has not a fixed sixe (e.g. 90% won't work even if it actually limits the size).\n Thus this complicated calculation to limit the size. */\n.SizeLimitTable {\n --extra-padding-for-good-measure: 4rem;\n max-width: calc(\n var(--main-content-width) - var(--api-details-padding) -\n var(--extra-padding-for-good-measure)\n );\n @apply xl:max-w-[45rem];\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { ApiDTO, ApiOperation, ApiSchema } from '@/api/types';\nimport BlockContentTab from '@/components/BlockContentTab.vue';\nimport ApiDataRepresentation from '@/components/ApiDataRepresentation.vue';\nimport MarkdownRenderer from '@/components/block/MarkdownRenderer.vue';\nimport MaterialIcon from '@/components/MaterialIcon.vue';\nimport { useI18n } from 'vue-i18n';\nimport { computed } from 'vue';\nimport { computeEndpoint } from '@/utilities/computeEndpoint';\nimport ApiParameterList from '@/views/ApiParameterList.vue';\n\nconst { t } = useI18n();\n\nconst props = defineProps<{\n operation: ApiOperation;\n apimSchema: Record<string, ApiSchema> | null;\n hasApiSubscription?: boolean;\n versionNumber?: string;\n initialChecked?: boolean;\n endpointData: Pick<ApiDTO, 'gatewayUrl' | 'apiPathUrl'> | null;\n}>();\n\nconst requestBody = computed(() => {\n const schema = props.operation.schemaOperation\n ? props.apimSchema?.[props.operation.schemaOperation]\n : null;\n const example =\n props.operation.request?.representations?.[0]?.examples?.default?.value;\n const description = props.operation.request?.description;\n if (!schema && !example) return undefined;\n return { schema, example, description };\n});\nconst endpoint = computed(() =>\n computeEndpoint(props.endpointData, props.operation),\n);\n\nconst initialTab = computed((): 'params' | 'body' | 'response' => {\n if (\n (props.operation.templateParameters ?? []).length > 0 ||\n (props.operation.request?.queryParameters ?? []).length > 0\n ) {\n return 'params';\n } else if (requestBody.value) {\n return 'body';\n } else return 'response';\n});\n</script>\n\n<template>\n <BlockContentTab\n group-name=\"operations_tabs\"\n :header=\"operation.name\"\n :initial-checked=\"initialChecked\"\n :header-attributes=\"{ 'data-cy-id': 'ApiOperationHeader' }\"\n class=\"SizeLimitOperationDetails p-4\"\n >\n <template #header>\n <RouterLink\n class=\"underline\"\n :to=\"{\n name: 'console',\n params: { selectedOperation: operation.name },\n query: { version: versionNumber },\n }\"\n >\n <MaterialIcon aria-hidden=\"true\" class=\"text-2xl text-gnist-blue-dark\">\n link\n </MaterialIcon>\n </RouterLink>\n </template>\n\n <MarkdownRenderer\n v-if=\"operation?.description\"\n :value=\"operation.description\"\n blob-location=\"public\"\n />\n <div class=\"my-4\">\n <RouterLink\n v-slot=\"{ navigate }\"\n :to=\"{\n name: 'console',\n params: { selectedOperation: operation.name },\n query: { version: versionNumber },\n }\"\n custom\n >\n <button\n class=\"gnist-button\"\n :disabled=\"!hasApiSubscription\"\n data-cy-id=\"TryApiButton\"\n @click=\"navigate\"\n >\n {{ t('block.tryAPI') }}\n </button>\n </RouterLink>\n </div>\n <h4>{{ t('block.requestUrlHeader') }}</h4>\n <span class=\"text-monospace mb-4 text-wrap\" :data-method=\"operation.method\">\n {{ endpoint }}\n </span>\n <div\n role=\"tablist\"\n class=\"tabs tabs-lifted [&>.tab-content>.tabs]:-m-2 [&>.tab-content]:p-2\"\n >\n <BlockContentTab\n v-if=\"initialTab === 'params'\"\n :group-name=\"`${operation.name}_details_tabs`\"\n :header=\"t('block.params')\"\n initial-checked\n header-type=\"none\"\n >\n {{ initialTab }}\n <ApiParameterList\n :path-params=\"operation.templateParameters ?? []\"\n :query-params=\"operation.request?.queryParameters ?? []\"\n />\n </BlockContentTab>\n\n <!-- Not currently present in any of the source data we receive, but might be needed later (it is present in APIM) -->\n <BlockContentTab\n v-if=\"false\"\n :group-name=\"`${operation.name}_details_tabs`\"\n :header=\"t('block.requestHeaders')\"\n header-type=\"none\"\n >\n TODO\n </BlockContentTab>\n\n <BlockContentTab\n v-if=\"requestBody\"\n :group-name=\"`${operation.name}_details_tabs`\"\n :header=\"t('block.requestBody')\"\n header-type=\"none\"\n :initial-checked=\"initialTab === 'body'\"\n >\n <p v-if=\"requestBody.description\">{{ requestBody.description }}</p>\n <div class=\"my-4\">\n <!-- TODO: does this make sense to have here? -->\n <div>\n <span class=\"font-bold\">{{ t('block.typename') }}: </span>\n <span>{{ operation.schemaOperation }}</span>\n </div>\n </div>\n <ApiDataRepresentation\n :group-name=\"`${operation.name}_requestbody_tabs`\"\n :schema=\"requestBody.schema\"\n :example=\"requestBody.example\"\n class=\"p-2\"\n />\n </BlockContentTab>\n\n <BlockContentTab\n :group-name=\"`${operation.name}_details_tabs`\"\n :header=\"t('block.responses')\"\n header-type=\"none\"\n :initial-checked=\"initialTab === 'response'\"\n >\n <div role=\"tablist\" class=\"tabs tabs-lifted pt-8\">\n <BlockContentTab\n v-for=\"(resp, resp_index) in operation.responses\"\n :key=\"resp.statusCode\"\n :group-name=\"`${operation.name}_responses_tabs`\"\n :header=\"`${t('block.statusCodeShort')} ${resp.statusCode}`\"\n :initial-checked=\"resp_index === 0\"\n header-type=\"none\"\n class=\"p-2 [&>.tabs]:-m-2\"\n >\n <div class=\"mb-4\">\n <div>\n <span class=\"font-bold\">{{ t('block.statusCodeLong') }}: </span>\n {{ resp.statusCode }}\n </div>\n <div>\n <span class=\"font-bold\">\n {{ t('block.statusDescription') }}:\n </span>\n {{ resp.description }}\n </div>\n </div>\n <div\n v-if=\"resp.representations.length != 0\"\n role=\"tablist\"\n class=\"tabs tabs-lifted\"\n >\n <BlockContentTab\n v-for=\"(rep, rep_index) in resp.representations\"\n :key=\"rep.typeName\"\n :group-name=\"`${operation.name}_${resp.statusCode}_representations_tabs`\"\n :header=\"`${rep.contentType}`\"\n :initial-checked=\"rep_index === 0\"\n header-type=\"none\"\n class=\"p-2\"\n >\n <div class=\"mt-2\">\n <div class=\"mb-4\">\n <div>\n <span class=\"font-bold\">\n {{ t('block.statusCodeLong') }}:\n </span>\n <span>{{ resp.statusCode }}</span>\n </div>\n <div>\n <span class=\"font-bold\">\n {{ t('block.contentType') }}:\n </span>\n <span>{{ rep.contentType }}</span>\n </div>\n <!-- TODO: does this make sense to have here? -->\n <div>\n <span class=\"font-bold\">{{ t('block.typename') }}: </span>\n <span>{{ rep.typeName }}</span>\n </div>\n </div>\n <ApiDataRepresentation\n :group-name=\"`${operation.name}_${resp.statusCode}_${rep.typeName}_example_tabs`\"\n :schema=\"apimSchema?.[rep.typeName]\"\n :example=\"rep.examples.default.value\"\n class=\"p-2\"\n />\n </div>\n </BlockContentTab>\n </div>\n <div v-else class=\"mt-6\">\n <div>\n <p class=\"italic\">\n {{ t('block.noDescription') }}\n </p>\n </div>\n </div>\n </BlockContentTab>\n </div>\n </BlockContentTab>\n </div>\n </BlockContentTab>\n</template>\n\n<style>\n/* Avoid operation details growing outside available space. The way DaisyUI tabs work, this sometimes fails. Therefore we do this bit of magic to ensure everything is correct. */\n.SizeLimitOperationDetails {\n max-width: calc(var(--main-content-width) - var(--api-details-padding));\n}\n:root {\n --representations-tab-padding: 1rem;\n --example-tab-padding: 1rem;\n}\n.text-monospace {\n font-family: monospace;\n font-size: 1rem;\n}\n[data-method] {\n padding-left: 3rem;\n display: block;\n}\n[data-method]:before {\n position: absolute;\n left: 0px;\n /* For some reason, it looks off by one pixel. This seems to fix it. */\n top: 1px;\n display: inline-block;\n font-size: 0.875rem;\n line-height: 1.5rem;\n vertical-align: middle;\n font-family: monospace;\n font-weight: 700;\n border-radius: 0.25rem;\n width: 3rem;\n}\n[data-method*='GET']:before {\n content: 'GET';\n color: #038a00;\n}\n\n[data-method*='POST']:before {\n content: 'POST';\n color: blue;\n}\n\n[data-method*='DELETE']:before {\n content: 'DEL';\n color: #d04040;\n}\n\n[data-method*='PUT']:before {\n content: 'PUT';\n color: #876344;\n}\n\n[data-method*='HEAD']:before,\n[data-method*='PATCH']:before {\n content: 'PATCH';\n color: #696a6b;\n}\n\n[data-method*='OPTIONS']:before {\n content: 'OPT';\n color: #696a6b;\n}\n\n[data-method*='HEAD']:before {\n content: 'HEAD';\n color: #696a6b;\n}\n\n[data-method*='LINK']:before {\n content: 'LINK';\n color: #696a6b;\n}\n\n[data-method*='TRACE']:before {\n content: 'TRACE';\n color: #696a6b;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ParagraphShimmer } from 'vue3-shimmer';\nimport ButtonComponent from '@/components/ButtonComponent.vue';\nimport type { ApiDTO, ApiSchema, BlockApimDetails } from '@/api/types';\nimport { computed, ref, watchEffect } from 'vue';\nimport ApiOperationDetails from '../ApiOperationDetails.vue';\nimport { useI18n } from 'vue-i18n';\nimport { getApiData, getApiSubscriptions } from '@/api/apiM';\nimport { throwOnError, compose } from '@/api/composable';\nimport { useCurrentUser } from '@/api/auth';\nimport { apimproductsRouteId } from '@/config';\n\nconst { t } = useI18n();\n\nconst props = defineProps<{\n config: BlockApimDetails;\n versionNumber?: string;\n}>();\n\nconst emit = defineEmits<{\n (e: 'update:hasSubscription', hasSubscription: boolean): void;\n (e: 'containerLoaded', container: HTMLElement): void;\n}>();\n\nconst apiMContainer = ref<HTMLElement | null>(null);\nconst userInfo = useCurrentUser();\n\nconst { result: apiData } = props.config.apimId\n ? throwOnError(compose(getApiData(props.config.apimId)))\n : { result: ref<ApiDTO | null>(null) };\n\nconst hasSubscription = ref(false);\nwatchEffect(async () => {\n try {\n if (userInfo.value && props.config.apimId) {\n const subs = await getApiSubscriptions(props.config.apimId);\n hasSubscription.value = (subs?.length ?? 0) > 0;\n emit('update:hasSubscription', hasSubscription.value);\n }\n } catch (e) {\n apiData.value = null;\n throw e;\n }\n});\n\nconst apiSchemas = computed<Record<string, ApiSchema> | null>(() =>\n apiData.value?.schema ? JSON.parse(apiData.value.schema)?.schemas : null,\n);\n\n/** For some reason, updates happens at the wrong time if we use a \"normal ref\" (wihout the setter function) */\nconst updateRef = (container: HTMLElement) => {\n if (apiData.value && !apiMContainer.value) {\n apiMContainer.value = container;\n emit('containerLoaded', container);\n }\n};\n</script>\n\n<template>\n <div v-if=\"!props.config.apimId\">\n {{ t('block.NoApi') }}\n </div>\n <div\n v-else\n :ref=\"(container) => updateRef(container as HTMLElement)\"\n class=\"html-render mx-5 mt-16 md:mr-20\"\n >\n <h2 id=\"Api-M\">\n {{ t('block.ApiOperations') }}\n </h2>\n <ParagraphShimmer\n v-if=\"apiData === null\"\n :lines=\"15\"\n :random-size=\"true\"\n class=\"mx-auto w-full max-w-5xl\"\n />\n <p v-else-if=\"(apiData?.operations?.length ?? 0) === 0\">\n {{ t('block.NoApiOperations') }}\n </p>\n <RouterLink\n v-else-if=\"!!userInfo && !hasSubscription\"\n :to=\"{ name: apimproductsRouteId }\"\n class=\"mb-4 block\"\n >\n <ButtonComponent\n class=\"self-center\"\n type=\"primary\"\n :text=\"t('block.requestApiMAccess')\"\n />\n </RouterLink>\n <div role=\"tablist\" class=\"tabs tabs-lifted\">\n <ApiOperationDetails\n v-for=\"(operation, index) in apiData?.operations\"\n :key=\"operation.name\"\n :operation=\"operation\"\n :has-api-subscription=\"hasSubscription\"\n :apim-schema=\"apiSchemas\"\n :version-number=\"versionNumber\"\n :initial-checked=\"index === 0\"\n :endpoint-data=\"apiData\"\n />\n </div>\n </div>\n</template>\n\n<style>\n:root {\n --api-details-padding: 6.25rem;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport type { Tag, TagGroup } from '@/api/types';\nimport { useCategoriesLazy, useCategoryHomePageLink } from '@/api/category';\nimport { useTagGroup, useTags } from '@/api/tags';\nimport TagRenderer from './TagRenderer.vue';\nimport { getBlocksRouteLink } from '@/utilities/routeUtils';\nimport type { RouteLocation } from 'vue-router';\nimport { useRouter } from 'vue-router';\nimport ButtonComponent from './ButtonComponent.vue';\nimport { useI18n } from 'vue-i18n';\n\nconst props = defineProps<{\n group: TagGroup['id'] | 'categories';\n list?: number[];\n maxItems?: number;\n showAllTags?: boolean;\n showGroupLabel?: boolean;\n size?: 'badge-xs' | 'badge-sm' | 'badge-md' | 'badge-lg';\n}>();\n\nconst { t } = useI18n();\n\nconst tagGroupId = computed(() =>\n props.group === 'categories' ? undefined : props.group,\n);\nconst { result: tagGroup } = useTagGroup(tagGroupId);\nconst { result: tags } = useTags(tagGroupId);\nconst { result: categories } = useCategoriesLazy();\n\nconst router = useRouter();\nconst _items = computed(\n ():\n | (Pick<Tag, 'text' | 'color' | 'tagGroups' | 'primaryTagGroupId'> & {\n link: RouteLocation;\n })[]\n | undefined => {\n if (props.group === 'categories') {\n return categories.value?.map((c) => ({\n text: c.name,\n color: c.color,\n link: useCategoryHomePageLink(c, router)!,\n }));\n } else {\n if (props.list) {\n return tags.value\n ?.filter((t) => props.list?.includes(t.id))\n ?.map((t) => ({\n text: t.text,\n tagGroups: t.tagGroups,\n primaryTagGroupId: t.primaryTagGroupId,\n link: router.resolve(\n getBlocksRouteLink(t.homePageId, { tags: t.id }),\n ),\n }));\n } else {\n return tags.value?.map((t) => ({\n text: t.text,\n link: router.resolve(\n getBlocksRouteLink(t.homePageId, { tags: t.id }),\n ),\n }));\n }\n }\n },\n);\nconst showAllToggle = ref(false);\nconst items = computed(() =>\n props.showAllTags\n ? _items.value\n : showAllToggle.value\n ? _items.value\n : _items.value?.slice(0, props.maxItems),\n);\n</script>\n\n<template>\n <div class=\"my-8 flex flex-col\">\n <div class=\"grid grid-cols-1 gap-4 sm:grid-cols-5\">\n <h3 v-if=\"showGroupLabel\" class=\"ml-0 mt-0 text-sm sm:col-span-2\">\n {{ tagGroup?.label.no }}\n </h3>\n <div\n class=\"flex flex-wrap gap-2\"\n :class=\"showGroupLabel ? 'col-span-3' : 'col-span-4'\"\n >\n <RouterLink v-for=\"item in items\" :key=\"item.text.no\" :to=\"item.link\">\n <TagRenderer\n class=\"inline-flex\"\n :tags=\"[item]\"\n :size=\"size ? size : 'badge-lg'\"\n :color=\"tagGroup?.color ?? item.color\"\n />\n </RouterLink>\n </div>\n </div>\n <ButtonComponent\n v-if=\"!showAllTags && _items && maxItems && _items?.length > maxItems\"\n :text=\"t(showAllToggle ? 'tagList.less' : 'tagList.more')\"\n class=\"self-end\"\n @click=\"showAllToggle = !showAllToggle\"\n />\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { ArrayItem, VueClass } from '@/api/types';\nimport type { StyleValue } from 'vue';\n\ntype ClassList = ArrayItem<VueClass>[];\n\nexport function getOuterCssProperties(\n item: Translated<LayoutItem>,\n): StyleValue {\n return {\n '--col-span': item.colSpan,\n };\n}\nexport function getInnerCssProperties(\n item: Translated<LayoutItem>,\n isEditing?: boolean,\n): StyleValue | undefined {\n if (item.mode === 'grid') {\n return {\n '--mobile-column-count': item.cols ?? 1,\n '--md-column-count': item.mdCols ?? 1,\n };\n } else if (forceToGridMode(item, isEditing)) {\n return { '--mobile-column-count': 1, '--md-column-count': 1 };\n } else {\n return undefined;\n }\n}\n\n/** Get the classes that should be added to both LayoutOuterBlock and LayoutBlock */\nexport function getOuterAndInnerLayoutClasses(\n item: Translated<LayoutItem>,\n addShrinkGrowData?: AddShrinkGrowData,\n): ClassList {\n let classes: ClassList = [item.vAlign, item.hAlign];\n if (addShrinkGrowData) {\n classes = classes.concat([\n { 'shrink grow': !isAbsoluteFlexSize(item, addShrinkGrowData) },\n ]);\n }\n return classes;\n}\n\n/** Get the classes that are added to the link item (if there is a link), or to the main LayoutBlock if there is no link */\nexport function getLinkLevelClasses(item: Translated<LayoutItem>): ClassList {\n return [\n item.bgColor ? `bg-gnist-${item.bgColor}` : '',\n 'min-w-0',\n { 'w-full': !item.width?.w },\n { 'h-full': !item.height?.h },\n { 'rounded-md shadow-md': item.boxStyle === 'gnistLink' },\n { 'alert alert-warning rounded': item.boxStyle === 'daisyUIwarning' },\n ];\n}\n\n/** Get the classes that should only be added to the LayoutBlock */\nexport function getLayoutClasses(\n item: Translated<LayoutItem>,\n isEditing?: boolean,\n): ClassList {\n return getBlockAlignmentClasses(item)\n .concat([\n forceToGridMode(item, isEditing) ? 'grid' : item.mode,\n ...Object.values(item.width ?? {}),\n ...Object.values(item.height ?? {}),\n ...Object.values(item.padding ?? {}),\n ...Object.values(item.position ?? {}),\n ])\n .concat(getOuterAndInnerLayoutClasses(item));\n}\n\n/** Get classes related to block alignment. These will be added to both the LayoutBlock and the MarkdownRenderer (if one is present) */\nfunction getBlockAlignmentClasses(\n item: Translated<LayoutItem>,\n addMode = false,\n): ClassList {\n if (item.mode === 'block') return [];\n let classes: ClassList = [\n item.alignContent,\n item.alignItems,\n item.justifyContent,\n ...Object.values(item.gap ?? {}),\n ]\n .concat(item.mode === 'flex' ? [item.direction, item.wrap] : [])\n .concat(item.mode === 'grid' ? [item.justifyItems] : []);\n if (addMode) {\n classes = classes.concat([item.mode]);\n }\n return classes;\n}\n\nexport type AddShrinkGrowData = {\n parentMode?: LayoutItem['mode'];\n parentDirection?: LayoutItem['direction'];\n};\n\n/** Render the block as a 1x1 grid (to take advantage of grid mode alignment),\\\n * given that one of these is true:\\\n * **1)** the block has \"content alignment\", or\\\n * **2)** we are in \"inline editing\" mode\n */\nfunction forceToGridMode(\n item: Translated<LayoutItem>,\n isEditing: boolean | undefined,\n): boolean {\n return !!isEditing || (!item.children && (!!item.vAlign || !!item.hAlign));\n}\nfunction isAbsoluteFlexSize(\n item: Translated<LayoutItem>,\n addShrinkGrowData: AddShrinkGrowData,\n) {\n if (addShrinkGrowData.parentMode !== 'flex') return false;\n const verticalFlow =\n addShrinkGrowData.parentDirection === 'flex-col' ||\n addShrinkGrowData.parentDirection === 'flex-col-reverse';\n if (verticalFlow) return !!item.height?.h;\n else return !!item.width?.w;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport type { LayoutItem, Translated } from '@/api/types';\nimport type { ComponentPublicInstance } from 'vue';\nimport type { IBlobUrlInput } from '@/api/blob';\nimport MarkdownRenderer from '@/components/block/MarkdownRenderer.vue';\nimport ImageRenderer from '@/components/block/ImageRenderer.vue';\nimport BlockList from '@/components/BlockList.vue';\nimport TagList from '@/components/TagList.vue';\nimport type { ConnectionInfo } from '@/components/BlockListConnectionHelper';\nimport SearchBar from '@/components/SearchBar.vue';\nimport { getDocumentRouteFromListRoute } from '@/utilities/routeUtils';\n\ndefineProps<{\n item: Translated<LayoutItem>;\n blobLocation: IBlobUrlInput;\n onRefCreated: (ref: Element | ComponentPublicInstance | null) => void;\n connection: ConnectionInfo | undefined;\n editorPreview?: boolean;\n}>();\n</script>\n\n<template>\n <MarkdownRenderer\n v-if=\"item.contentType === 'markdown' && item.markdown !== undefined\"\n :value=\"item.markdown\"\n :blob-location=\"blobLocation\"\n :class=\"getBlockAlignmentClasses(item, true)\"\n :remove-link-href=\"editorPreview\"\n />\n <BlockList\n v-else-if=\"item.contentType === 'doclist' && item.doclist !== undefined\"\n :ref=\"onRefCreated\"\n class=\"gnist-page-width pb-8\"\n :style=\"item.doclist.style\"\n :route-name=\"getDocumentRouteFromListRoute(item.doclist.doclistRoute)\"\n :options=\"{\n mode: 'normal',\n includeBacklog: item.doclist.includeBacklog,\n }\"\n :show-backlog-filter=\"item.doclist.includeBacklog\"\n :category-id-filter=\"item.doclist.categoryIds\"\n :hide-search=\"!item.doclist.showSearch\"\n :hide-org-filter=\"!item.doclist.showOrgFilter\"\n :hide-category-filter=\"!item.doclist.showCategoryFilter\"\n :hide-tag-filter=\"!item.doclist.showTagFilter\"\n :max-items=\"item.doclist.maxItems\"\n :card-template-id=\"item.doclist.cardTemplateId\"\n :config-search-text=\"item.doclist.searchText\"\n :pre-selected-tags=\"\n item.doclist.tags.length === 0 ? undefined : item.doclist.tags\n \"\n :exclude-tags=\"\n item.doclist.notTags?.length === 0 ? undefined : item.doclist.notTags\n \"\n :pre-selected-org-ids=\"item.doclist.orgIds\"\n :connection=\"connection\"\n />\n <div\n v-else-if=\"item.contentType === 'searchbar' && item.searchbar !== undefined\"\n >\n <SearchBar\n class=\"text-p2 my-2 w-full\"\n :style=\"item.searchbar.style\"\n :initial-value=\"item.searchbar.searchText\"\n :target-route=\"connection ? undefined : item.searchbar.doclistRoute\"\n :connection=\"connection\"\n :placeholder=\"item.searchbar.placeholder\"\n />\n </div>\n <div\n v-else-if=\"item.contentType === 'image' && item.image !== undefined\"\n class=\"h-full w-full\"\n >\n <ImageRenderer\n :value=\"item.image\"\n :blob-location=\"blobLocation\"\n class=\"h-full min-h-0 [&>img]:h-full\"\n no-default-class\n />\n </div>\n <TagList\n v-else-if=\"item.contentType === 'taglist' && item.taglist !== undefined\"\n :group=\"item.taglist.list\"\n :max-items=\"item.taglist.maxItems\"\n :show-all-tags=\"item.taglist.showAllTags\"\n :show-group-label=\"item.taglist.showGroupLabel\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport { useRouter } from 'vue-router';\nimport { notFoundRouteName } from '@/config';\nimport type { LayoutItem, Translated } from '@/api/types';\nimport { computed } from 'vue';\nimport type { IBlobUrlInput } from '@/api/blob';\nimport OptionalRouterLink from '@/components/OptionalRouterLink.vue';\nimport LayoutContentRenderer, {\n getInnerCssProperties,\n getLayoutClasses,\n getLinkLevelClasses,\n getOuterCssProperties,\n getOuterAndInnerLayoutClasses,\n type AddShrinkGrowData,\n} from '@/components/block/LayoutContentRenderer.vue';\nimport {\n useBlockListConnections,\n type TranslatedConnectionItem,\n} from '@/components/BlockListConnectionHelper';\nimport { toRef } from 'vue';\n\nconst props = defineProps<\n {\n item: Translated<LayoutItem>;\n blobLocation: IBlobUrlInput;\n flatList?: TranslatedConnectionItem[];\n } & AddShrinkGrowData\n>();\n\nconst router = useRouter();\nconst targetRoute = computed(() => {\n if (!props.item.url) return undefined;\n const target = router.resolve(props.item.url);\n return target.name === notFoundRouteName ? undefined : target;\n});\n\nconst { onRefCreated, connection, flattened } = useBlockListConnections(\n toRef(props, 'item'),\n toRef(props, 'flatList'),\n);\n</script>\n\n<template>\n <div\n class=\"LayoutOuterBlock min-h-0\"\n :class=\"getOuterAndInnerLayoutClasses(item, props)\"\n :style=\"getOuterCssProperties(item)\"\n >\n <OptionalRouterLink\n :href=\"!!targetRoute ? undefined : item.url\"\n :to=\"targetRoute\"\n class=\"LayoutBlock\"\n :class=\"getLayoutClasses(item)\"\n :outer-class=\"getLinkLevelClasses(item)\"\n :style=\"getInnerCssProperties(item)\"\n >\n <LayoutContentRenderer\n :item=\"item\"\n :blob-location=\"blobLocation\"\n :on-ref-created=\"onRefCreated\"\n :connection=\"connection\"\n />\n <template v-if=\"item.children\">\n <LayoutRenderer\n v-for=\"(_, child_index) in item.children\"\n :key=\"item.children[child_index].id\"\n :item=\"item.children[child_index]\"\n :blob-location=\"blobLocation\"\n :flat-list=\"flattened\"\n :parent-mode=\"item.mode\"\n :parent-direction=\"item.direction\"\n />\n </template>\n </OptionalRouterLink>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport {\n getApimDetails,\n type Block,\n type BlockApimDetails,\n type BlockImage,\n type BlockLocaleValue,\n type Link,\n type Schema,\n type Step,\n type Translated,\n type InteractiveImage,\n type LayoutItem,\n} from '@/api/types';\nimport { computed, ref, useAttrs } from 'vue';\nimport SinglelineRenderer from '@/components/block/SinglelineRenderer.vue';\nimport MultilineRenderer from '@/components/block/MultilineRenderer.vue';\nimport MarkdownRenderer from '@/components/block/MarkdownRenderer.vue';\nimport LinkRenderer from '@/components/block/LinkRenderer.vue';\nimport ImageRenderer from '@/components/block/ImageRenderer.vue';\nimport BlockSteps from '@/components/BlockSteps.vue';\nimport InteractiveImageRenderer from '@/components/block/InteractiveImageRenderer.vue';\nimport { translateBlockValue } from '@/i18n';\nimport { type supported_locale } from '@/config';\nimport { useI18n } from 'vue-i18n';\nimport ApiDetails from '@/components/block/ApiDetails.vue';\nimport LayoutRenderer from './LayoutRenderer.vue';\n\nconst props = defineProps<{\n block: Block;\n containers?: { idx: number; el: HTMLElement }[];\n}>();\n\nconst emit = defineEmits<{\n (e: 'update:containers', container: { idx: number; el: HTMLElement }[]): void;\n}>();\n\nconst { locale } = useI18n();\n\nconst apimId = computed(() => getApimDetails(props.block?.content)?.apimId);\n\nconst updateRef = (container: HTMLElement, idx: number, skip = false) => {\n if (skip || !props.containers) return;\n if (!props.containers.find((i) => i.idx == idx)) {\n emit('update:containers', [...props.containers, { idx, el: container }]);\n }\n};\n\nconst mappedContent = computed(() => {\n const contentKeys = Object.keys(props.block.content);\n const hasCustomSchemaContent = !!props.block.customSchema?.schema.find((i) =>\n contentKeys.includes(i.name),\n );\n const hasBlockSchemaContent = !!props.block.category?.schema?.find((i) =>\n contentKeys.includes(i.name),\n );\n const schema = hasCustomSchemaContent\n ? props.block.customSchema!.schema\n : hasBlockSchemaContent\n ? props.block.category!.schema!\n : contentKeys.map(\n (k): Schema => ({\n name: k,\n type: 'markdown',\n title: '',\n showTitle: false,\n }),\n );\n return schema.map((s) => ({\n schema: s,\n itemContent: translateBlockValue(\n props.block.content[s.name] ?? '',\n locale.value as supported_locale,\n s.type,\n ),\n }));\n});\nconst attrs = useAttrs();\nconst blobLocation = computed(() => ({\n blockId: props.block.blockId,\n versionId: props.block.currentVersionId,\n}));\n\nconst hasSubscription = ref(false);\n</script>\n\n<template>\n <template\n v-for=\"({ itemContent, schema }, idx) in mappedContent\"\n :key=\"schema.name\"\n >\n <div\n :ref=\"\n (container) =>\n updateRef(container as HTMLElement, idx, schema.type === 'apim')\n \"\n :class=\"[\n attrs.class,\n [\n {\n 'html-render':\n schema.type !== 'markdown' && schema.type !== 'layout',\n },\n ],\n ]\"\n :data-cy-id=\"`field_${schema.name}`\"\n >\n <div v-if=\"itemContent\">\n <SinglelineRenderer\n v-if=\"schema.type === 'singleline'\"\n :schema=\"schema\"\n :value=\"itemContent as Translated<BlockLocaleValue>\"\n />\n <MultilineRenderer\n v-else-if=\"schema.type === 'multiline'\"\n :schema=\"schema\"\n :value=\"itemContent as Translated<BlockLocaleValue>\"\n />\n <template v-else-if=\"schema.type === 'markdown'\">\n <MarkdownRenderer\n v-if=\"block\"\n :schema=\"schema\"\n :value=\"itemContent as Translated<BlockLocaleValue>\"\n :blob-location=\"blobLocation\"\n />\n </template>\n <LinkRenderer\n v-else-if=\"schema.type === 'link'\"\n :schema=\"schema\"\n :value=\"itemContent as Translated<Link>\"\n />\n <template v-else-if=\"schema.type === 'image'\">\n <ImageRenderer\n v-if=\"block\"\n :schema=\"schema\"\n :value=\"itemContent as Translated<BlockImage>\"\n :blob-location=\"blobLocation\"\n class=\"w-full\"\n />\n </template>\n <template v-else-if=\"schema.type === 'steps'\">\n <BlockSteps\n v-if=\"block\"\n :steps=\"itemContent as Translated<Step[]>[]\"\n :schema=\"schema\"\n class=\"mx-5 mt-20\"\n :api-id=\"apimId\"\n :has-api-subscription=\"hasSubscription\"\n :block-id=\"block.blockId\"\n :version-id=\"block.currentVersionId\"\n />\n </template>\n <ApiDetails\n v-else-if=\"schema.type === 'apim'\"\n :config=\"itemContent as BlockApimDetails\"\n :version-number=\"block.currentVersionNumber\"\n @update:has-subscription=\"(hasSub) => (hasSubscription = hasSub)\"\n @container-loaded=\"(container) => updateRef(container, idx)\"\n />\n <InteractiveImageRenderer\n v-else-if=\"schema.type === 'interactive_image'\"\n :value=\"itemContent as Translated<InteractiveImage>\"\n :blob-location=\"blobLocation\"\n />\n <LayoutRenderer\n v-else-if=\"schema.type === 'layout'\"\n :item=\"itemContent as Translated<LayoutItem>\"\n :blob-location=\"blobLocation\"\n />\n <!-- Default renderer if schema type is unknown -->\n <div v-else>\n <MarkdownRenderer\n v-if=\"block\"\n :schema=\"{ showTitle: false } as Schema\"\n :value=\"itemContent as Translated<BlockLocaleValue>\"\n :blob-location=\"blobLocation\"\n />\n </div>\n </div>\n </div>\n </template>\n</template>\n","/*!\n * vue-scrollto v2.20.0\n * (c) 2019 Randjelovic Igor\n * @license MIT\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global['vue-scrollto'] = factory());\n}(this, (function () { 'use strict';\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n\n function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n }\n\n /**\n * https://github.com/gre/bezier-easing\n * BezierEasing - use bezier curve for transition easing function\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\n */\n\n // These values are established by empiricism with tests (tradeoff: performance VS precision)\n var NEWTON_ITERATIONS = 4;\n var NEWTON_MIN_SLOPE = 0.001;\n var SUBDIVISION_PRECISION = 0.0000001;\n var SUBDIVISION_MAX_ITERATIONS = 10;\n\n var kSplineTableSize = 11;\n var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\n var float32ArraySupported = typeof Float32Array === 'function';\n\n function A (aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; }\n function B (aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; }\n function C (aA1) { return 3.0 * aA1; }\n\n // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\n function calcBezier (aT, aA1, aA2) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; }\n\n // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\n function getSlope (aT, aA1, aA2) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); }\n\n function binarySubdivide (aX, aA, aB, mX1, mX2) {\n var currentX, currentT, i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n return currentT;\n }\n\n function newtonRaphsonIterate (aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) {\n return aGuessT;\n }\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n }\n\n function LinearEasing (x) {\n return x;\n }\n\n var src = function bezier (mX1, mY1, mX2, mY2) {\n if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) {\n throw new Error('bezier x values must be in [0, 1] range');\n }\n\n if (mX1 === mY1 && mX2 === mY2) {\n return LinearEasing;\n }\n\n // Precompute samples table\n var sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n for (var i = 0; i < kSplineTableSize; ++i) {\n sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n\n function getTForX (aX) {\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n\n // Interpolate to provide an initial guess for t\n var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n\n var initialSlope = getSlope(guessForT, mX1, mX2);\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n }\n\n return function BezierEasing (x) {\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n if (x === 0) {\n return 0;\n }\n if (x === 1) {\n return 1;\n }\n return calcBezier(getTForX(x), mY1, mY2);\n };\n };\n\n var easings = {\n ease: [0.25, 0.1, 0.25, 1.0],\n linear: [0.0, 0.0, 1.0, 1.0],\n 'ease-in': [0.42, 0.0, 1.0, 1.0],\n 'ease-out': [0.0, 0.0, 0.58, 1.0],\n 'ease-in-out': [0.42, 0.0, 0.58, 1.0]\n };\n\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection\n var supportsPassive = false;\n\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassive = true;\n }\n });\n window.addEventListener('test', null, opts);\n } catch (e) {}\n\n var _ = {\n $: function $(selector) {\n if (typeof selector !== 'string') {\n return selector;\n }\n\n return document.querySelector(selector);\n },\n on: function on(element, events, handler) {\n var opts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {\n passive: false\n };\n\n if (!(events instanceof Array)) {\n events = [events];\n }\n\n for (var i = 0; i < events.length; i++) {\n element.addEventListener(events[i], handler, supportsPassive ? opts : false);\n }\n },\n off: function off(element, events, handler) {\n if (!(events instanceof Array)) {\n events = [events];\n }\n\n for (var i = 0; i < events.length; i++) {\n element.removeEventListener(events[i], handler);\n }\n },\n cumulativeOffset: function cumulativeOffset(element) {\n var top = 0;\n var left = 0;\n\n do {\n top += element.offsetTop || 0;\n left += element.offsetLeft || 0;\n element = element.offsetParent;\n } while (element);\n\n return {\n top: top,\n left: left\n };\n }\n };\n\n var abortEvents = ['mousedown', 'wheel', 'DOMMouseScroll', 'mousewheel', 'keyup', 'touchmove'];\n var defaults = {\n container: 'body',\n duration: 500,\n lazy: true,\n easing: 'ease',\n offset: 0,\n force: true,\n cancelable: true,\n onStart: false,\n onDone: false,\n onCancel: false,\n x: false,\n y: true\n };\n function setDefaults(options) {\n defaults = _extends({}, defaults, options);\n }\n var scroller = function scroller() {\n var element; // element to scroll to\n\n var container; // container to scroll\n\n var duration; // duration of the scrolling\n\n var easing; // easing to be used when scrolling\n\n var lazy; // checks the target position at each step\n\n var offset; // offset to be added (subtracted)\n\n var force; // force scroll, even if element is visible\n\n var cancelable; // indicates if user can cancel the scroll or not.\n\n var onStart; // callback when scrolling is started\n\n var onDone; // callback when scrolling is done\n\n var onCancel; // callback when scrolling is canceled / aborted\n\n var x; // scroll on x axis\n\n var y; // scroll on y axis\n\n var initialX; // initial X of container\n\n var targetX; // target X of container\n\n var initialY; // initial Y of container\n\n var targetY; // target Y of container\n\n var diffX; // difference\n\n var diffY; // difference\n\n var abort; // is scrolling aborted\n\n var cumulativeOffsetContainer;\n var cumulativeOffsetElement;\n var abortEv; // event that aborted scrolling\n\n var abortFn = function abortFn(e) {\n if (!cancelable) return;\n abortEv = e;\n abort = true;\n };\n\n var easingFn;\n var timeStart; // time when scrolling started\n\n var timeElapsed; // time elapsed since scrolling started\n\n var progress; // progress\n\n function scrollTop(container) {\n var scrollTop = container.scrollTop;\n\n if (container.tagName.toLowerCase() === 'body') {\n // in firefox body.scrollTop always returns 0\n // thus if we are trying to get scrollTop on a body tag\n // we need to get it from the documentElement\n scrollTop = scrollTop || document.documentElement.scrollTop;\n }\n\n return scrollTop;\n }\n\n function scrollLeft(container) {\n var scrollLeft = container.scrollLeft;\n\n if (container.tagName.toLowerCase() === 'body') {\n // in firefox body.scrollLeft always returns 0\n // thus if we are trying to get scrollLeft on a body tag\n // we need to get it from the documentElement\n scrollLeft = scrollLeft || document.documentElement.scrollLeft;\n }\n\n return scrollLeft;\n }\n\n function recalculateTargets() {\n cumulativeOffsetContainer = _.cumulativeOffset(container);\n cumulativeOffsetElement = _.cumulativeOffset(element);\n\n if (x) {\n targetX = cumulativeOffsetElement.left - cumulativeOffsetContainer.left + offset;\n diffX = targetX - initialX;\n }\n\n if (y) {\n targetY = cumulativeOffsetElement.top - cumulativeOffsetContainer.top + offset;\n diffY = targetY - initialY;\n }\n }\n\n function step(timestamp) {\n if (abort) return done();\n if (!timeStart) timeStart = timestamp; // When a site has a lot of media that can be loaded asynchronously,\n // the targetY/targetX may end up in the wrong place during scrolling.\n // So we will check this at each step\n\n if (!lazy) {\n recalculateTargets();\n }\n\n timeElapsed = timestamp - timeStart;\n progress = Math.min(timeElapsed / duration, 1);\n progress = easingFn(progress);\n topLeft(container, initialY + diffY * progress, initialX + diffX * progress);\n timeElapsed < duration ? window.requestAnimationFrame(step) : done();\n }\n\n function done() {\n if (!abort) topLeft(container, targetY, targetX);\n timeStart = false;\n\n _.off(container, abortEvents, abortFn);\n\n if (abort && onCancel) onCancel(abortEv, element);\n if (!abort && onDone) onDone(element);\n }\n\n function topLeft(element, top, left) {\n if (y) element.scrollTop = top;\n if (x) element.scrollLeft = left;\n\n if (element.tagName.toLowerCase() === 'body') {\n // in firefox body.scrollTop doesn't scroll the page\n // thus if we are trying to scrollTop on a body tag\n // we need to scroll on the documentElement\n if (y) document.documentElement.scrollTop = top;\n if (x) document.documentElement.scrollLeft = left;\n }\n }\n\n function scrollTo(target, _duration) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (_typeof(_duration) === 'object') {\n options = _duration;\n } else if (typeof _duration === 'number') {\n options.duration = _duration;\n }\n\n element = _.$(target);\n\n if (!element) {\n return console.warn('[vue-scrollto warn]: Trying to scroll to an element that is not on the page: ' + target);\n }\n\n container = _.$(options.container || defaults.container);\n duration = options.hasOwnProperty('duration') ? options.duration : defaults.duration;\n lazy = options.hasOwnProperty('lazy') ? options.lazy : defaults.lazy;\n easing = options.easing || defaults.easing;\n offset = options.hasOwnProperty('offset') ? options.offset : defaults.offset;\n force = options.hasOwnProperty('force') ? options.force !== false : defaults.force;\n cancelable = options.hasOwnProperty('cancelable') ? options.cancelable !== false : defaults.cancelable;\n onStart = options.onStart || defaults.onStart;\n onDone = options.onDone || defaults.onDone;\n onCancel = options.onCancel || defaults.onCancel;\n x = options.x === undefined ? defaults.x : options.x;\n y = options.y === undefined ? defaults.y : options.y;\n\n if (typeof offset === 'function') {\n offset = offset(element, container);\n }\n\n initialX = scrollLeft(container);\n initialY = scrollTop(container); // calculates cumulative offsets and targetX/Y + diffX/Y\n\n recalculateTargets();\n abort = false;\n\n if (!force) {\n // When the container is the default (body) we need to use the viewport\n // height, not the entire body height\n var containerHeight = container.tagName.toLowerCase() === 'body' ? document.documentElement.clientHeight || window.innerHeight : container.offsetHeight;\n var containerTop = initialY;\n var containerBottom = containerTop + containerHeight;\n var elementTop = targetY - offset;\n var elementBottom = elementTop + element.offsetHeight;\n\n if (elementTop >= containerTop && elementBottom <= containerBottom) {\n // make sure to call the onDone callback even if there is no need to\n // scroll the container. Fixes #111 (ref #118)\n if (onDone) onDone(element);\n return;\n }\n }\n\n if (onStart) onStart(element);\n\n if (!diffY && !diffX) {\n if (onDone) onDone(element);\n return;\n }\n\n if (typeof easing === 'string') {\n easing = easings[easing] || easings['ease'];\n }\n\n easingFn = src.apply(src, easing);\n\n _.on(container, abortEvents, abortFn, {\n passive: true\n });\n\n window.requestAnimationFrame(step);\n return function () {\n abortEv = null;\n abort = true;\n };\n }\n\n return scrollTo;\n };\n\n var _scroller = scroller();\n\n var bindings = []; // store binding data\n\n function deleteBinding(el) {\n for (var i = 0; i < bindings.length; ++i) {\n if (bindings[i].el === el) {\n bindings.splice(i, 1);\n return true;\n }\n }\n\n return false;\n }\n\n function findBinding(el) {\n for (var i = 0; i < bindings.length; ++i) {\n if (bindings[i].el === el) {\n return bindings[i];\n }\n }\n }\n\n function getBinding(el) {\n var binding = findBinding(el);\n\n if (binding) {\n return binding;\n }\n\n bindings.push(binding = {\n el: el,\n binding: {}\n });\n return binding;\n }\n\n function handleClick(e) {\n var ctx = getBinding(this).binding;\n if (!ctx.value) return;\n e.preventDefault();\n\n if (typeof ctx.value === 'string') {\n return _scroller(ctx.value);\n }\n\n _scroller(ctx.value.el || ctx.value.element, ctx.value);\n }\n\n var directiveHooks = {\n bind: function bind(el, binding) {\n getBinding(el).binding = binding;\n\n _.on(el, 'click', handleClick);\n },\n unbind: function unbind(el) {\n deleteBinding(el);\n\n _.off(el, 'click', handleClick);\n },\n update: function update(el, binding) {\n getBinding(el).binding = binding;\n }\n };\n var VueScrollTo = {\n bind: directiveHooks.bind,\n unbind: directiveHooks.unbind,\n update: directiveHooks.update,\n beforeMount: directiveHooks.bind,\n unmounted: directiveHooks.unbind,\n updated: directiveHooks.update,\n scrollTo: _scroller,\n bindings: bindings\n };\n\n var install = function install(Vue, options) {\n if (options) setDefaults(options);\n Vue.directive('scroll-to', VueScrollTo);\n var properties = Vue.config.globalProperties || Vue.prototype;\n properties.$scrollTo = VueScrollTo.scrollTo;\n };\n\n if (typeof window !== 'undefined' && window.Vue) {\n window.VueScrollTo = VueScrollTo;\n window.VueScrollTo.setDefaults = setDefaults;\n window.VueScrollTo.scroller = scroller;\n if (window.Vue.use) window.Vue.use(install);\n }\n\n VueScrollTo.install = install;\n\n return VueScrollTo;\n\n})));\n","<script setup lang=\"ts\">\nimport { ensureTabVisible } from '@/components/BlockContentTab.vue';\nimport { type BlockMenuItem, headingLevels } from './BlockToc.vue';\nimport vueScrollTo from 'vue-scrollto';\nimport MaterialIcon from '@/components/MaterialIcon.vue';\nimport { ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nconst { t } = useI18n();\n\ndefineProps<{\n scrollto: string | null;\n title: string;\n items?: BlockMenuItem[];\n level?: (typeof headingLevels)[number];\n}>();\n\nconst showSubtitle = ref(false);\n\nconst toggleSubtitle = () => {\n showSubtitle.value = !showSubtitle.value;\n};\n</script>\n\n<template>\n <li>\n <a\n v-if=\"scrollto\"\n class=\"my-2 block p-1 px-2 hover:cursor-pointer hover:underline\"\n :class=\"[\n { 'text-left-menu-1': level === 'h2' },\n { 'text-left-menu-2': level === 'h3' },\n ]\"\n href=\"#\"\n @click.prevent=\"\n ensureTabVisible(scrollto);\n vueScrollTo.scrollTo(`#${scrollto}`);\n \"\n >\n <div class=\"flex items-center\">\n <span\n class=\"mr-2 text-2xl hover:text-gray-500\"\n :class=\"{\n 'cursor-pointer': level === 'h2' && items && items.length > 0,\n }\"\n :aria-label=\"showSubtitle ? t('block.collapse') : t('block.expand')\"\n @click.stop=\"toggleSubtitle\"\n >\n <MaterialIcon v-if=\"level === 'h2' && items && items.length > 0\">\n {{ showSubtitle ? 'expand_less' : 'expand_more' }}\n </MaterialIcon>\n <MaterialIcon v-else class=\"invisible\">expand_more</MaterialIcon>\n </span>\n <span class=\"ml-2\">{{ title }}</span>\n </div>\n </a>\n <template v-else>\n <div class=\"my-2 block items-center p-1 px-2\">\n <span\n class=\"mr-2 text-2xl hover:text-gray-500\"\n :class=\"{\n 'cursor-pointer': level === 'h2' && items && items.length > 0,\n }\"\n @click.stop=\"toggleSubtitle\"\n >\n <MaterialIcon\n v-if=\"level === 'h2' && items && items.length > 0\"\n :aria-label=\"showSubtitle ? t('block.collapse') : t('block.expand')\"\n >\n {{ showSubtitle ? 'expand_less' : 'expand_more' }}\n </MaterialIcon>\n <MaterialIcon v-else class=\"invisible\">expand_more</MaterialIcon>\n </span>\n <span class=\"ml-2\">{{ title }}</span>\n </div>\n </template>\n <ul v-if=\"items && showSubtitle\" class=\"pl-6\">\n <BlockTocItem\n v-for=\"(item, index) in items\"\n :key=\"index\"\n :scrollto=\"item.id\"\n :title=\"item.title\"\n :items=\"item.items\"\n :level=\"headingLevels[headingLevels.indexOf(level ?? 'h2') + 1]\"\n />\n </ul>\n </li>\n</template>\n","<script lang=\"ts\">\nexport type BlockMenuItem = {\n id: string | null;\n title: string;\n items?: BlockMenuItem[];\n level: number;\n};\nexport const headingLevels = ['h2', 'h3', 'h4'] as const;\n</script>\n<script setup lang=\"ts\">\nimport MaterialIcon from './../MaterialIcon.vue';\nimport BlockTocItem from './BlockTocItem.vue';\nimport { ref, watch, watchEffect } from 'vue';\nimport { useRoute } from 'vue-router';\nimport { useI18n } from 'vue-i18n';\n\nconst { t, locale } = useI18n();\n\nconst props = withDefaults(\n defineProps<{\n containers: { idx: number; el: HTMLElement }[];\n /** Markdown is rendered with all headings reduced one level, therefore you can choose h2-h4 */\n levels?: [(typeof headingLevels)[number], (typeof headingLevels)[number]?];\n }>(),\n {\n readyBlockContainer: null,\n readyApimContainer: null,\n steps: null,\n levels: () => ['h2', 'h3'],\n },\n);\n\nconst route = useRoute();\nconst menuItems = ref<BlockMenuItem[]>([]);\n\nfunction extractMenuItems(nodes: Element[]): BlockMenuItem[] {\n const TEXT_NODE = 3;\n const getText = (e: Element): string | null => {\n if ((e as HTMLElement).innerText) {\n return (e as HTMLElement).innerText;\n } else if (e.textContent) {\n return e.textContent;\n } else {\n return Array.from(e.childNodes ?? []).filter(\n (i) => i.nodeType === TEXT_NODE,\n )[0]?.textContent;\n }\n };\n return nodes.map(\n (h): BlockMenuItem => ({\n id: h.getAttribute('id'),\n title: getText(h) ?? '-',\n level: parseInt(h.nodeName.match(/\\d/)?.[0] ?? '20'),\n }),\n );\n}\nconst updateMenu = (containers: typeof props.containers) => {\n menuItems.value = [...containers]\n .sort((a, b) => a.idx - b.idx)\n .map((container) => exctractToc(container.el))\n .flat();\n};\nwatchEffect(() => updateMenu(props.containers));\nwatch(locale, () => setTimeout(() => updateMenu(props.containers), 250)); // We need to allow for a bit of time for other changes to propagate before rebuilding the menu\n\nfunction exctractToc(container: HTMLElement): BlockMenuItem[] {\n const nodes = container.querySelectorAll(\n props.levels.map((l) => `.html-render ${l}`).join(','),\n );\n if (!nodes) return [];\n const flatmenu = extractMenuItems(Array.from(nodes));\n if (flatmenu.length === 0) return flatmenu;\n let parent = flatmenu.shift() as BlockMenuItem;\n const result = [parent];\n for (const item of flatmenu) {\n if (parent.level < item.level) {\n if (!parent.items) parent.items = [];\n parent.items.push(item);\n } else {\n result.push(item);\n parent = item;\n }\n }\n return result;\n}\n\nwatchEffect(() => {\n if (route.hash) {\n const target = route.hash.replace('#', '');\n if (target.length > 0) {\n const element = document.getElementById(target);\n if (element) element.scrollIntoView();\n }\n }\n});\n\nconst scrollToTop = () => {\n window.scrollTo({ top: 0, left: 0, behavior: 'smooth' });\n};\n</script>\n\n<template>\n <ul\n class=\"sticky top-0 z-10 ml-2 hidden min-h-screen border-r border-gray-300 p-2 text-gnist-black lg:block\"\n >\n <BlockTocItem\n v-for=\"(item, index) in menuItems\"\n :key=\"index\"\n :scrollto=\"item.id\"\n :title=\"item.title\"\n :items=\"item.items\"\n :level=\"levels[0]\"\n />\n\n <li>\n <button\n class=\"gnist-button gnist-icon-button gnist-button-primary m-2 ml-10 mr-2 mt-6 hover:cursor-pointer\"\n :title=\"t('gettingStarted.scrollToTop')\"\n @click=\"scrollToTop\"\n >\n <MaterialIcon aria-hidden=\"true\"> expand_less </MaterialIcon>\n </button>\n </li>\n </ul>\n</template>\n","<script lang=\"ts\" setup>\nimport type { PageTemplateProps } from '@/api/types';\nimport BlockPageBanner from '@/components/block/BlockPageBanner.vue';\nimport BlockRenderer from '@/components/block/BlockRenderer.vue';\nimport BlockToc from '@/components/block/BlockToc.vue';\nimport { ref } from 'vue';\n\ndefineProps<PageTemplateProps>();\nconst containers = ref<{ idx: number; el: HTMLElement }[]>([]);\n</script>\n\n<template>\n <BlockPageBanner\n :title=\"block.name ?? ''\"\n :block=\"block\"\n :description=\"block.description ?? ''\"\n :tags=\"block.tags ?? []\"\n show-version-selector\n :is-preview=\"!!isPreview\"\n />\n <div class=\"w-full text-gnist-black\" :class=\"[`bg-gnist-${bgColor}`]\">\n <div class=\"gnist-page-width grow pb-16 lg:grid lg:grid-cols-4 lg:gap-10\">\n <div class=\"relative col-span-1 ml-auto pt-8 lg:pb-24\">\n <BlockToc v-if=\"block\" :containers=\"containers\" />\n </div>\n <div class=\"col-span-3\">\n <!-- Content -->\n <div\n class=\"mx-5 mt-10 lg:max-w-2xl\"\n data-cy-id=\"contentContainer\"\n :data-cy-state=\"!!block.content ? 'loaded' : 'not_loaded'\"\n >\n <BlockRenderer\n v-model:containers=\"containers\"\n :block=\"block\"\n class=\"mb-4\"\n />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style>\n/* Store a variable that can be used to calculate the width of this container:\n * remove 17px for the scrollbar\n * remove the \"mx-5\" above\n * on large screens, calculate col-span-3 with a gap of 2.5rem\n*/\n:root {\n --main-content-width: calc(100vw - 17px - 2.5rem);\n @media screen and (min-width: lg) {\n /* prettier-ignore */\n --main-content-width: calc((((100vw - 17px) - 7.5rem) / 4 * 3) + 5rem - 2.5rem);\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { Tag } from '@/api/types';\nimport { translateStringOrLocale } from '@/i18n';\nimport { computed } from 'vue';\nimport TagRenderer from '@/components/TagRenderer.vue';\n\nconst props = defineProps<{\n tags?: Pick<Tag, 'text' | 'color'>[];\n}>();\n\nconst translatedTagList = computed(() =>\n props.tags?.map((t) => '#' + translateStringOrLocale(t.text).value).join(' '),\n);\n</script>\n\n<template>\n <div\n class=\"max-w-full\"\n :class=\"{ tooltip: translatedTagList }\"\n :data-tip=\"translatedTagList\"\n >\n <div\n v-if=\"(tags?.length ?? 0) > 0\"\n class=\"flex h-6 flex-row flex-wrap gap-1 overflow-hidden\"\n >\n <TagRenderer :tags=\"tags\" container-class=\"h-6 flex items-center\" />\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { PageTemplateProps } from '@/api/types';\nimport BlockPageBanner from '@/components/block/BlockPageBanner.vue';\nimport BlockRenderer from '@/components/block/BlockRenderer.vue';\nimport BlockToc from '@/components/block/BlockToc.vue';\nimport { ref } from 'vue';\nimport { useRoute } from 'vue-router';\n\ndefineProps<PageTemplateProps>();\nconst route = useRoute();\nconst containers = ref<{ idx: number; el: HTMLElement }[]>([]);\n</script>\n\n<template>\n <div\n v-if=\"route.meta.fullScreen\"\n class=\"min-h-screen w-full grid-cols-2 items-start justify-center gap-8 p-2 [&_h2]:mb-4\"\n :class=\"[\n `bg-gnist-${bgColor}`,\n fgColor ? `text-gnist-${fgColor}` : undefined,\n ]\"\n >\n <BlockRenderer :block=\"block\" />\n </div>\n <template v-else>\n <BlockPageBanner\n :title=\"block.name ?? ''\"\n :block=\"block\"\n :description=\"block.description ?? ''\"\n :tags=\"block.tags ?? []\"\n :show-version-selector=\"!block.customSchema\"\n :is-preview=\"!!isPreview\"\n />\n\n <!-- Content -->\n <div class=\"min-h-screen w-full\" :class=\"`bg-gnist-${bgColor}`\">\n <div class=\"gnist-page-width grow pb-16 lg:grid lg:grid-cols-4 lg:gap-10\">\n <div class=\"relative col-span-1 ml-auto pt-8 lg:pb-24\">\n <BlockToc :containers=\"containers\" />\n </div>\n <div class=\"col-span-3\">\n <div\n class=\"mx-5 mt-10 lg:max-w-2xl\"\n :class=\"fgColor ? `text-gnist-${fgColor}` : 'text-gnist-black'\"\n data-cy-id=\"contentContainer\"\n :data-cy-state=\"!!block.content ? 'loaded' : 'not_loaded'\"\n >\n <BlockRenderer v-model:containers=\"containers\" :block=\"block\" />\n </div>\n </div>\n </div>\n </div>\n </template>\n</template>\n","<script lang=\"ts\" setup>\nimport type { PageTemplateProps } from '@/api/types';\nimport BlockRenderer from '@/components/block/BlockRenderer.vue';\nimport PageBanner from '@/components/PageBanner.vue';\nimport { useRoute } from 'vue-router';\nimport { translateStringOrLocale } from '@/i18n';\n\nconst props = defineProps<PageTemplateProps>();\nconst _title = translateStringOrLocale(() => props.block.name);\nconst _description = translateStringOrLocale(() => props.block.description);\nconst route = useRoute();\n</script>\n\n<template>\n <div\n v-if=\"route.meta.fullScreen\"\n class=\"min-h-screen w-full grid-cols-2 items-start justify-center gap-8 p-2 [&_h2]:mb-4\"\n :class=\"[\n `bg-gnist-${bgColor}`,\n fgColor ? `text-gnist-${fgColor}` : undefined,\n ]\"\n >\n <BlockRenderer :block=\"block\" />\n </div>\n <template v-else>\n <div class=\"flex grow flex-col items-center\" :class=\"`bg-gnist-${bgColor}`\">\n <div class=\"mb-2 w-full lg:pt-16\">\n <PageBanner\n :title=\"_title\"\n :description=\"_description\"\n :text-color=\"fgColor\"\n />\n </div>\n\n <!-- Content -->\n <div class=\"gnist-page-width h-full w-full px-6 lg:px-8\">\n <div\n :class=\"fgColor ? `text-gnist-${fgColor}` : 'text-gnist-black'\"\n data-cy-id=\"contentContainer\"\n :data-cy-state=\"!!block.content ? 'loaded' : 'not_loaded'\"\n >\n <BlockRenderer :block=\"block\" class=\"mb-4\" />\n </div>\n </div>\n </div>\n </template>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from 'vue-i18n';\n\nimport {\n isBlockImage,\n type BlockImage,\n type CardTemplateProps,\n type Translated,\n} from '@/api/types';\nimport ImageRenderer from '@/components/block/ImageRenderer.vue';\nimport { computed, type ComputedRef } from 'vue';\nimport { getBlobUrl } from '@/api/blob';\nimport { translateBlockValue } from '@/i18n';\nimport { type supported_locale } from '@/config';\nimport TagListRenderer from '@/components/TagListRenderer.vue';\n\nconst { t, locale } = useI18n();\n\nconst props = defineProps<CardTemplateProps>();\n\nconst productImage: ComputedRef<\n (Pick<Translated<BlockImage>, 'alt'> & { url: string }) | undefined\n> = computed(() => {\n const productImageField = props.block.content?.['productimage'];\n\n if (productImageField && isBlockImage(productImageField)) {\n const translatedField = translateBlockValue(\n productImageField,\n locale.value as supported_locale,\n 'image',\n );\n return {\n ...translatedField,\n url: getBlobUrl(\n {\n blockId: props.block.blockId,\n versionId: props.block.currentVersionId,\n },\n productImageField.name,\n ),\n };\n }\n return props.block.ownerOrg?.logo\n ? {\n alt: t('block.ownerLogo'),\n url: props.block.ownerOrg.logo,\n }\n : undefined;\n});\n</script>\n<template>\n <div\n class=\"hover:bg-gnist-light-gray flex h-full flex-col break-words rounded-md bg-gnist-white p-6 text-gnist-black shadow-sm transition duration-300 ease-in-out hover:shadow-lg lg:w-[30rem]\"\n >\n <div class=\"flex justify-between gap-4\">\n <div class=\"flex items-center gap-2\">\n <div\n :class=\"`bg-gnist-${block.category?.color ?? 'gray'}`\"\n class=\"h-4 w-4 rounded-full\"\n ></div>\n <p class=\"text-xs uppercase\">\n {{ block.category?.name ?? '' }}\n </p>\n </div>\n </div>\n\n <div class=\"my-6 flex max-h-14 flex-row\">\n <ImageRenderer\n v-if=\"block.ownerOrg\"\n :value=\"{ fullUrl: block.ownerOrg.logo }\"\n class=\"contents [&>div]:contents [&_img]:max-h-10 [&_img]:max-w-[25%] [&_img]:grow-0 [&_img]:self-center\"\n />\n <div class=\"ml-4 grow\">\n <p class=\"line-clamp-2 max-h-9 text-lg italic leading-none\">\n {{ block.name }}\n </p>\n <p v-if=\"block.ownerOrg\" class=\"mt-0.5 text-xs italic\">\n {{ `${t('productCard.suppliedBy')} ${block.ownerOrg.name}` }}\n </p>\n </div>\n </div>\n <TagListRenderer :tags=\"block.tags\" class=\"my-4\" />\n\n <div\n class=\"mt-4 flex min-h-[8rem] flex-col-reverse items-start gap-2 lg:h-32 lg:max-h-32 lg:flex-row\"\n >\n <p class=\"text-box grow\">\n {{ block.description }}\n </p>\n <img\n v-if=\"productImage\"\n class=\"max-h-32 min-w-[33.333%] grow-0 object-contain lg:w-1/3\"\n :src=\"productImage.url\"\n :alt=\"productImage.alt\"\n />\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref, watchEffect } from 'vue';\nimport { useCategoriesLazy } from '@/api/category';\nimport { useTagGroups } from '@/api/tags';\nimport TagList from './TagList.vue';\nimport type { Tag, TagGroup } from '@/api/types';\nimport { translateStringOrLocale } from '@/i18n';\n\nconst props = defineProps<{\n categoryName: string;\n tags?: Tag[];\n}>();\n\nconst { result: categories } = useCategoriesLazy();\nconst { result: tagGroups } = useTagGroups();\nconst filtered_groups = ref<TagGroup[]>();\n\nwatchEffect(() => {\n const category = categories.value?.find(\n (c) => translateStringOrLocale(c.name).value == props.categoryName,\n );\n const groups = tagGroups.value?.filter((g) =>\n category?.tagGroups?.includes(g.id.toString()),\n );\n\n if (!groups) return;\n filtered_groups.value = groups.filter((g) =>\n g.tags?.some((gt) => props.tags?.some((pt) => pt.id === gt)),\n );\n\n filtered_groups.value.forEach((group) => {\n group.tags = group.tags?.filter((t) =>\n props.tags?.some((pt) => pt.id === t),\n );\n });\n});\n</script>\n\n<template>\n <div>\n <div v-for=\"tagGroup in filtered_groups\" :key=\"tagGroup.id\">\n <TagList\n v-if=\"tagGroup\"\n :group=\"tagGroup.id\"\n :list=\"tagGroup.tags\"\n :size=\"'badge-sm'\"\n :show-all=\"true\"\n :show-group-label=\"true\"\n />\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { type PageTemplateProps } from '@/api/types';\nimport BlockPageBanner from '@/components/block/BlockPageBanner.vue';\nimport BlockRenderer from '@/components/block/BlockRenderer.vue';\nimport { ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport TagListGroup from '@/components/TagListGroup.vue';\nimport { useBlocksForOrganization } from '@/api/organization';\nimport { throwOnError } from '@/api/composable';\nimport { translateStringOrLocale } from '@/i18n';\nimport { getDocumentRouteFromListRoute } from '@/utilities/routeUtils';\n\nconst { t } = useI18n();\n\nconst props = defineProps<PageTemplateProps>();\nconst containers = ref<{ idx: number; el: HTMLElement }[]>([]);\n\nconst routeName = getDocumentRouteFromListRoute();\nconst orgId = props.block.ownerOrg?.organizationId ?? '';\nconst { result: orgBlocks } = throwOnError(useBlocksForOrganization(orgId));\n</script>\n\n<template>\n <div class=\"px-4 py-12 sm:px-6 lg:px-8\" :class=\"[`bg-gnist-${bgColor}`]\">\n <div class=\"max-w-screen-md sm:max-w-2xl md:max-w-4xl lg:max-w-5xl\">\n <BlockPageBanner\n :title=\"block.name ?? ''\"\n :block=\"block\"\n :tags=\"block.tags ?? []\"\n :class=\"[`bg-gnist-${bgColor}`]\"\n :is-preview=\"!!isPreview\"\n :no-left-margin=\"true\"\n :right-margin=\"false\"\n >\n <template #description>\n <RouterLink\n :to=\"{\n name: routeName,\n params: {\n blockId: orgBlocks?.blocks.find(\n (b) =>\n translateStringOrLocale(b.category.name).value ===\n t('supplierPage.supplier'),\n )?.blockId,\n },\n }\"\n >\n <div class=\"flex gap-1\">\n <p>{{ t('productPage.suppliedBy') }}</p>\n <p class=\"underline\">\n {{ block.ownerOrg?.name }}\n </p>\n </div>\n </RouterLink>\n </template>\n </BlockPageBanner>\n\n <TagListGroup\n v-if=\"block.category\"\n class=\"ml-6\"\n :category-name=\"translateStringOrLocale(block.category.name).value\"\n :tags=\"block.tags\"\n />\n\n <div\n class=\"mx-4 mt-6 md:mt-12\"\n data-cy-id=\"contentContainer\"\n :data-cy-state=\"!!block.content ? 'loaded' : 'not_loaded'\"\n >\n <BlockRenderer\n v-model:containers=\"containers\"\n :block=\"block\"\n class=\"mt-8\"\n />\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\">\nexport function getStatusText(\n block: Pick<Block, 'isBacklog' | 'status'>,\n): string {\n return block.status === 'Published' && block.isBacklog\n ? `block.backlogStatus.${block.status}`\n : `block.status.${block.status}`;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { Status, type Block } from '@/api/types';\nimport { computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nconst { t } = useI18n();\nconst props = defineProps<{\n block: Pick<Block, 'hasBacklog' | 'isBacklog' | 'status'>;\n}>();\n\nconst statusClass = computed(() => {\n switch (props.block.status) {\n case Status.Draft:\n return 'bg-gnist-gray-light';\n case Status.Archived:\n return 'bg-gnist-yellow';\n case Status.Published:\n default:\n return props.block.hasBacklog ? 'bg-gnist-gray-light' : 'invisible';\n }\n});\n</script>\n<template>\n <p :class=\"['flex h-4 items-center px-8 py-1 text-xs', statusClass]\">\n {{\n block.status === 'Published' && block.hasBacklog\n ? t('block.status.VersionInBacklog')\n : t(getStatusText(block))\n }}\n </p>\n</template>\n","<script setup lang=\"ts\">\nimport type { CardTemplateProps } from '@/api/types';\nimport { getDocumentRouteFromListRoute } from '@/utilities/routeUtils';\nimport BlockStatusBar from '@/components/BlockStatusBar.vue';\nimport { useI18n } from 'vue-i18n';\nimport TagListRenderer from '@/components/TagListRenderer.vue';\n\nconst { t } = useI18n();\n\nconst props = defineProps<CardTemplateProps>();\n\nconst routeName = props.routeName ?? getDocumentRouteFromListRoute();\n</script>\n\n<template>\n <RouterLink\n :to=\"{ name: routeName, params: { blockId: block.blockId } }\"\n :class=\"[\n 'hover:bg-gnist-light-gray flex flex-col break-words rounded-md bg-gnist-white text-gnist-black shadow-sm transition duration-300 ease-in-out hover:shadow-lg',\n 'mt-[-1rem] w-full items-stretch p-6 first:mt-12',\n ]\"\n >\n <div class=\"mb-4 flex items-center gap-2\">\n <div\n :class=\"`bg-gnist-${block.category?.color ?? 'gray'}`\"\n class=\"h-4 w-4 rounded-full\"\n ></div>\n\n <div class=\"flex justify-between gap-4\">\n <p v-if=\"block.category\" class=\"text-box grow text-xs uppercase\">\n {{\n `${block.category?.name} ${\n block.ownerOrg?.name &&\n block.category?.name !== t(`supplierPage.supplier`)\n ? ` ${t('blockList.from')} ${block.ownerOrg.name}`\n : ''\n }`\n }}\n </p>\n </div>\n </div>\n <TagListRenderer\n v-if=\"block.tags && block.tags.length > 0\"\n :tags=\"block.tags\"\n class=\"mb-3\"\n />\n <div class=\"mt-1 flex flex-row\">\n <h2 class=\"text-subtitle\">\n {{ block.name }}\n </h2>\n </div>\n <p class=\"text-box mt-2 grow\">\n {{ block.description }}\n </p>\n <div class=\"mb-[-0.5rem] mt-2 flex flex-row\">\n <BlockStatusBar :block=\"block\" />\n </div>\n </RouterLink>\n</template>\n","<script lang=\"ts\" setup>\nimport BlockPageBanner from '@/components/block/BlockPageBanner.vue';\nimport BlockRenderer from '@/components/block/BlockRenderer.vue';\nimport ImageRenderer from '@/components/block/ImageRenderer.vue';\nimport TagListGroup from '@/components/TagListGroup.vue';\nimport { type PageTemplateProps } from '@/api/types';\nimport { getDocumentRouteFromListRoute } from '@/utilities/routeUtils';\nimport { ref } from 'vue';\nimport { RouterLink } from 'vue-router';\nimport { throwOnError } from '@/api/composable';\nimport { translateStringOrLocale } from '@/i18n';\nimport { useBlocksForOrganization } from '@/api/organization';\nimport { useI18n } from 'vue-i18n';\n\nconst { t } = useI18n();\n\nconst props = defineProps<PageTemplateProps>();\nconst containers = ref<{ idx: number; el: HTMLElement }[]>([]);\n\nconst routeName = getDocumentRouteFromListRoute();\nconst orgId = props.block.ownerOrg?.organizationId ?? '';\nconst { result: orgBlocks } = throwOnError(useBlocksForOrganization(orgId));\n</script>\n\n<template>\n <div\n class=\"flex flex-col gap-2 px-4 sm:px-6 md:flex-row lg:px-8\"\n :class=\"[`bg-gnist-${bgColor}`]\"\n >\n <div class=\"w-full pb-0 pt-12 md:w-1/2 md:pb-7 md:pt-16 lg:w-3/5 lg:gap-10\">\n <BlockPageBanner\n :title=\"block.name ?? ''\"\n :block=\"block\"\n :tags=\"block.tags ?? []\"\n :class=\"[`bg-gnist-${bgColor}`]\"\n :is-preview=\"!!isPreview\"\n :no-left-margin=\"true\"\n >\n <template #description>\n <p v-if=\"block.ownerOrg?.webpage\">\n {{ t('supplierPage.webpage') }}:\n <a\n :href=\"block.ownerOrg.webpage\"\n class=\"underline hover:text-gnist-gray-dark\"\n target=\"_blank\"\n >{{ block.ownerOrg.webpage }}</a\n >\n </p>\n <div\n v-if=\"orgBlocks?.frontendData\"\n class=\"mt-2 flex flex-col md:flex-row md:gap-4\"\n >\n <p v-if=\"JSON.parse(orgBlocks?.frontendData).numberOfEmployees\">\n {{ t('supplierPage.numberOfEmployees') }}:\n {{ JSON.parse(orgBlocks?.frontendData).numberOfEmployees }}\n </p>\n <p v-if=\"JSON.parse(orgBlocks?.frontendData).country\">\n {{ t('supplierPage.country') }} :\n {{ JSON.parse(orgBlocks?.frontendData).country }}\n </p>\n </div>\n </template>\n </BlockPageBanner>\n <div class=\"text-gnist-black\" :class=\"[`bg-gnist-${bgColor}`]\">\n <div\n class=\"gnist-page-width grow pb-0 lg:grid lg:grid-cols-3 lg:gap-10 lg:pb-16\"\n >\n <div class=\"col-span-3\">\n <!-- Content -->\n <div\n class=\"mx-5 mt-10\"\n data-cy-id=\"contentContainer\"\n :data-cy-state=\"!!block.content ? 'loaded' : 'not_loaded'\"\n >\n <div class=\"mt-6 md:mt-12\">\n <BlockRenderer\n v-model:containers=\"containers\"\n :block=\"block\"\n class=\"mt-8 first:mt-0\"\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"mx-4 pb-4 pt-0 md:pb-7 md:pt-16 lg:w-1/2 lg:gap-8\">\n <ImageRenderer\n v-if=\"block.ownerOrg?.logo\"\n :value=\"{ fullUrl: block.ownerOrg.logo, alt: t('block.ownerLogo') }\"\n class=\"my-10\"\n />\n\n <div class=\"my-4\">\n <TagListGroup\n v-if=\"block.category\"\n :category-name=\"translateStringOrLocale(block.category?.name).value\"\n :tags=\"block.tags\"\n />\n </div>\n <div class=\"mt-4 flex flex-col items-stretch gap-1 text-gnist-black\">\n <p>{{ t('supplierPage.products') }}:</p>\n <template\n v-for=\"block in orgBlocks?.blocks.map((b) => b)\"\n :key=\"block.blockId\"\n >\n <RouterLink\n v-if=\"block.blockId !== props.block.blockId\"\n :to=\"{ name: routeName, params: { blockId: block.blockId } }\"\n >\n <div class=\"rounded bg-gnist-blue-light-light p-4\">\n {{ translateStringOrLocale(block.name).value }}\n <p class=\"text-xs\">\n {{ translateStringOrLocale(block.description).value }}\n </p>\n </div>\n </RouterLink>\n </template>\n </div>\n </div>\n </div>\n</template>\n","import type {\n CardTemplateDefinition,\n PageTemplateDefinition,\n} from './api/types';\nimport ApiPage from './components/block/templates/ApiPage.vue';\nimport BlockCard from './components/block/templates/BlockCard.vue';\nimport BlockPage from './components/block/templates/BlockPage.vue';\nimport FullPage from './components/block/templates/FullPage.vue';\nimport ProductCard from './components/block/templates/ProductCard.vue';\nimport ProductPage from './components/block/templates/ProductPage.vue';\nimport SearchCard from './components/block/templates/SearchCard.vue';\nimport SupplierPage from './components/block/templates/SupplierPage.vue';\n\nconst _cardTemplates = [\n {\n type: 'card',\n id: 'blockCard',\n component: BlockCard,\n isLink: true,\n requiredFields: [],\n },\n {\n type: 'card',\n id: 'productCard',\n component: ProductCard,\n isLink: true,\n requiredFields: [{ name: 'productimage', type: 'image' }],\n },\n {\n type: 'card',\n id: 'searchCard',\n component: SearchCard,\n isLink: false,\n requiredFields: [],\n },\n] as const satisfies CardTemplateDefinition[];\n// This extra layer is needed to make sure option properties are still present in the type\nexport const cardTemplates: ((typeof _cardTemplates)[number] &\n CardTemplateDefinition)[] = _cardTemplates;\nexport type cardTemplateIds = (typeof _cardTemplates)[number]['id'];\n\nconst _pageTemplates = [\n {\n type: 'page',\n id: 'blockPage',\n component: BlockPage,\n hasVersionSelector: true,\n bgColor: 'white',\n requiredFields: [{ name: 'content', type: 'markdown' }],\n },\n {\n type: 'page',\n id: 'apiPage',\n component: ApiPage,\n hasVersionSelector: true,\n bgColor: 'white',\n requiredFields: [\n { name: 'content', type: 'markdown', canUnsetRequired: true },\n {\n name: 'apim',\n type: 'apim',\n defaultTitle: 'API-operasjoner',\n canUnsetRequired: true,\n },\n ],\n },\n {\n type: 'page',\n id: 'productPage',\n component: ProductPage,\n hasVersionSelector: false,\n bgColor: 'white',\n requiredFields: [{ name: 'productimage', type: 'image' }],\n },\n {\n type: 'page',\n id: 'supplierPage',\n component: SupplierPage,\n hasVersionSelector: false,\n bgColor: 'white',\n requiredFields: [{ name: 'content', type: 'markdown' }],\n },\n {\n type: 'page',\n id: 'fullPage',\n component: FullPage,\n hasVersionSelector: false,\n bgColor: 'blue-light-light',\n fgColor: 'black',\n requiredFields: [{ name: 'content', type: 'markdown' }],\n },\n {\n type: 'page',\n id: 'fullPage_white',\n component: FullPage,\n hasVersionSelector: false,\n bgColor: 'white',\n fgColor: 'black',\n requiredFields: [],\n },\n] as const satisfies PageTemplateDefinition[];\n// This extra layer is needed to make sure option properties are still present in the type\nexport const pageTemplates: ((typeof _pageTemplates)[number] &\n PageTemplateDefinition)[] = _pageTemplates;\nexport type pageTemplateIds = (typeof _pageTemplates)[number]['id'];\n","<script setup lang=\"ts\">\nimport type { TranslatedBlock } from '@/api/blocks';\nimport { cardTemplates, type cardTemplateIds } from '@/renderTemplates';\nimport { computed } from 'vue';\n\nconst props = defineProps<{\n blockItem: TranslatedBlock;\n routeName: string;\n cardTemplateId?: cardTemplateIds;\n}>();\n\nconst templateId = computed(\n () => props.cardTemplateId ?? props.blockItem.category?.cardTemplateId,\n);\nconst template = computed(\n () => cardTemplates.find((i) => i.id == templateId.value) ?? cardTemplates[0],\n);\n</script>\n\n<template>\n <RouterLink\n v-if=\"template.isLink\"\n :to=\"{ name: routeName, params: { blockId: blockItem.blockId } }\"\n >\n <component :is=\"template.component\" :block=\"blockItem\" />\n </RouterLink>\n <template v-else>\n <component\n :is=\"template.component\"\n :block=\"blockItem\"\n :route-name=\"routeName\"\n />\n </template>\n</template>\n","import { useCurrentUser, type RoleName } from '@/api/auth';\nimport type { TranslatedBlock } from '@/api/blocks';\nimport { computed, type ComputedRef, type Ref } from 'vue';\n\nexport function useAudienceTargeting(\n blocks: Ref<TranslatedBlock[] | null>,\n returnAll?: boolean,\n): ComputedRef<TranslatedBlock[] | undefined> {\n const user = useCurrentUser();\n return computed(() => {\n if (returnAll) return blocks.value ?? undefined;\n const roles: RoleName[] = user.value?.roles ?? ['anonymous'];\n return blocks.value?.filter(\n (block) =>\n !block.audiences ||\n block.audiences.length === 0 ||\n block.audiences.some((audience) => roles.includes(audience)),\n );\n });\n}\n","<script setup lang=\"ts\">\nimport type {\n Category,\n Guid,\n OrganizationInfo,\n PartialSome,\n Tag,\n} from '@/api/types';\nimport BlockListItem from './BlockListItem.vue';\nimport SearchBar from '../components/SearchBar.vue';\nimport Checkbox from '@/components/forms/InputCheckbox.vue';\nimport LoadingSpinner from '@/components/LoadingSpinner.vue';\nimport { computed, ref, toRef, watch, watchEffect } from 'vue';\nimport { defaultBlocksRouteName } from '@/utilities/routeUtils';\nimport { throwOnError } from '@/api/composable';\nimport { useRoute, type LocationQueryValue } from 'vue-router';\nimport Dropdown, {\n toDropdownItems,\n} from '@/components/forms/InputDropdown.vue';\nimport TagPicker from '@/components/forms/InputTagPicker.vue';\nimport { useI18n } from 'vue-i18n';\nimport {\n useBlocks,\n type GetBlocksOptions,\n type TranslatedBlock,\n} from '@/api/blocks';\nimport { useAudienceTargeting } from '@/utilities/useAudienceTargeting';\nimport type { TranslatedCategory } from '@/api/types';\nimport type { cardTemplateIds } from '@/renderTemplates';\nimport {\n getConnectedFilterByListId,\n type ConnectionInfo,\n getConnectedListByFilterId,\n} from './BlockListConnectionHelper';\nimport { DEFAULT_LOCALE } from '@/config';\nimport { useBlockListCategories } from '@/api/category';\nimport { useStoreAbility, useSubject } from '@/abilities';\n\nconst { t } = useI18n();\nconst { can } = useStoreAbility();\n\nconst props = withDefaults(\n defineProps<{\n routeName: string;\n title?: string;\n options: GetBlocksOptions;\n showBacklogFilter?: boolean;\n showEmptyCatFilter?: boolean;\n categoryIdFilter?: number[];\n hideOrgFilter?: boolean;\n hideSearch?: boolean;\n hideCategoryFilter?: boolean;\n hideTagFilter?: boolean;\n hideAllFilters?: boolean;\n maxItems?: number;\n cardTemplateId?: cardTemplateIds;\n configSearchText?: string;\n preSelectedTags?: PartialSome<Tag, 'text'>[];\n excludeTags?: PartialSome<Tag, 'text'>[];\n preSelectedOrgIds?: Guid[];\n connection?: ConnectionInfo;\n }>(),\n {\n routeName: defaultBlocksRouteName,\n title: undefined,\n showBacklogFilter: false,\n categoryIdFilter: undefined,\n maxItems: undefined,\n cardTemplateId: undefined,\n configSearchText: undefined,\n preSelectedTags: undefined,\n excludeTags: undefined,\n preSelectedOrgIds: undefined,\n connection: undefined,\n },\n);\n\nconst emit = defineEmits<{\n (e: 'loaded', value: NonNullable<typeof blocks.value>): void;\n}>();\n\nfunction setBlocks(externalBlocks: TranslatedBlock[]) {\n blocks.value = externalBlocks;\n}\nfunction updateFilters(\n backlog: typeof showBacklog.value,\n categories: typeof selectedCategories.value,\n owners: typeof selectedOwners.value,\n tags: typeof selectedTags.value,\n) {\n showBacklog.value = backlog;\n selectedCategories.value = categories;\n selectedOwners.value = owners;\n selectedTags.value = tags;\n}\n\nwatch(\n () => props.preSelectedTags,\n () => (selectedTags.value = props.preSelectedTags ?? []),\n);\nfunction setSearchText(text: string) {\n searchText.value = text;\n}\ndefineExpose({ setBlocks, updateFilters, setSearchText });\n\nconst isApproval = computed(() => props.options.mode === 'approval');\n\nconst showBacklog = ref<'include' | 'hide'>(\n props.showBacklogFilter ? 'hide' : 'include',\n);\nconst showOnlyEmptyCats = ref(false);\n\nconst { result: blocks, loaded } =\n props.connection?.role !== 'filter'\n ? throwOnError(useBlocks(props.options))\n : { result: ref<TranslatedBlock[] | null>(null), loaded: ref(false) };\nwatch(loaded, () => {\n if (!loaded) return;\n emit('loaded', blocks.value ?? []);\n if (!blocks.value) return;\n if (props.connection?.role !== 'list') return;\n getConnectedFilterByListId(props.connection)?.setBlocks(blocks.value);\n});\nconst audienceTargetedBlocks = useAudienceTargeting(\n blocks,\n props.options.mode === 'adminview' || props.options.mode === 'approval',\n);\n\nconst categories = useBlockListCategories(toRef(props, 'categoryIdFilter'));\n\nconst selectedCategories = ref<TranslatedCategory[]>([]);\nconst toggleCategory = (category: TranslatedCategory) => {\n selectedCategories.value = selectedCategories.value.find(\n (i) => i.categoryId == category.categoryId,\n )\n ? selectedCategories.value.filter(\n (c) => c.categoryId !== category.categoryId,\n )\n : [...selectedCategories.value, category];\n filterCategories(selectedCategories.value);\n};\n\nconst route = useRoute();\nfunction getQueryIdParam(key: string): number[] | undefined {\n return !route.query[key]\n ? undefined\n : (Array.isArray(route.query[key])\n ? (route.query[key] as LocationQueryValue[])\n : [route.query[key] as LocationQueryValue]\n ).map((q) => parseInt(q ?? ''));\n}\n\nconst queryCategories = getQueryIdParam('categories');\nwatchEffect(() => {\n showBacklog.value = props.showBacklogFilter ? 'hide' : 'include'; // Hide by default if the filter is visible\n let preselectedCategories: TranslatedCategory[];\n if (queryCategories) {\n preselectedCategories = categories.value.filter((c) =>\n queryCategories.includes(c.categoryId),\n );\n } else if (props.categoryIdFilter === undefined) {\n preselectedCategories = [];\n } else {\n preselectedCategories = categories.value;\n }\n selectedCategories.value = preselectedCategories;\n});\n\nconst searchText = ref(\n (route.query['q'] as string) ?? props.configSearchText ?? '',\n);\n\nconst filterCategories = (categories: TranslatedCategory[]) => {\n selectedCategories.value = categories;\n};\n\nconst matchesSearch = (block: TranslatedBlock) => {\n const searchLower = searchText.value.toLowerCase();\n if (!block.content) {\n console.error('Block has no content, this should not happen', { block });\n }\n return (\n block.name.toLowerCase().includes(searchLower) ||\n block.description.toLowerCase().includes(searchLower) ||\n block.category?.name.toLowerCase().includes(searchLower) ||\n JSON.stringify(block.content)?.toLowerCase().includes(searchLower) ||\n JSON.stringify(block.tags)?.toLowerCase().includes(searchLower)\n );\n};\nconst isInSelectedCategory = (block: TranslatedBlock) => {\n if (showOnlyEmptyCats.value) return !block.category;\n if (selectedCategories.value.length == 0) {\n return categories.value.find(\n (i) => i.categoryId == block.category?.categoryId,\n );\n } else {\n return selectedCategories.value.find(\n (i) => i.categoryId == block.category?.categoryId,\n );\n }\n};\n\nconst backlogFilter = (block: TranslatedBlock) => {\n if (showBacklog.value == 'hide' && block.isBacklog) return false;\n return true;\n};\n\nconst ownerOptions = computed(() => {\n if (!blocks.value || !categories.value) return [];\n const orgs = blocks.value\n .filter((b) =>\n categories.value.find((c) => c.categoryId === b.category?.categoryId),\n )\n .map((b) => b.ownerOrg)\n .filter((o) => o) as OrganizationInfo[];\n return toDropdownItems(\n orgs.filter(\n (value, index) =>\n orgs.findIndex((o) => o.organizationId === value.organizationId) ===\n index,\n ),\n (item) => [item.organizationId, item.name, item],\n );\n});\n\nconst selectedOwners = ref<OrganizationInfo[]>([]);\nwatch([ownerOptions, () => props.preSelectedOrgIds], () => {\n selectedOwners.value = props.preSelectedOrgIds\n ? ownerOptions.value\n .map((o) => o.value)\n .filter((o) => props.preSelectedOrgIds?.includes(o.organizationId))\n : [];\n});\nconst ownerFilter = (block: TranslatedBlock) => {\n if (selectedOwners.value.length === 0) return true;\n if (\n selectedOwners.value.find(\n (o) => o.organizationId === block.ownerOrg?.organizationId,\n )\n ) {\n return true;\n }\n return false;\n};\n\nconst queryTags = getQueryIdParam('tags')?.map(\n (id): Tag => ({ id, text: { [DEFAULT_LOCALE]: '' } }),\n);\nconst selectedTags = ref<PartialSome<Tag, 'text'>[]>(\n props.preSelectedTags ?? queryTags ?? [],\n);\nconst tagFilter = (block: TranslatedBlock) => {\n if (\n props.excludeTags?.find((t) => block.tags?.find((bt) => bt.id === t.id))\n ) {\n return false;\n }\n if (selectedTags.value.length === 0) return true;\n return selectedTags.value.find((t) =>\n block.tags?.find((bt) => bt.id === t.id),\n );\n};\n\nconst filteredBlocks = computed(() => {\n return (\n audienceTargetedBlocks.value\n ?.filter(\n (b) =>\n backlogFilter(b) &&\n isInSelectedCategory(b) &&\n matchesSearch(b) &&\n ownerFilter(b) &&\n tagFilter(b),\n )\n .slice(0, props.maxItems) ?? []\n );\n});\nconst missingConnection = computed(\n () =>\n props.connection?.role === 'filter' &&\n !getConnectedListByFilterId(props.connection),\n);\nwatch([showBacklog, selectedCategories, selectedOwners, selectedTags], () => {\n if (props.connection?.role !== 'filter') return;\n getConnectedListByFilterId(props.connection)?.updateFilters(\n showBacklog.value,\n selectedCategories.value,\n selectedOwners.value,\n selectedTags.value,\n );\n});\n\nconst hideAllFiltersExceptSearch = computed(\n () => props.hideAllFilters || !!getConnectedFilterByListId(props.connection),\n);\nconst showNewButton = computed(\n () =>\n route.meta.isDocsListRoute &&\n can(\n 'create',\n useSubject('BlockFromRoute', {\n createRoles:\n categories.value\n ?.map((c) => c.createRoles)\n .flat()\n .filter((r) => r !== undefined) ?? [],\n } satisfies Pick<Category, 'createRoles'>),\n ),\n);\n</script>\n\n<template>\n <div class=\"flex flex-col\">\n <p v-if=\"title\" class=\"text-p1 lg:text-center\">\n {{ title }}\n </p>\n <p v-if=\"missingConnection\" class=\"alert alert-warning text-center\">\n {{ t('blockList.missingConnection') }}\n </p>\n\n <div\n class=\"hide-empty flex flex-col gap-4 lg:mx-auto lg:w-11/12 lg:max-w-4xl lg:flex-row\"\n >\n <SearchBar\n v-if=\"!hideSearch && !hideAllFilters && connection?.role !== 'filter'\"\n class=\"text-p2 my-2 w-full\"\n :initial-value=\"searchText\"\n @change=\"(v: string) => (searchText = v)\"\n />\n <Dropdown\n v-if=\"!hideOrgFilter && !hideAllFiltersExceptSearch\"\n v-model=\"selectedOwners\"\n :options=\"ownerOptions\"\n :getkey=\"(val) => val?.organizationId ?? 'empty'\"\n :multiple=\"{ emptyLabel: 'blockList.orgFilter' }\"\n class=\"w-full px-1 lg:max-w-xs\"\n :buttonclass=\"[\n 'w-full mt-2 px-2 py-2 pb-2 [&>*]:pb-2',\n 'border rounded',\n 'bg-gnist-white',\n ]\"\n />\n </div>\n\n <div\n class=\"hide-empty mx-auto flex w-full flex-col flex-wrap justify-between gap-4 px-1 lg:max-w-4xl lg:flex-row lg:items-end\"\n >\n <Checkbox\n v-if=\"showEmptyCatFilter && !hideAllFiltersExceptSearch\"\n v-model=\"showOnlyEmptyCats\"\n label=\"blockList.showOnlyEmptyCats\"\n direction=\"horizontal\"\n mode=\"toggle\"\n class=\"decoration mx-0.5 mt-2 flex basis-full items-center whitespace-nowrap lg:mt-0\"\n />\n <TagPicker\n v-if=\"!hideTagFilter && !hideAllFiltersExceptSearch\"\n v-model=\"selectedTags\"\n label=\"blockList.tags\"\n suggestedlabel=\"blockList.suggestedTags\"\n :taglistclass=\"['max-h-8 overflow-y-auto']\"\n class=\"-mb-2 w-full grow\"\n select-only\n />\n <template\n v-if=\"\n categories?.length != 1 &&\n !showOnlyEmptyCats &&\n !hideCategoryFilter &&\n !hideAllFiltersExceptSearch\n \"\n >\n <div class=\"hidden lg:contents\">\n <Checkbox\n v-for=\"c in categories\"\n :key=\"c.categoryId\"\n :model-value=\"\n !!selectedCategories.find((i) => i.categoryId == c.categoryId)\n \"\n :label=\"c.name\"\n checkbox-class=\"my-0.5\"\n direction=\"horizontal\"\n @update:model-value=\"toggleCategory(c)\"\n >\n <span class=\"flex items-center gap-2\">\n <div\n :class=\"`bg-gnist-${c.color ?? 'gray'}`\"\n class=\"h-3 w-3 rounded-full\"\n ></div>\n <p>\n {{ c.name ?? '' }}\n </p>\n </span>\n </Checkbox>\n </div>\n\n <Dropdown\n v-model=\"selectedCategories\"\n :options=\"{\n values: categories,\n getOption: (c) => [c.categoryId.toString(), c.name, c],\n }\"\n :multiple=\"{ emptyLabel: 'blockList.categoryFilter' }\"\n :getkey=\"(c) => c?.categoryId\"\n class=\"max-w-full lg:hidden\"\n :buttonclass=\"[\n 'w-full mt-2 px-2 py-2 pb-2 [&>*]:pb-2',\n 'border rounded',\n 'bg-gnist-white',\n ]\"\n >\n <template #button=\"{ selectedItems }\">\n <template v-for=\"(c, index) of selectedItems\" :key=\"c\">\n <span class=\"flex items-center gap-2\">\n <div\n :class=\"`bg-gnist-${c?.color ?? 'gray'}`\"\n class=\"h-3 w-3 rounded-full\"\n ></div>\n <p>\n {{ c?.name ?? '' }}\n </p>\n </span>\n {{ index + 1 < selectedItems.length ? ',' : '' }} \n </template>\n </template>\n <template #option=\"{ item }\">\n <span class=\"flex items-center gap-2\">\n <div\n :class=\"`bg-gnist-${item.value.color ?? 'gray'}`\"\n class=\"h-3 w-3 rounded-full\"\n ></div>\n <p>\n {{ item.text ?? '' }}\n </p>\n </span>\n </template>\n </Dropdown>\n <div class=\"grow\"> </div>\n </template>\n <Checkbox\n v-if=\"showBacklogFilter && !hideAllFiltersExceptSearch\"\n :model-value=\"showBacklog == 'include'\"\n label=\"blockList.showBacklog\"\n direction=\"horizontal\"\n mode=\"toggle\"\n @update:model-value=\"\n (checked) => (showBacklog = checked ? 'include' : 'hide')\n \"\n />\n </div>\n\n <div v-if=\"showNewButton\" class=\"my-8 flex justify-end pr-8\">\n <RouterLink\n class=\"gnist-button gnist-button-primary\"\n :to=\"{ name: 'new_block' }\"\n data-cy-id=\"NewDocumentButton\"\n >\n {{ t('admin.blockProduction.newBlock') }}\n </RouterLink>\n </div>\n <template v-if=\"connection?.role !== 'filter'\">\n <div\n class=\"flex flex-col items-stretch gap-8 lg:flex-row lg:flex-wrap\"\n :class=\"{\n 'mt-12':\n !isApproval &&\n !(hideAllFiltersExceptSearch && hideSearch) &&\n !showNewButton,\n 'lg:justify-center': !(isApproval && (blocks?.length ?? 0) === 0),\n }\"\n data-cy-id=\"SearchResults\"\n >\n <LoadingSpinner v-if=\"blocks === null\" class=\"h-16 w-16\" />\n <div v-else-if=\"isApproval && blocks.length === 0\">\n {{ t('admin.management.nothingToPublish') }}\n </div>\n <BlockListItem\n v-for=\"blockItem in filteredBlocks\"\n :key=\"blockItem.blockId\"\n :block-item=\"blockItem\"\n :route-name=\"routeName\"\n :card-template-id=\"props.cardTemplateId\"\n />\n </div>\n </template>\n </div>\n</template>\n\n<style scoped>\n.RouteDisclaimer :deep(a) {\n @apply underline;\n}\n</style>\n","<script setup lang=\"ts\">\nimport BlockList from '../components/BlockList.vue';\nimport ContentPage from '../components/ContentPage.vue';\nimport { useI18n } from 'vue-i18n';\nimport { editBlockVersionsRouteId } from '@/config';\n\nconst { t } = useI18n();\n</script>\n\n<template>\n <ContentPage\n :title=\"t('admin.blockProduction.title')\"\n :description=\"t('admin.blockProduction.titleText')\"\n :hide-description-mobile=\"true\"\n class=\"bg-gnist-gray-light-light\"\n >\n <div class=\"p-8 pt-0\">\n <RouterLink\n class=\"gnist-button gnist-button-primary\"\n :to=\"{ name: 'new_block' }\"\n data-cy-id=\"NewDocumentButton\"\n >\n {{ t('admin.blockProduction.newBlock') }}\n </RouterLink>\n </div>\n <BlockList\n :route-name=\"editBlockVersionsRouteId\"\n show-empty-cat-filter\n :options=\"{ mode: 'adminview' }\"\n card-template-id=\"searchCard\"\n class=\"px-8\"\n />\n </ContentPage>\n</template>\n","<script setup lang=\"ts\" generic=\"T\">\nimport { throwOnError } from '@/api/composable';\nimport { useI18n } from 'vue-i18n';\nimport { useBlocks } from '@/api/blocks';\nimport { editBlockVersionsRouteId } from '@/config';\nimport { Status } from '@/api/types';\nimport { formatDate } from '@/utilities/formatDate';\nimport {\n stringCompareCaseInsensitive,\n undefinedCompare,\n} from '@/utilities/order';\nimport { getStatusText } from './BlockStatusBar.vue';\nimport TableComponent from './TableComponent.vue';\n\nconst { t } = useI18n();\n\nconst props = defineProps<{\n headerlabel: string;\n type: 'MyDocuments' | 'Management';\n}>();\n\nconst { result: blocks } = throwOnError(\n useBlocks({\n mode: 'adminview',\n forMyDocumentsList: props.type === 'MyDocuments',\n forManagementList: props.type === 'Management',\n }),\n);\n</script>\n<template>\n <section class=\"gnist-page-width py-8\">\n <h2 class=\"mb-4\">\n {{ t(headerlabel) }}\n </h2>\n <TableComponent\n size=\"table-xs\"\n column-header-class=\"max-w-[5rem] md:max-w-full\"\n :rows=\"blocks\"\n show-spinner\n i18n-key=\"admin.management.doctable\"\n :get-key=\"(block) => block.blockId\"\n :sort-fields=\"['name', 'category', 'ownerOrg', 'lastChanged']\"\n :comparers=\"{\n ownerOrg: undefinedCompare((a, b) =>\n stringCompareCaseInsensitive(a.name, b.name),\n ),\n }\"\n :columns=\"[\n 'name',\n 'category',\n 'lastChanged',\n 'lastChangedBy',\n 'ownerOrg',\n 'documentOwners',\n 'audiences',\n 'currentVersionNumber',\n 'versions',\n ]\"\n >\n <template #columnHeader=\"{ item: block }\">\n <RouterLink\n :to=\"{\n name: editBlockVersionsRouteId,\n params: { blockId: block.blockId },\n }\"\n class=\"break-words font-normal underline\"\n >\n {{ block.name }}\n </RouterLink>\n </template>\n <template #columns=\"{ item: block }\">\n <td class=\"whitespace-nowrap\">\n {{ block.category?.name }}\n </td>\n <td class=\"whitespace-nowrap\">\n {{ formatDate(block.lastChanged) }}\n </td>\n <td class=\"whitespace-nowrap\">\n {{ block.lastChangedBy?.name }}\n </td>\n <td>\n <div v-if=\"!block.ownerOrg\" class=\"alert alert-error p-0\"> </div>\n <template v-else> {{ block.ownerOrg?.name }}</template>\n </td>\n <td>\n <div\n v-if=\"(block.documentOwners?.length ?? 0) == 0\"\n class=\"alert alert-error p-0\"\n >\n  \n </div>\n <template v-else>\n <span\n v-for=\"user in block.documentOwners\"\n :key=\"user.name\"\n class=\"block whitespace-nowrap\"\n >\n {{ user.name }}\n </span>\n </template>\n </td>\n <td>\n <span\n v-for=\"audience in block.audiences\"\n :key=\"audience\"\n class=\"block whitespace-nowrap\"\n >\n {{ t(`roleSelection.values.${audience}`) }}\n </span>\n </td>\n <td>\n {{ block.currentVersionNumber }}\n </td>\n <td>\n <span\n v-for=\"version in block.versions\"\n :key=\"version.versionNumber\"\n class=\"block whitespace-nowrap\"\n :class=\"{\n 'text-gnist-gray': version.status === Status.Archived,\n 'text-gnist-green': version.status === Status.Draft,\n 'text-gnist-sp-blue-light':\n version.status === Status.Published && version.isBacklog,\n }\"\n >\n <span v-if=\"version.versionNumber === block.currentVersionNumber\">\n >\n </span>\n {{ version.versionNumber }} ({{\n t(getStatusText(version)) +\n (version.draftStatus\n ? ` / ${t(`block.draftStatus.${version.draftStatus}`)}`\n : '')\n }})\n </span>\n </td>\n </template>\n </TableComponent>\n </section>\n</template>\n","<script setup lang=\"ts\">\nimport ContentPage from '../components/ContentPage.vue';\nimport BlockList from '../components/BlockList.vue';\nimport DocumentsOverview from '@/components/DocumentsOverview.vue';\nimport { useI18n } from 'vue-i18n';\nimport { editBlockVersionsRouteId } from '@/config';\nimport { ref } from 'vue';\nimport SimpleTabSelector from '@/components/SimpleTabSelector.vue';\n\nconst { t } = useI18n();\nconst tabs = ['overviewListHeader', 'overviewToPublishHeader'] as const;\nconst activeTab = ref<(typeof tabs)[number]>('overviewListHeader');\n</script>\n\n<template>\n <ContentPage\n :title=\"t('admin.management.overviewTitle')\"\n :description=\"t('admin.management.overviewDescription')\"\n :hide-description-mobile=\"true\"\n class=\"bg-gnist-gray-light-light\"\n >\n <SimpleTabSelector\n v-model=\"activeTab\"\n :tabs=\"tabs\"\n i18n-key=\"admin.management\"\n />\n <MyComponent />\n <section v-show=\"activeTab === 'overviewToPublishHeader'\" class=\"py-8\">\n <h2 class=\"mb-4\">\n {{ t('admin.management.overviewToPublishHeader') }}\n </h2>\n <div class=\"p-8\">\n <BlockList\n :route-name=\"editBlockVersionsRouteId\"\n :options=\"{ mode: 'approval' }\"\n hide-all-filters\n card-template-id=\"searchCard\"\n @loaded=\"\n (items) => {\n if (items.length > 0) activeTab = 'overviewToPublishHeader';\n }\n \"\n />\n </div>\n </section>\n <DocumentsOverview\n v-show=\"activeTab === 'overviewListHeader'\"\n headerlabel=\"admin.management.overviewListHeader\"\n type=\"Management\"\n />\n </ContentPage>\n</template>\n","<script setup lang=\"ts\">\nimport ContentPage from '../components/ContentPage.vue';\nimport BlockList from '../components/BlockList.vue';\nimport DocumentsOverview from '@/components/DocumentsOverview.vue';\nimport { useI18n } from 'vue-i18n';\nimport { editBlockVersionsRouteId } from '@/config';\nimport { useStoreAbility } from '@/abilities';\nimport { ref } from 'vue';\nimport SimpleTabSelector from '@/components/SimpleTabSelector.vue';\n\nconst { t } = useI18n();\nconst { can } = useStoreAbility();\nconst tabs = [\n 'mydocsListHeader',\n 'overviewToPublishHeader',\n] as const;\nconst activeTab = ref<(typeof tabs)[number]>('mydocsListHeader');\n</script>\n\n<template>\n <ContentPage\n :title=\"t('admin.management.mydocsTitle')\"\n :description=\"t('admin.management.mydocsDescription')\"\n :hide-description-mobile=\"true\"\n class=\"bg-gnist-gray-light-light\"\n >\n <SimpleTabSelector\n v-model=\"activeTab\"\n :tabs=\"tabs\"\n i18n-key=\"admin.management\"\n />\n <DocumentsOverview\n v-show=\"activeTab === 'mydocsListHeader'\"\n :class=\"{ test: activeTab === 'mydocsListHeader' }\"\n headerlabel=\"admin.management.mydocsListHeader\"\n type=\"MyDocuments\"\n />\n <section\n v-if=\"can('read', 'MyDocumentsToPublish')\"\n v-show=\"activeTab === 'overviewToPublishHeader'\"\n class=\"py-8\"\n >\n <h2 class=\"mb-4\">\n {{ t('admin.management.overviewToPublishHeader') }}\n </h2>\n <div class=\"p-8\">\n <BlockList\n :route-name=\"editBlockVersionsRouteId\"\n :options=\"{ mode: 'approval' }\"\n hide-all-filters\n card-template-id=\"searchCard\"\n />\n </div>\n </section>\n </ContentPage>\n</template>\n","<script setup lang=\"ts\">\nimport type { ApiMetaData, BlockApimDetails } from '@/api/types';\nimport { useApiList } from '@/api/apiM';\nimport ButtonComponent from '../ButtonComponent.vue';\nimport Checkbox from '@/components/forms/InputCheckbox.vue';\nimport InputLabel, {\n useDynamicLabelTexts,\n type IInputLabelProps,\n} from '@/components/forms/InputLabel.vue';\nimport InputText from '@/components/forms/InputText.vue';\nimport { useI18n } from 'vue-i18n';\nimport { computed, toRef } from 'vue';\nimport Dropdown, {\n toDropdownItems,\n} from '@/components/forms/InputDropdown.vue';\nimport { useNestedMV } from '@/utilities/useInternalState';\nimport { useStoreAbility } from '@/abilities';\n\nconst { t } = useI18n();\nconst { can } = useStoreAbility();\n\nconst props = defineProps<\n IInputLabelProps & {\n modelValue: BlockApimDetails | undefined;\n isNewBlock?: boolean;\n mode: 'Block' | 'Version';\n }\n>();\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: BlockApimDetails | undefined): void;\n (e: 'readMetadata', value: ApiMetaData): void;\n}>();\n\nconst value = useNestedMV(\n props,\n (val) => emit('update:modelValue', val),\n (stateReplaced, newVal, oldVal) => {\n const stateChangedToFromUndefined =\n (newVal === undefined && oldVal !== undefined) ||\n (newVal !== undefined && oldVal === undefined);\n return !stateReplaced || stateChangedToFromUndefined\n ? 'applyUpdate'\n : 'skipUpdate';\n },\n);\n\nconst canEdit = can('update', 'ApiConnection');\n\nconst { result: apiListGrouped } = useApiList(\n canEdit ? undefined : toRef(props, 'modelValue'),\n);\nconst apiOptions = computed(() => {\n return toDropdownItems(\n apiListGrouped.value?.map((i) => i.versions).flat() ?? [],\n (api) => [\n api.name,\n api.displayName +\n (api.apiVersion\n ? ` (${t('block.apiVersion')}: ${api.apiVersion})`\n : ''),\n api,\n ],\n );\n});\nconst apimValue = computed({\n get() {\n return apiOptions.value?.find((i) => i.key === value.value?.apimId)?.value;\n },\n set(newValue) {\n if (!value.value) return;\n value.value.apimId = newValue?.name;\n },\n});\nconst texts = useDynamicLabelTexts(props);\n</script>\n<template>\n <fieldset\n class=\"ApimFieldset flex min-w-0 flex-col items-stretch gap-x-4 border p-4 ps-4 md:grid md:grid-cols-[minmax(max-content,calc(50%_-_0.5rem))_fit-content(25%)_fit-content(25%)]\"\n :data-is-block-field=\"isBlockField ? true : undefined\"\n >\n <legend>{{ t(texts.label ?? 'admin.blockProduction.apimLegend') }}</legend>\n <Checkbox\n :model-value=\"!!value\"\n :label=\"`admin.blockProduction.useApimLabel${mode}`\"\n direction=\"horizontal\"\n mode=\"toggle\"\n class=\"col-span-3\"\n :disabled=\"!canEdit\"\n @update:model-value=\"\n (checked) => (value = checked ? { apimId: undefined } : undefined)\n \"\n />\n <template v-if=\"value\">\n <Dropdown\n v-if=\"canEdit\"\n v-model=\"apimValue\"\n label=\"admin.blockProduction.selectApi\"\n tooltip=\"admin.blockProduction.selectApiTooltip\"\n :options=\"apiOptions\"\n placeholder=\"admin.blockProduction.selectApiPlaceholder\"\n :getkey=\"(o) => o?.name\"\n required\n />\n <InputText\n v-else\n label=\"admin.blockProduction.selectedApi\"\n :model-value=\"apimValue?.displayName ?? ''\"\n disabled\n />\n <div\n v-if=\"mode === 'Block' && canEdit\"\n class=\"flex flex-row-reverse items-center justify-end md:flex-col md:items-start\"\n >\n <div class=\"md:mx-10\">\n <InputLabel\n label=\" \"\n :tooltip=\"t('admin.blockProduction.useApiMetadataTooltip')\"\n />\n </div>\n <ButtonComponent\n :text=\"t('admin.blockProduction.useApiMetadata')\"\n class=\"mx-4 my-2 py-2\"\n type=\"primary\"\n @click=\"\n () => {\n if (apimValue) emit('readMetadata', apimValue);\n }\n \"\n />\n </div>\n <Checkbox\n v-model=\"value.useAuthentication\"\n label=\"admin.blockProduction.apiMBlockUseAuthentication\"\n checkbox-class=\"ml-2\"\n :disabled=\"!canEdit\"\n />\n </template>\n <p v-if=\"!canEdit\" class=\"alert alert-warning col-span-3\">\n {{ t('admin.blockProduction.noApimAccess') }}\n </p>\n </fieldset>\n</template>\n\n<style>\n.BlockField:has(.ApimFieldset.ApimFieldset[data-is-block-field]) {\n @apply pt-0;\n}\n.BlockField:has(.ApimFieldset.ApimFieldset[data-is-block-field])\n .DeleteWarning {\n @apply top-6;\n}\n</style>\n","<script setup lang=\"ts\" generic=\"T extends Tag[] | undefined\">\nimport { type IInputLabelProps } from './InputLabel.vue';\nimport Dropdown, {\n toGroupedDropdownItems,\n type IDropdownItem,\n} from './InputDropdown.vue';\nimport type { Category, Tag } from '@/api/types';\nimport { useNestedMV } from '@/utilities/useInternalState';\nimport { useTags } from '@/api/tags';\nimport { ref, watchEffect } from 'vue';\nimport { translateStringOrLocale } from '@/i18n';\nimport { deepClone } from '@/utilities/deepClone';\n\nconst props = defineProps<\n IInputLabelProps & {\n modelValue: T;\n category?: Category;\n suggestedlabel?: string;\n tooltip?: string;\n label?: string;\n taglistclass?: string[];\n multiple?: { emptyLabel: string, maxItems?: number }\n }\n>();\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: T): void;\n (e: 'focus'): void;\n (e: 'blur'): void;\n}>();\n\nconst value = useNestedMV(props, (val) => emit('update:modelValue', val), true) as T;\n\nconst { result: tags } = useTags();\n\nconst tagOptions = ref<IDropdownItem<Tag>[]>([]);\n\nwatchEffect(() => {\n tagOptions.value = [];\n let list = deepClone(tags.value);\n if (props.category?.tagGroups?.length ?? 0 >= 1) {\n list?.forEach(\n (t) =>\n (t.tagGroups = t.tagGroups?.filter((tg) =>\n props.category?.tagGroups?.includes(tg.id.toString()),\n )),\n );\n list =\n list?.filter((t) =>\n t.tagGroups?.some((tg) =>\n props.category?.tagGroups?.includes(tg.id.toString()),\n ),\n ) ?? [];\n }\n\n tagOptions.value = toGroupedDropdownItems(list, (t) => [\n t.id.toString(),\n translateStringOrLocale(t.text).value,\n translateStringOrLocale(\n t.tagGroups?.find((tg) => tg.id === t.primaryTagGroupId)?.label ||\n t.tagGroups?.[0]?.label,\n ).value ?? '',\n t,\n ]);\n});\n</script>\n\n<template>\n <Dropdown\n v-model=\"value\"\n :label=\"label\"\n :tooltip=\"tooltip\"\n :suggestedlabel=\"suggestedlabel\"\n :allow-empty-value=\"true\"\n :multiple=\"multiple\"\n :options=\"tagOptions\"\n :getkey=\"(c) => c?.id\"\n />\n</template>\n","import {\n ref,\n type DebuggerOptions,\n type WritableComputedOptions,\n type WritableComputedRef,\n computed,\n} from 'vue';\n\n/** This can be used if you need to force refresh a writable computed ref */\nexport function useRefreshable<T>(\n options: WritableComputedOptions<T>,\n debugOptions?: DebuggerOptions,\n): [WritableComputedRef<T>, () => void] {\n const refreshKey = ref(0);\n\n const compRef = computed(\n {\n get() {\n refreshKey.value;\n return options.get();\n },\n set(newValue) {\n options.set(newValue);\n },\n },\n debugOptions,\n );\n\n return [compRef, () => refreshKey.value++];\n}\n","import type { localeValue } from '@/api/types';\n\nexport function localeValueEqual(a: localeValue, b: localeValue): boolean {\n return a.no === b.no && a.en === b.en;\n}\n","<script lang=\"ts\">\nexport const defaultSchema: Omit<Schema, 'name'> = {\n title: 'Innhold',\n required: false,\n showTitle: false,\n type: 'singleline',\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport TextInput from '@/components/forms/InputText.vue';\nimport MarkdownInput from '@/components/forms/InputMarkdown.vue';\nimport Checkbox from '@/components/forms/InputCheckbox.vue';\nimport Dropdown from '@/components/forms/InputDropdown.vue';\nimport ModalComponent from '@/components/ModalComponent.vue';\nimport ButtonComponent from '@/components/ButtonComponent.vue';\nimport MaterialIcon from '@/components/MaterialIcon.vue';\nimport { useI18n } from 'vue-i18n';\nimport { ref, watch } from 'vue';\nimport { useNestedMVDefault } from '@/utilities/useInternalState';\nimport {\n schemaTypeValues,\n type Schema,\n type RenderTemplateDefinition,\n} from '@/api/types';\nimport {\n cardTemplates,\n type cardTemplateIds,\n type pageTemplateIds,\n pageTemplates,\n} from '@/renderTemplates';\nimport { mapValueList } from '@/utilities/mapValueList';\n\nconst { t } = useI18n();\n\nconst props = defineProps<{\n modelValue: Schema[] | undefined;\n legend?: string;\n cardTemplateId?: cardTemplateIds;\n pageTemplateId?: pageTemplateIds;\n}>();\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: Schema[] | undefined): void;\n}>();\n\nconst value = useNestedMVDefault(\n props,\n (val) => emit('update:modelValue', val),\n [],\n true,\n);\n\nconst schemaTypeOptions = mapValueList(\n schemaTypeValues,\n 'categoryAdmin.schema.type',\n);\n\nconst addRequiredFieds = (\n fields?: RenderTemplateDefinition['requiredFields'],\n) => {\n if (!fields) return;\n for (const field of fields) {\n field.name = field.name.toLowerCase();\n const matchingField = value.value.find(\n (s) => s.name.toLowerCase() === field.name,\n );\n if (matchingField) {\n matchingField.type = field.type;\n matchingField.requiredByTemplate = true;\n matchingField.canUnsetRequired = field.canUnsetRequired;\n if (!field.canUnsetRequired) matchingField.required = true;\n continue;\n }\n value.value.push({\n name: field.name,\n type: field.type,\n showTitle: false,\n title: field.defaultTitle ?? '',\n required: true,\n requiredByTemplate: true,\n canUnsetRequired: field.canUnsetRequired,\n });\n }\n};\n\nwatch(\n () => [props.cardTemplateId, props.pageTemplateId],\n () => {\n for (const field of value.value) {\n field.requiredByTemplate = false;\n }\n addRequiredFieds(\n cardTemplates.find((i) => i.id === props.cardTemplateId)?.requiredFields,\n );\n addRequiredFieds(\n pageTemplates.find((i) => i.id === props.pageTemplateId)?.requiredFields,\n );\n },\n { immediate: true },\n);\n\nfunction addSchemaItem() {\n const emptySchema: Schema = {\n ...defaultSchema,\n name: 'Field' + (value.value.length + 1),\n };\n value.value = [...value.value, emptySchema];\n}\n\nconst showDeleteModal = ref(false);\nconst indexToDelete = ref<number>();\nasync function doDelete() {\n if (indexToDelete.value === undefined) return;\n showDeleteModal.value = false;\n const newSchema = [...value.value];\n newSchema.splice(indexToDelete.value, 1);\n value.value = newSchema;\n indexToDelete.value = undefined;\n}\n\nfunction moveItem(index: number, direction: -1 | 1) {\n const newIndex = index + direction;\n if (newIndex >= 0 && newIndex < value.value.length) {\n // swap entries:\n [value.value[newIndex], value.value[index]] = [\n value.value[index],\n value.value[newIndex],\n ];\n }\n}\n</script>\n\n<template>\n <fieldset class=\"min-w-0 border p-4 ps-4\">\n <legend>{{ t(legend ?? 'categoryAdmin.schema.fieldsetLegend') }}</legend>\n <ButtonComponent\n :text=\"t('categoryAdmin.schema.create')\"\n data-cy-id=\"CreateSchemaItemButton\"\n @click=\"addSchemaItem\"\n />\n <div\n class=\"mt-4 flex grow flex-col items-stretch gap-8 overflow-x-auto p-1 md:grid md:grid-cols-[repeat(4,minmax(max-content,1fr))]\"\n >\n <template v-for=\"(s, idx) of value\" :key=\"idx\">\n <hr class=\"col-span-full mt-2 first:hidden\" />\n <TextInput\n v-model=\"s.title\"\n label=\"categoryAdmin.schema.title\"\n required\n />\n <Dropdown\n v-model=\"s.type\"\n label=\"categoryAdmin.schema.type.title\"\n :options=\"schemaTypeOptions\"\n :getkey=\"(val) => val ?? 'empty'\"\n :disabled=\"s.requiredByTemplate\"\n required\n />\n <TextInput\n v-model=\"s.placeholder\"\n label=\"categoryAdmin.schema.placeholder\"\n :class=\"{ invisible: s.type === 'link' }\"\n />\n <div class=\"flex flex-row justify-evenly\">\n <Checkbox\n v-model=\"s.required\"\n label=\"categoryAdmin.schema.required\"\n :class=\"{ invisible: s.type === 'link' }\"\n :disabled=\"s.requiredByTemplate && !s.canUnsetRequired\"\n />\n <Checkbox\n v-model=\"s.showTitle\"\n label=\"categoryAdmin.schema.showTitle\"\n />\n </div>\n <TextInput\n v-model=\"s.minlength\"\n label=\"categoryAdmin.schema.minLength\"\n type=\"number\"\n :class=\"{ invisible: s.type === 'link' }\"\n />\n <TextInput\n v-model=\"s.maxlength\"\n label=\"categoryAdmin.schema.maxLength\"\n type=\"number\"\n :class=\"{ invisible: s.type === 'link' }\"\n />\n <TextInput\n v-model=\"s.name\"\n label=\"categoryAdmin.schema.name\"\n :disabled=\"s.requiredByTemplate\"\n required\n />\n <div class=\"flex flex-row\">\n <div class=\"my-2 mb-3 h-9 w-11 self-end px-1\">\n <button\n v-if=\"idx !== 0\"\n class=\"gnist-button w-9 p-0\"\n @click.prevent=\"() => moveItem(idx, -1)\"\n >\n <MaterialIcon class=\"text-2xl\" aria-hidden=\"true\">\n arrow_upward\n </MaterialIcon>\n </button>\n </div>\n\n <div class=\"my-2 mb-3 h-9 w-11 self-end px-1\">\n <button\n v-if=\"idx < value.length - 1\"\n class=\"gnist-button w-9 p-0\"\n @click.prevent=\"() => moveItem(idx, 1)\"\n >\n <MaterialIcon class=\"text-2xl\" aria-hidden=\"true\">\n arrow_downward\n </MaterialIcon>\n </button>\n </div>\n\n <ButtonComponent\n v-if=\"!s.requiredByTemplate\"\n :text=\"t('categoryAdmin.schema.delete.button')\"\n class=\"gnist-button gnist-button-danger my-2 mb-3 ml-4 self-end\"\n @click.prevent=\"\n (ev) => {\n ev.preventDefault();\n indexToDelete = idx;\n showDeleteModal = true;\n }\n \"\n />\n\n <div v-else class=\"flex flex-col whitespace-nowrap\">\n <div class=\"leading-8\"> </div>\n <div class=\"my-2 flex grow items-start justify-center\">\n <span\n :data-tip=\"t('categoryAdmin.template.requiredTooltip')\"\n class=\"tooltip static ml-2 whitespace-break-spaces font-normal sm:relative\"\n >\n <MaterialIcon class=\"text-2xl hover:text-secondary\">\n info\n </MaterialIcon>\n </span>\n </div>\n </div>\n </div>\n <MarkdownInput\n v-model=\"s.defaultValue\"\n label=\"categoryAdmin.schema.defaultValue\"\n :class=\"['md:col-span-4', { hidden: s.type !== 'markdown' }]\"\n multiline\n :rows=\"4\"\n :for-name=\"s.name + '_SchemaDefaultValue'\"\n editor-type=\"wysiwyg\"\n editor-height=\"20rem\"\n />\n </template>\n </div>\n <ModalComponent\n :show-modal=\"showDeleteModal\"\n :title=\"t('categoryAdmin.schema.delete.title')\"\n @close=\"\n () => {\n indexToDelete = undefined;\n showDeleteModal = false;\n }\n \"\n @handle-click=\"doDelete\"\n >\n <template #default>\n <p>{{ t('categoryAdmin.schema.delete.warning') }}</p>\n </template>\n </ModalComponent>\n </fieldset>\n</template>\n","import { type ComposableResult, compose } from './composable';\nimport type { Guid, localeValue } from './types';\nimport { apiUrl } from '@/config';\n\nconst breadcrumbUrl = apiUrl + '/breadcrumbs';\nexport function useBreadcrumbForPage(\n breadcrumbId?: number,\n): ComposableResult<Breadcrumb | null | undefined> {\n return compose(getBreadcrumbForPage(breadcrumbId));\n}\n\nexport function useBreadcrumbs(): ComposableResult<\n (Breadcrumb & { items: Breadcrumb[] }) | null | undefined\n> {\n return compose(getBreadcrumbs());\n}\n\nexport type Breadcrumb = {\n url?: string;\n id?: number;\n label: localeValue;\n parent?: Breadcrumb;\n children?: Breadcrumb[];\n homePageId?: Guid;\n};\n\nconst getBreadcrumbForPage = async (\n breadcrumbId?: number,\n): Promise<Breadcrumb | undefined> => {\n if (!breadcrumbId) {\n return undefined;\n }\n\n const response = await fetch(`${breadcrumbUrl}/item/${breadcrumbId}`, {\n method: 'GET',\n credentials: 'include',\n });\n if (!response.ok || response.status === 204) return undefined;\n return await response.json();\n};\n\nfunction addParentsToBreadcrumbs(\n breadcrumb: Breadcrumb,\n parent: Breadcrumb,\n items: Breadcrumb[],\n): void {\n breadcrumb.parent = {\n label: parent.label,\n id: parent.id,\n parent: parent.parent,\n };\n items.push(breadcrumb);\n breadcrumb.children?.forEach((child) =>\n addParentsToBreadcrumbs(child, breadcrumb, items),\n );\n}\nconst getBreadcrumbs = async (): Promise<\n (Breadcrumb & { items: Breadcrumb[] }) | undefined\n> => {\n const response = await fetch(`${breadcrumbUrl}`, {\n method: 'GET',\n credentials: 'include',\n });\n if (response.status === 204) return { label: { no: '' }, items: [] };\n if (!response.ok || response.status === 204) return undefined;\n const data: (Breadcrumb & { items: Breadcrumb[] }) | undefined =\n await response.json();\n if (!data) return;\n data.items = [];\n data.children?.forEach((breadcrumb) =>\n addParentsToBreadcrumbs(breadcrumb, data, data.items),\n );\n return data;\n};\n\nexport const createBreadcrumb = async (\n breadcrumb: Omit<Breadcrumb, 'id'>,\n): Promise<Breadcrumb> => {\n const response = await fetch(breadcrumbUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify(breadcrumb),\n });\n if (!response.ok) throw new Error('error.create_failed');\n return await response.json();\n};\nexport const updateBreadcrumb = async (\n breadcrumb: Breadcrumb,\n): Promise<void> => {\n const response = await fetch(`${breadcrumbUrl}/${breadcrumb.id}`, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify(breadcrumb),\n });\n if (!response.ok) throw new Error('error.update_failed');\n};\nexport const deleteBreadcrumb = async (breadcrumbId: number): Promise<void> => {\n const response = await fetch(`${breadcrumbUrl}/${breadcrumbId}`, {\n method: 'DELETE',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n });\n if (!response.ok) throw new Error('error.delete_failed');\n};\n","<script setup lang=\"ts\">\nimport {\n createBreadcrumb,\n deleteBreadcrumb,\n updateBreadcrumb,\n type Breadcrumb,\n} from '@/api/breadcrumbs';\nimport InputText from './forms/InputText.vue';\nimport { useNestedMV } from '@/utilities/useInternalState';\nimport ButtonComponent from './ButtonComponent.vue';\nimport { getEmptyLocaleValue } from '@/api/types';\nimport InputBlockPicker from './forms/InputBlockPicker.vue';\n\nconst props = defineProps<{\n modelValue: Breadcrumb;\n edit?: boolean;\n selectedId?: number;\n}>();\n\nconst emit = defineEmits<{\n (e: 'selected', value: Breadcrumb): void;\n (e: 'update:modelValue', value: typeof props.modelValue): void;\n (e: 'delete'): void;\n}>();\n\nconst value = useNestedMV(props, (val) => emit('update:modelValue', val));\n\nasync function save() {\n if (!value.value.id) {\n const result = await createBreadcrumb(value.value);\n value.value.id = result.id;\n } else {\n await updateBreadcrumb(value.value);\n }\n}\n\nasync function deleteChild() {\n if (value.value.id) {\n await deleteBreadcrumb(value.value.id);\n emit('delete');\n }\n}\n\nfunction addChild() {\n value.value.children ??= [];\n value.value.children.push({\n parent: { id: value.value.id, label: value.value.label },\n label: getEmptyLocaleValue(),\n });\n}\n</script>\n\n<template>\n <div class=\"mb-2 flex items-center\">\n <p\n v-if=\"!edit\"\n class=\"mr-4 cursor-pointer hover:underline\"\n :class=\"{ 'font-bold underline': value.id === selectedId }\"\n @click=\"emit('selected', modelValue)\"\n >\n {{ modelValue.label.no }}\n </p>\n\n <div v-else class=\"flex items-center space-x-2\">\n <InputText\n v-model=\"value.label.no\"\n label=\"categoryAdmin.breadcrumbName\"\n />\n <InputBlockPicker\n v-model=\"value.homePageId\"\n label=\"categoryAdmin.connectedHomePage\"\n />\n <div class=\"mt-8\">\n <ButtonComponent\n icon-class=\"text-2xl\"\n accessible-button\n text=\"buttons.new_page\"\n icon=\"add\"\n @click=\"addChild\"\n />\n <ButtonComponent\n icon-class=\"text-green-600 text-2xl\"\n accessible-button\n text=\"buttons.save\"\n icon=\"check\"\n @click=\"save\"\n />\n <ButtonComponent\n v-if=\"!value.children && value.parent\"\n type=\"danger\"\n accessible-button\n icon-class=\"text-2xl\"\n text=\"buttons.delete\"\n icon=\"delete\"\n @click=\"deleteChild\"\n />\n </div>\n </div>\n </div>\n\n <div class=\"ml-10\">\n <BreadCrumbTree\n v-for=\"child in modelValue.children\"\n :key=\"child.id\"\n :model-value=\"child\"\n :edit=\"edit\"\n :selected-id=\"selectedId\"\n @selected=\"(value) => emit('selected', value)\"\n @delete=\"\n () =>\n (value.children = value.children?.filter((c) => c.id !== child.id))\n \"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { useCategoriesLazy } from '@/api/category';\nimport { createBlock, updateBlock } from '@/api/blocks';\nimport {\n type Block,\n type BlockApimDetails,\n type BlockCreateDTO,\n type Category,\n type UpdateBlock,\n type BlockData,\n getApimDetailsWithKey,\n type Version,\n} from '@/api/types';\nimport { computed, ref, toRef, watch, watchEffect } from 'vue';\nimport { useRouter, type RouteLocationRaw, useRoute } from 'vue-router';\nimport ButtonComponent from '../ButtonComponent.vue';\nimport TextInput from '@/components/forms/InputText.vue';\nimport Dropdown, {\n toDropdownItems,\n} from '@/components/forms/InputDropdown.vue';\nimport ApimEditor from './ApimEditor.vue';\nimport ModalComponent from '../ModalComponent.vue';\nimport { useI18n } from 'vue-i18n';\nimport { useOrganization, useOrganizations } from '@/api/organization';\nimport TagDropdown from '../forms/InputTagDropdown.vue';\nimport { arrayEquals } from '@/utilities/arrayEquals';\nimport { useCurrentUser } from '@/api/auth';\nimport { useStoreAbility } from '@/abilities';\nimport { useRefreshable } from '@/utilities/useRefreshable';\nimport { deepClone } from '@/utilities/deepClone';\nimport { editBlockVersionsRouteId, editBlocksRouteId } from '@/config';\nimport { translateStringOrLocale } from '@/i18n';\nimport { localeValueEqual } from '@/utilities/localeValueEqual';\nimport SchemaEditor from '@/components/SchemaEditor.vue';\nimport Checkbox from '@/components/forms/InputCheckbox.vue';\nimport { pageTemplates } from '@/renderTemplates';\nimport { mapValueList } from '@/utilities/mapValueList';\nimport { getRouteTitle } from '@/utilities/routeUtils';\nimport { getVersion } from '@/api/versions';\nimport { useRoles } from '@/api/user';\nimport { useBreadcrumbs, type Breadcrumb } from '@/api/breadcrumbs';\nimport BreadCrumbTree from '../BreadCrumbTree.vue';\n\nconst { t } = useI18n();\nconst { can } = useStoreAbility();\n\nconst props = defineProps<{\n source: Block;\n isNewBlock: boolean;\n cancelRoute: RouteLocationRaw;\n}>();\n\ntype EditableBlock = Block;\n\nconst block = ref<EditableBlock>(deepClone(props.source));\nconst router = useRouter();\nconst route = useRoute();\nconst form = ref<HTMLFormElement | null>();\nconst showModal = ref<boolean>(false);\nconst { result: categories } = useCategoriesLazy();\nconst { result: owners } = useOrganizations(can('read', 'Organization'));\nwatch(owners, () => {\n if (!owners.value || block.value.ownerOrg) return;\n if (owners.value.length === 1) block.value.ownerOrg = owners.value[0];\n if (route.query.ownerOrg) {\n const ownerOrg = owners.value.find(\n (o) => o.organizationId === route.query.ownerOrg,\n );\n if (ownerOrg) block.value.ownerOrg = ownerOrg;\n }\n});\nconst { result: ownerDetails } = useOrganization(\n toRef(() => block.value.ownerOrg?.organizationId),\n);\nwatch(ownerDetails, () => {\n if (!ownerDetails.value || (block.value.documentOwners ?? []).length > 0) {\n return;\n }\n const loggedOnUserOwner = ownerDetails.value.users.find(\n (u) => u.userId === user.value?.id,\n );\n if (loggedOnUserOwner) block.value.documentOwners = [loggedOnUserOwner];\n else if (ownerDetails.value.users.length === 1) {\n block.value.documentOwners = [ownerDetails.value.users[0]];\n }\n});\nwatch(\n () => block.value?.ownerOrg?.organizationId,\n (newVal, oldVal) => {\n if (newVal !== oldVal) block.value.documentOwners = [];\n },\n);\n\nconst apimFieldInSchema = computed(\n () => block.value?.category?.schema?.find((i) => i.type === 'apim')?.name,\n);\nconst apimDataMovedToAnotherField = ref(false);\nconst sourceContent = ref<BlockData>();\nconst updatedContent = ref<BlockData>();\nconst [apimValue, refreshApimValue] = useRefreshable({\n get() {\n if (!updatedContent.value) return undefined;\n if (!apimFieldInSchema.value) return undefined;\n const { key: fieldUsedInContent, value } =\n getApimDetailsWithKey(updatedContent.value) ?? {};\n if (fieldUsedInContent && fieldUsedInContent !== apimFieldInSchema.value) {\n // Move to the other key and set a flag that we moved it\n updatedContent.value[apimFieldInSchema.value] =\n updatedContent.value[fieldUsedInContent];\n delete updatedContent.value[fieldUsedInContent];\n apimDataMovedToAnotherField.value = true;\n }\n return value;\n },\n set(newValue) {\n if (!apimFieldInSchema.value || !block.value) return; // Should not happen\n if (!updatedContent.value) return;\n if (newValue) {\n updatedContent.value[apimFieldInSchema.value] = newValue;\n } else {\n if (apimFieldInSchema.value in updatedContent.value) {\n delete updatedContent.value[apimFieldInSchema.value];\n }\n }\n },\n});\nwatch(\n block,\n async () => {\n if (!block.value) return;\n const version: Pick<Version, 'content'> | null = props.isNewBlock\n ? { content: {} }\n : await getVersion(block.value.blockId, block.value.currentVersionId);\n sourceContent.value = version?.content;\n updatedContent.value = deepClone(version?.content ?? {});\n },\n { immediate: true },\n);\nwatch(sourceContent, () => refreshApimValue(), { deep: true });\nconst apimValueHasChanged = computed(() => {\n if (!apimFieldInSchema.value) return false;\n if (apimDataMovedToAnotherField.value) return true;\n const oldValue = sourceContent.value?.[\n apimFieldInSchema.value\n ] as BlockApimDetails;\n if (!oldValue && apimValue.value) return true;\n if (oldValue && !apimValue.value) return true;\n return (\n apimValue.value?.apimId !== oldValue?.apimId ||\n apimValue.value?.useAuthentication != oldValue?.useAuthentication\n );\n});\n\nasync function submit(): Promise<void> {\n if (!form.value || !form.value.checkValidity()) return;\n if (props.isNewBlock) await createNewBlock();\n else await updateExistingBlock();\n}\n\nasync function createNewBlock(): Promise<void> {\n if (block.value.category) {\n const blockDTO: BlockCreateDTO = {\n name: block.value.name,\n description: block.value.description,\n categoryId: block.value.category.categoryId,\n customSchema: block.value.customSchema,\n tags: block.value.tags.map((i) => i.id),\n documentOwnerIds: block.value.documentOwners?.map((u) => u.userId),\n ownerOrganizationId: block.value.ownerOrg?.organizationId,\n audiences: block.value.audiences,\n content: apimValueHasChanged.value ? updatedContent.value : undefined,\n sitemapLocationId: block.value.sitemapLocationId,\n };\n const { blockId, currentVersionId } = await createBlock(blockDTO);\n router.push({\n name: 'edit_version',\n params: { blockId, versionId: currentVersionId },\n });\n }\n}\n\nasync function updateExistingBlock(): Promise<void> {\n if (block.value.category) {\n const blockDTO: UpdateBlock = {\n blockId: block.value.blockId,\n name: block.value.name,\n description: block.value.description,\n categoryId: block.value.category.categoryId,\n customSchema: block.value.customSchema,\n tags: block.value.tags.map((i) => i.id),\n OwnerOrganizationId: block.value.ownerOrg?.organizationId,\n documentOwnerIds: block.value.documentOwners?.map((u) => u.userId),\n audiences: block.value.audiences,\n content: apimValueHasChanged.value ? updatedContent.value : undefined,\n sitemapLocationId: block.value.sitemapLocationId,\n };\n await updateBlock(blockDTO);\n router.push({\n name: editBlockVersionsRouteId,\n params: { blockId: block.value.blockId },\n });\n }\n}\n\nconst blockHasChanged = computed(() => {\n return (\n !localeValueEqual(block.value.description, props.source.description) ||\n block.value.category?.categoryId !== props.source.category?.categoryId ||\n !arrayEquals(block.value.tags, props.source.tags, (tag) => tag.id) ||\n !arrayEquals(block.value?.audiences, props.source.audiences) ||\n !arrayEquals(\n block.value.documentOwners,\n props.source.documentOwners,\n (user) => user.userId,\n ) ||\n block.value.ownerOrg?.organizationId !==\n props.source.ownerOrg?.organizationId ||\n !localeValueEqual(block.value.name, props.source.name) ||\n apimValueHasChanged.value ||\n block.value.customSchema?.template !==\n props.source.customSchema?.template ||\n JSON.stringify(block.value.customSchema?.schema) !==\n JSON.stringify(props.source.customSchema?.schema) ||\n block.value.sitemapLocationId !== props.source.sitemapLocationId\n );\n});\n\nconst canSave = computed(() => {\n if (!block.value) return false;\n if (!props.isNewBlock && !blockHasChanged.value) return false;\n return (\n block.value.name.no.length > 1 &&\n (block.value.name.en?.length ?? 0) > 1 &&\n !!block.value.ownerOrg?.organizationId &&\n (block.value.documentOwners?.length ?? 0) > 0 &&\n !!block.value.category &&\n (!apimValue.value || !!apimValue.value.apimId)\n );\n});\n\nconst doNotSaveBackLocation = computed(() => {\n return props.isNewBlock\n ? { name: editBlocksRouteId }\n : {\n name: editBlockVersionsRouteId,\n params: { blockId: props.source.blockId },\n };\n});\n\nconst ownerOrgOptions = computed(() =>\n toDropdownItems(owners.value, (o) => [o.organizationId, o.name, o]),\n);\nconst ownerUserOptions = computed(() => {\n return toDropdownItems(ownerDetails.value?.users, (u) => [\n u.userId,\n u.name,\n u,\n ]);\n});\nconst user = useCurrentUser();\nconst filterCategories = (categories: Category[] | null): Category[] | null => {\n if (categories === null || user.value === null) return null;\n const roles = user.value.roles ?? [];\n return categories.filter(\n (category) =>\n !category.createRoles ||\n category.createRoles.length === 0 ||\n category.createRoles?.some((role) => roles.includes(role)),\n );\n};\nconst categoryOptions = computed(() =>\n toDropdownItems(filterCategories(categories.value), (c) => [\n c.categoryId.toString(),\n translateStringOrLocale(c.name).value ?? c.name.no,\n c,\n ]),\n);\n\nconst isCustomPage = computed(() => !!block.value.customSchema);\nconst canCreateCustomPage = can('create', 'CustomBlock');\nconst pageTemplateOptions = mapValueList(\n pageTemplates.map((t) => t.id),\n 'templates',\n true,\n);\nconst blockTitle = translateStringOrLocale(() => block.value?.name);\nwatchEffect(() => {\n if (blockTitle.value)\n document.title = getRouteTitle([\n t('admin.blockProduction.detailsTitle'),\n blockTitle.value,\n ]);\n});\n\nconst { result: roles } = useRoles(['AudienceTargeting']);\nconst roleOptions = computed(() =>\n mapValueList(roles.value?.map((r) => r.name) ?? [], 'roleSelection'),\n);\n\nconst { result: breadcrumbData } = useBreadcrumbs();\nwatch([breadcrumbData, block], () => {\n if (!block.value || !breadcrumbData.value) return;\n selectedBreadcrumb.value =\n breadcrumbData.value.items.find(\n (b) => b.id === block.value.sitemapLocationId,\n ) ?? null;\n});\n\nconst showBreadcrumbSelector = ref(false);\nconst selectedBreadcrumb = ref<Breadcrumb | null>(null);\n\nfunction selectBreadcrumb(value: Breadcrumb) {\n selectedBreadcrumb.value = value;\n showBreadcrumbSelector.value = false;\n block.value.sitemapLocationId = value.id;\n}\nconst reversedBcPath = computed(() => {\n let currentBc = selectedBreadcrumb.value;\n const bcPath = [currentBc];\n while (currentBc?.parent) {\n currentBc = currentBc.parent;\n bcPath.push(currentBc);\n }\n return bcPath\n .map((b) => b?.label.no)\n .reverse()\n .join(' / ');\n});\n</script>\n<template>\n <form\n ref=\"form\"\n class=\"flex grid-cols-2 flex-col items-stretch gap-x-4 md:grid\"\n @submit.prevent=\"submit\"\n >\n <Checkbox\n v-if=\"canCreateCustomPage\"\n :model-value=\"isCustomPage\"\n label=\"admin.blockProduction.isCustomPage\"\n direction=\"horizontal\"\n mode=\"toggle\"\n class=\"self-center\"\n @update:model-value=\"\n (checked) => {\n block.customSchema = checked\n ? { schema: [], template: 'fullPage' }\n : undefined;\n }\n \"\n />\n\n <div v-if=\"canCreateCustomPage\">\n <Dropdown\n v-if=\"block.customSchema\"\n v-model=\"block.customSchema.template\"\n label=\"categoryAdmin.template.page\"\n :options=\"pageTemplateOptions\"\n :getkey=\"(val) => val ?? 'empty'\"\n />\n </div>\n\n <TextInput\n v-model=\"block.name.no\"\n label=\"admin.blockProduction.nameNo\"\n required\n :minlength=\"1\"\n :maxlength=\"80\"\n tooltip=\"admin.blockProduction.nameTooltip\"\n placeholder=\"admin.blockProduction.namePlaceholder\"\n />\n <TextInput\n v-model=\"block.name.en\"\n label=\"admin.blockProduction.nameEn\"\n required\n :minlength=\"1\"\n :maxlength=\"80\"\n tooltip=\"admin.blockProduction.nameTooltip\"\n placeholder=\"admin.blockProduction.namePlaceholder\"\n />\n <Dropdown\n v-model=\"block.ownerOrg\"\n label=\"admin.blockProduction.ownerOrg\"\n tooltip=\"admin.blockProduction.ownerOrgTooltip\"\n :options=\"ownerOrgOptions\"\n placeholder=\"admin.blockProduction.ownerOrgPlaceholder\"\n :getkey=\"(o) => o?.organizationId\"\n required\n />\n <Dropdown\n v-model=\"block.documentOwners\"\n label=\"admin.blockProduction.documentOwner\"\n tooltip=\"admin.blockProduction.documentOwnerTooltip\"\n :options=\"ownerUserOptions\"\n :multiple=\"{\n emptyLabel: 'admin.blockProduction.documentOwnerPlaceholder',\n }\"\n :getkey=\"(o) => o?.userId\"\n required\n />\n <div\n class=\"col-span-2 flex grid-cols-2 grid-rows-[repeat(2,1fr)] flex-col items-stretch gap-x-4 md:grid\"\n >\n <Dropdown\n v-model=\"block.category\"\n label=\"admin.blockProduction.category\"\n tooltip=\"admin.blockProduction.categoryTooltip\"\n :options=\"categoryOptions\"\n placeholder=\"admin.blockProduction.categoryPlaceholder\"\n :getkey=\"(c) => c?.categoryId\"\n required\n />\n <TagDropdown\n v-model=\"block.tags\"\n label=\"admin.blockProduction.tags\"\n suggestedlabel=\"admin.blockProduction.suggestedTags\"\n tooltip=\"admin.blockProduction.tagsTooltip\"\n :multiple=\"{ emptyLabel: 'admin.blockProduction.tagsPlaceholder' }\"\n :taglistclass=\"['max-h-24 overflow-y-auto']\"\n :category=\"block.category\"\n />\n\n <Dropdown\n v-model=\"block.audiences\"\n label=\"admin.blockProduction.audience\"\n tooltip=\"admin.blockProduction.audienceTooltip\"\n :multiple=\"{ emptyLabel: 'admin.blockProduction.audiencePlaceholder' }\"\n :options=\"roleOptions\"\n :getkey=\"(c) => c\"\n />\n\n <ApimEditor\n v-if=\"apimFieldInSchema && !!updatedContent\"\n v-model=\"apimValue\"\n mode=\"Block\"\n :is-new-block=\"isNewBlock\"\n class=\"col-span-2\"\n @read-metadata=\"\n ({ displayName, description }) => {\n if (displayName) {\n block.name.no = displayName;\n block.name.en = displayName;\n }\n if (description) {\n block.description.no = description;\n block.description.en = description;\n }\n }\n \"\n />\n\n <TextInput\n v-model=\"block.description.no\"\n label=\"admin.blockProduction.descriptionNo\"\n multiline\n :minlength=\"1\"\n :maxlength=\"240\"\n :rows=\"7\"\n tooltip=\"admin.blockProduction.descriptionTooltip\"\n placeholder=\"admin.blockProduction.descriptionPlaceholder\"\n class=\"col-span-2 w-full\"\n />\n <TextInput\n v-model=\"block.description.en\"\n label=\"admin.blockProduction.descriptionEn\"\n multiline\n :minlength=\"1\"\n :maxlength=\"240\"\n :rows=\"7\"\n tooltip=\"admin.blockProduction.descriptionTooltip\"\n placeholder=\"admin.blockProduction.descriptionPlaceholder\"\n class=\"col-span-2 w-full\"\n />\n\n <SchemaEditor\n v-if=\"block.customSchema\"\n v-model=\"block.customSchema.schema\"\n legend=\"admin.blockProduction.customSchemaLegend\"\n class=\"col-span-2\"\n />\n <br />\n\n <span class=\"col-span-2 mt-2 w-full md:w-1/2\">\n <ButtonComponent\n class=\"mr-2\"\n text=\"admin.blockProduction.showBreadcrumb\"\n @click=\"showBreadcrumbSelector = true\"\n />\n\n <ButtonComponent\n text=\"admin.blockProduction.showBreadcrumbTooltip\"\n icon=\"info\"\n icon-class=\"text-2xl leading-6\"\n class=\"hover:text-secondary\"\n />\n </span>\n\n <p v-if=\"selectedBreadcrumb\" class=\"col-span-2 my-4\">\n Valgt navigasjonssti:\n {{ reversedBcPath }}\n </p>\n\n <ModalComponent\n :primary-button-type=\"'none'\"\n :show-modal=\"showBreadcrumbSelector\"\n :title=\"t('admin.blockProduction.selectBreadcrumb')\"\n @close=\"showBreadcrumbSelector = false\"\n >\n <div>\n <BreadCrumbTree\n v-if=\"breadcrumbData\"\n :model-value=\"breadcrumbData\"\n :selected-id=\"selectedBreadcrumb?.id\"\n @selected=\"selectBreadcrumb\"\n />\n </div>\n </ModalComponent>\n </div>\n <div class=\"col-span-2 flex justify-between\">\n <div class=\"mt-4\">\n <ButtonComponent\n :text=\"t('admin.blockProduction.cancel')\"\n @click=\"\n blockHasChanged ? (showModal = true) : router.push(cancelRoute)\n \"\n />\n <ModalComponent\n :show-modal=\"showModal\"\n :title=\"''\"\n @close=\"showModal = false\"\n >\n <template #default>\n <p>{{ t('admin.blockProduction.confirmExit') }}</p>\n </template>\n <template #buttons>\n <div class=\"gnist-button-group\">\n <ButtonComponent\n :text=\"t('admin.blockProduction.save')\"\n type=\"primary\"\n :disabled=\"!canSave\"\n @click=\"submit\"\n />\n <RouterLink class=\"gnist-button\" :to=\"doNotSaveBackLocation\">\n {{ t('admin.blockProduction.doNotSave') }}\n </RouterLink>\n <ButtonComponent\n :text=\"t('admin.blockProduction.cancel')\"\n @click=\"showModal = false\"\n />\n </div>\n </template>\n </ModalComponent>\n </div>\n <ButtonComponent\n :text=\"\n isNewBlock\n ? t('admin.blockProduction.next')\n : t('admin.blockProduction.saveChanges')\n \"\n class=\"mt-4\"\n type=\"primary\"\n :submit=\"true\"\n :disabled=\"!canSave\"\n data-cy-id=\"SaveDetailsButton\"\n />\n </div>\n </form>\n</template>\n","<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { useRoute } from 'vue-router';\nimport { useBlock } from '@/api/blocks';\nimport {\n Status,\n type Block,\n type Guid,\n EMPTY_GUID,\n getEmptyLocaleValue,\n} from '@/api/types';\nimport DetailsEditor from '@/components/admin/DetailsEditor.vue';\nimport { throwOnError } from '@/api/composable';\nimport { useI18n } from 'vue-i18n';\nimport { editBlocksRouteId, editBlockVersionsRouteId } from '@/config';\n\nconst { t } = useI18n();\n\nconst route = useRoute();\nconst isExistingBlock = route.params.blockId !== undefined;\nconst blockId = route.params.blockId as Guid;\nconst { result: block } = isExistingBlock\n ? throwOnError(useBlock(blockId, true))\n : {\n result: ref<Block | null>({\n blockId: EMPTY_GUID,\n currentVersionNumber: undefined,\n currentVersionId: -1,\n category: undefined,\n content: {},\n status: Status.Draft,\n description: getEmptyLocaleValue(),\n name: getEmptyLocaleValue(),\n tags: [],\n isBacklog: true,\n hasBacklog: true,\n }),\n };\n</script>\n\n<template>\n <div class=\"w-full bg-gnist-gray-light-light\">\n <div class=\"mx-2 py-8 md:mx-auto md:w-[50rem]\">\n <h1 class=\"mb-16\">\n {{\n isExistingBlock\n ? t('admin.blockProduction.editBlock')\n : t('admin.blockProduction.createNewToolTitle')\n }}\n </h1>\n <DetailsEditor\n v-if=\"block\"\n :source=\"block\"\n :is-new-block=\"!isExistingBlock\"\n :cancel-route=\"\n isExistingBlock\n ? {\n name: editBlockVersionsRouteId,\n params: { blockId: block.blockId },\n }\n : { name: editBlocksRouteId }\n \"\n />\n </div>\n </div>\n</template>\n","// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n 'major',\n 'premajor',\n 'minor',\n 'preminor',\n 'patch',\n 'prepatch',\n 'prerelease',\n]\n\nmodule.exports = {\n MAX_LENGTH,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 0b001,\n FLAG_LOOSE: 0b010,\n}\n","const debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n","const {\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n ['\\\\s', 1],\n ['\\\\d', MAX_LENGTH],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value\n .split(`${token}*`).join(`${token}{0,${max}}`)\n .split(`${token}+`).join(`${token}{1,${max}}`)\n }\n return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value)\n const index = R++\n debug(name, index, value)\n t[name] = index\n src[index] = value\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n `(?:${src[t.PRERELEASE]})?` +\n `(?:${src[t.BUILD]})?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n","// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n if (!options) {\n return emptyOpts\n }\n\n if (typeof options !== 'object') {\n return looseOption\n }\n\n return options\n}\nmodule.exports = parseOptions\n","const numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers,\n}\n","const debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return (\n compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n )\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('build compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier, identifierBase) {\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier, identifierBase)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier, identifierBase)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier, identifierBase)\n this.inc('pre', identifier, identifierBase)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier, identifierBase)\n }\n this.inc('pre', identifier, identifierBase)\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre': {\n const base = Number(identifierBase) ? 1 : 0\n\n if (!identifier && identifierBase === false) {\n throw new Error('invalid increment argument: identifier is empty')\n }\n\n if (this.prerelease.length === 0) {\n this.prerelease = [base]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n if (identifier === this.prerelease.join('.') && identifierBase === false) {\n throw new Error('invalid increment argument: identifier already exists')\n }\n this.prerelease.push(base)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n let prerelease = [identifier, base]\n if (identifierBase === false) {\n prerelease = [identifier]\n }\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = prerelease\n }\n } else {\n this.prerelease = prerelease\n }\n }\n break\n }\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.raw = this.format()\n if (this.build.length) {\n this.raw += `+${this.build.join('.')}`\n }\n return this\n }\n}\n\nmodule.exports = SemVer\n","const SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n if (version instanceof SemVer) {\n return version\n }\n try {\n return new SemVer(version, options)\n } catch (er) {\n if (!throwErrors) {\n return null\n }\n throw er\n }\n}\n\nmodule.exports = parse\n","const parse = require('./parse')\nconst valid = (version, options) => {\n const v = parse(version, options)\n return v ? v.version : null\n}\nmodule.exports = valid\n","const parse = require('./parse')\nconst clean = (version, options) => {\n const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\nmodule.exports = clean\n","const SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n if (typeof (options) === 'string') {\n identifierBase = identifier\n identifier = options\n options = undefined\n }\n\n try {\n return new SemVer(\n version instanceof SemVer ? version.version : version,\n options\n ).inc(release, identifier, identifierBase).version\n } catch (er) {\n return null\n }\n}\nmodule.exports = inc\n","const parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n const v1 = parse(version1, null, true)\n const v2 = parse(version2, null, true)\n const comparison = v1.compare(v2)\n\n if (comparison === 0) {\n return null\n }\n\n const v1Higher = comparison > 0\n const highVersion = v1Higher ? v1 : v2\n const lowVersion = v1Higher ? v2 : v1\n const highHasPre = !!highVersion.prerelease.length\n const lowHasPre = !!lowVersion.prerelease.length\n\n if (lowHasPre && !highHasPre) {\n // Going from prerelease -> no prerelease requires some special casing\n\n // If the low version has only a major, then it will always be a major\n // Some examples:\n // 1.0.0-1 -> 1.0.0\n // 1.0.0-1 -> 1.1.1\n // 1.0.0-1 -> 2.0.0\n if (!lowVersion.patch && !lowVersion.minor) {\n return 'major'\n }\n\n // Otherwise it can be determined by checking the high version\n\n if (highVersion.patch) {\n // anything higher than a patch bump would result in the wrong version\n return 'patch'\n }\n\n if (highVersion.minor) {\n // anything higher than a minor bump would result in the wrong version\n return 'minor'\n }\n\n // bumping major/minor/patch all have same result\n return 'major'\n }\n\n // add the `pre` prefix if we are going to a prerelease version\n const prefix = highHasPre ? 'pre' : ''\n\n if (v1.major !== v2.major) {\n return prefix + 'major'\n }\n\n if (v1.minor !== v2.minor) {\n return prefix + 'minor'\n }\n\n if (v1.patch !== v2.patch) {\n return prefix + 'patch'\n }\n\n // high and low are preleases\n return 'prerelease'\n}\n\nmodule.exports = diff\n","const SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n","const SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n","const SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n","const parse = require('./parse')\nconst prerelease = (version, options) => {\n const parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n","const SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n","const compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n","const compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n","const SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n const versionA = new SemVer(a, loose)\n const versionB = new SemVer(b, loose)\n return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n","const compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n","const compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n","const compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n","const compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n","const compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n","const compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n","const compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n","const compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n","const eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n switch (op) {\n case '===':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a === b\n\n case '!==':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError(`Invalid operator: ${op}`)\n }\n}\nmodule.exports = cmp\n","const SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version === 'number') {\n version = String(version)\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n options = options || {}\n\n let match = null\n if (!options.rtl) {\n match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE])\n } else {\n // Find the right-most coercible string that does not share\n // a terminus with a more left-ward coercible string.\n // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'\n //\n // Walk through the string checking with a /g regexp\n // Manually set the index so as to pick up overlapping matches.\n // Stop when we get a match that ends at the string end, since no\n // coercible string can be more right-ward without the same terminus.\n const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]\n let next\n while ((next = coerceRtlRegex.exec(version)) &&\n (!match || match.index + match[0].length !== version.length)\n ) {\n if (!match ||\n next.index + next[0].length !== match.index + match[0].length) {\n match = next\n }\n coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length\n }\n // leave it in a clean state\n coerceRtlRegex.lastIndex = -1\n }\n\n if (match === null) {\n return null\n }\n\n const major = match[2]\n const minor = match[3] || '0'\n const patch = match[4] || '0'\n const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''\n const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''\n\n return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options)\n}\nmodule.exports = coerce\n","class LRUCache {\n constructor () {\n this.max = 1000\n this.map = new Map()\n }\n\n get (key) {\n const value = this.map.get(key)\n if (value === undefined) {\n return undefined\n } else {\n // Remove the key from the map and add it to the end\n this.map.delete(key)\n this.map.set(key, value)\n return value\n }\n }\n\n delete (key) {\n return this.map.delete(key)\n }\n\n set (key, value) {\n const deleted = this.delete(key)\n\n if (!deleted && value !== undefined) {\n // If cache is full, delete the least recently used item\n if (this.map.size >= this.max) {\n const firstKey = this.map.keys().next().value\n this.delete(firstKey)\n }\n\n this.map.set(key, value)\n }\n\n return this\n }\n}\n\nmodule.exports = LRUCache\n","const SPACE_CHARACTERS = /\\s+/g\n\n// hoisted class for cyclic dependency\nclass Range {\n constructor (range, options) {\n options = parseOptions(options)\n\n if (range instanceof Range) {\n if (\n range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease\n ) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n // just put it in the set and return\n this.raw = range.value\n this.set = [[range]]\n this.formatted = undefined\n return this\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First reduce all whitespace as much as possible so we do not have to rely\n // on potentially slow regexes like \\s*. This is then stored and used for\n // future error messages as well.\n this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')\n\n // First, split on ||\n this.set = this.raw\n .split('||')\n // map the range to a 2d array of comparators\n .map(r => this.parseRange(r.trim()))\n // throw out any comparator lists that are empty\n // this generally means that it was not a valid range, which is allowed\n // in loose mode, but will still throw if the WHOLE range is invalid.\n .filter(c => c.length)\n\n if (!this.set.length) {\n throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n }\n\n // if we have any that are not the null set, throw out null sets.\n if (this.set.length > 1) {\n // keep the first one, in case they're all null sets\n const first = this.set[0]\n this.set = this.set.filter(c => !isNullSet(c[0]))\n if (this.set.length === 0) {\n this.set = [first]\n } else if (this.set.length > 1) {\n // if we have any that are *, then the range is just *\n for (const c of this.set) {\n if (c.length === 1 && isAny(c[0])) {\n this.set = [c]\n break\n }\n }\n }\n }\n\n this.formatted = undefined\n }\n\n get range () {\n if (this.formatted === undefined) {\n this.formatted = ''\n for (let i = 0; i < this.set.length; i++) {\n if (i > 0) {\n this.formatted += '||'\n }\n const comps = this.set[i]\n for (let k = 0; k < comps.length; k++) {\n if (k > 0) {\n this.formatted += ' '\n }\n this.formatted += comps[k].toString().trim()\n }\n }\n }\n return this.formatted\n }\n\n format () {\n return this.range\n }\n\n toString () {\n return this.range\n }\n\n parseRange (range) {\n // memoize range parsing for performance.\n // this is a very hot path, and fully deterministic.\n const memoOpts =\n (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n (this.options.loose && FLAG_LOOSE)\n const memoKey = memoOpts + ':' + range\n const cached = cache.get(memoKey)\n if (cached) {\n return cached\n }\n\n const loose = this.options.loose\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n debug('hyphen replace', range)\n\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range)\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n debug('tilde trim', range)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n debug('caret trim', range)\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n let rangeList = range\n .split(' ')\n .map(comp => parseComparator(comp, this.options))\n .join(' ')\n .split(/\\s+/)\n // >=0.0.0 is equivalent to *\n .map(comp => replaceGTE0(comp, this.options))\n\n if (loose) {\n // in loose mode, throw out any that are not valid comparators\n rangeList = rangeList.filter(comp => {\n debug('loose invalid filter', comp, this.options)\n return !!comp.match(re[t.COMPARATORLOOSE])\n })\n }\n debug('range list', rangeList)\n\n // if any comparators are the null set, then replace with JUST null set\n // if more than one comparator, remove any * comparators\n // also, don't include the same comparator more than once\n const rangeMap = new Map()\n const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n for (const comp of comparators) {\n if (isNullSet(comp)) {\n return [comp]\n }\n rangeMap.set(comp.value, comp)\n }\n if (rangeMap.size > 1 && rangeMap.has('')) {\n rangeMap.delete('')\n }\n\n const result = [...rangeMap.values()]\n cache.set(memoKey, result)\n return result\n }\n\n intersects (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some((thisComparators) => {\n return (\n isSatisfiable(thisComparators, options) &&\n range.set.some((rangeComparators) => {\n return (\n isSatisfiable(rangeComparators, options) &&\n thisComparators.every((thisComparator) => {\n return rangeComparators.every((rangeComparator) => {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n )\n })\n )\n })\n }\n\n // if ANY of the sets match ALL of its comparators, then pass\n test (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n for (let i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n safeRe: re,\n t,\n comparatorTrimReplace,\n tildeTrimReplace,\n caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n let result = true\n const remainingComparators = comparators.slice()\n let testComparator = remainingComparators.pop()\n\n while (result && remainingComparators.length) {\n result = remainingComparators.every((otherComparator) => {\n return testComparator.intersects(otherComparator, options)\n })\n\n testComparator = remainingComparators.pop()\n }\n\n return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceTilde(c, options))\n .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('tilde', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0-0\n ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0-0\n ret = `>=${M}.${m}.${p\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceCaret(c, options))\n .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n debug('caret', comp, options)\n const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n const z = options.includePrerelease ? '-0' : ''\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('caret', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n if (M === '0') {\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n } else {\n ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${+M + 1}.0.0-0`\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p\n } <${+M + 1}.0.0-0`\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nconst replaceXRanges = (comp, options) => {\n debug('replaceXRanges', comp, options)\n return comp\n .split(/\\s+/)\n .map((c) => replaceXRange(c, options))\n .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n comp = comp.trim()\n const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n const xM = isX(M)\n const xm = xM || isX(m)\n const xp = xm || isX(p)\n const anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : ''\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n if (gtlt === '<') {\n pr = '-0'\n }\n\n ret = `${gtlt + M}.${m}.${p}${pr}`\n } else if (xm) {\n ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n } else if (xp) {\n ret = `>=${M}.${m}.0${pr\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp\n .trim()\n .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n debug('replaceGTE0', comp, options)\n return comp\n .trim()\n .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr) => {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n } else if (isX(fp)) {\n from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n } else if (fpr) {\n from = `>=${from}`\n } else {\n from = `>=${from}${incPr ? '-0' : ''}`\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = `<${+tM + 1}.0.0-0`\n } else if (isX(tp)) {\n to = `<${tM}.${+tm + 1}.0-0`\n } else if (tpr) {\n to = `<=${tM}.${tm}.${tp}-${tpr}`\n } else if (incPr) {\n to = `<${tM}.${tm}.${+tp + 1}-0`\n } else {\n to = `<=${to}`\n }\n\n return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n for (let i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (let i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === Comparator.ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n const allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n","const ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n static get ANY () {\n return ANY\n }\n\n constructor (comp, options) {\n options = parseOptions(options)\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n comp = comp.trim().split(/\\s+/).join(' ')\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n }\n\n parse (comp) {\n const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n const m = comp.match(r)\n\n if (!m) {\n throw new TypeError(`Invalid comparator: ${comp}`)\n }\n\n this.operator = m[1] !== undefined ? m[1] : ''\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n }\n\n toString () {\n return this.value\n }\n\n test (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY || version === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n }\n\n intersects (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (this.operator === '') {\n if (this.value === '') {\n return true\n }\n return new Range(comp.value, options).test(this.value)\n } else if (comp.operator === '') {\n if (comp.value === '') {\n return true\n }\n return new Range(this.value, options).test(comp.semver)\n }\n\n options = parseOptions(options)\n\n // Special cases where nothing can possibly be lower\n if (options.includePrerelease &&\n (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n return false\n }\n if (!options.includePrerelease &&\n (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n return false\n }\n\n // Same direction increasing (> or >=)\n if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n return true\n }\n // Same direction decreasing (< or <=)\n if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n return true\n }\n // same SemVer and both sides are inclusive (<= or >=)\n if (\n (this.semver.version === comp.semver.version) &&\n this.operator.includes('=') && comp.operator.includes('=')) {\n return true\n }\n // opposite directions less than\n if (cmp(this.semver, '<', comp.semver, options) &&\n this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n return true\n }\n // opposite directions greater than\n if (cmp(this.semver, '>', comp.semver, options) &&\n this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n return true\n }\n return false\n }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n","const Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\nmodule.exports = satisfies\n","const Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n new Range(range, options).set\n .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n let max = null\n let maxSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\nmodule.exports = maxSatisfying\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n let min = null\n let minSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\nmodule.exports = minSatisfying\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n range = new Range(range, loose)\n\n let minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let setMin = null\n comparators.forEach((comparator) => {\n // Clone to avoid manipulating the comparator's semver object.\n const compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!setMin || gt(compver, setMin)) {\n setMin = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error(`Unexpected operation: ${comparator.operator}`)\n }\n })\n if (setMin && (!minver || gt(minver, setMin))) {\n minver = setMin\n }\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\nmodule.exports = minVersion\n","const Range = require('../classes/range')\nconst validRange = (range, options) => {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\nmodule.exports = validRange\n","const SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n let gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisfies the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let high = null\n let low = null\n\n comparators.forEach((comparator) => {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nmodule.exports = outside\n","// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n","const outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n","const Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n","// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n const set = []\n let first = null\n let prev = null\n const v = versions.sort((a, b) => compare(a, b, options))\n for (const version of v) {\n const included = satisfies(version, range, options)\n if (included) {\n prev = version\n if (!first) {\n first = version\n }\n } else {\n if (prev) {\n set.push([first, prev])\n }\n prev = null\n first = null\n }\n }\n if (first) {\n set.push([first, null])\n }\n\n const ranges = []\n for (const [min, max] of set) {\n if (min === max) {\n ranges.push(min)\n } else if (!max && min === v[0]) {\n ranges.push('*')\n } else if (!max) {\n ranges.push(`>=${min}`)\n } else if (min === v[0]) {\n ranges.push(`<=${max}`)\n } else {\n ranges.push(`${min} - ${max}`)\n }\n }\n const simplified = ranges.join(' || ')\n const original = typeof range.raw === 'string' ? range.raw : String(range)\n return simplified.length < original.length ? simplified : range\n}\n","const Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n// some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n// - If C is only the ANY comparator, return true\n// - Else if in prerelease mode, return false\n// - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n// - if in prerelease mode, return true\n// - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n// - If GT, and EQ does not satisfy GT, return true (null set)\n// - If LT, and EQ does not satisfy LT, return true (null set)\n// - If EQ satisfies every C, return true\n// - Else return false\n// - If GT\n// - If GT.semver is lower than any > or >= comp in C, return false\n// - If GT is >=, and GT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n// - If LT.semver is greater than any < or <= comp in C, return false\n// - If LT is <=, and LT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n if (sub === dom) {\n return true\n }\n\n sub = new Range(sub, options)\n dom = new Range(dom, options)\n let sawNonNull = false\n\n OUTER: for (const simpleSub of sub.set) {\n for (const simpleDom of dom.set) {\n const isSub = simpleSubset(simpleSub, simpleDom, options)\n sawNonNull = sawNonNull || isSub !== null\n if (isSub) {\n continue OUTER\n }\n }\n // the null set is a subset of everything, but null simple ranges in\n // a complex range should be ignored. so if we saw a non-null range,\n // then we know this isn't a subset, but if EVERY simple range was null,\n // then it is a subset.\n if (sawNonNull) {\n return false\n }\n }\n return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n if (sub === dom) {\n return true\n }\n\n if (sub.length === 1 && sub[0].semver === ANY) {\n if (dom.length === 1 && dom[0].semver === ANY) {\n return true\n } else if (options.includePrerelease) {\n sub = minimumVersionWithPreRelease\n } else {\n sub = minimumVersion\n }\n }\n\n if (dom.length === 1 && dom[0].semver === ANY) {\n if (options.includePrerelease) {\n return true\n } else {\n dom = minimumVersion\n }\n }\n\n const eqSet = new Set()\n let gt, lt\n for (const c of sub) {\n if (c.operator === '>' || c.operator === '>=') {\n gt = higherGT(gt, c, options)\n } else if (c.operator === '<' || c.operator === '<=') {\n lt = lowerLT(lt, c, options)\n } else {\n eqSet.add(c.semver)\n }\n }\n\n if (eqSet.size > 1) {\n return null\n }\n\n let gtltComp\n if (gt && lt) {\n gtltComp = compare(gt.semver, lt.semver, options)\n if (gtltComp > 0) {\n return null\n } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n return null\n }\n }\n\n // will iterate one or zero times\n for (const eq of eqSet) {\n if (gt && !satisfies(eq, String(gt), options)) {\n return null\n }\n\n if (lt && !satisfies(eq, String(lt), options)) {\n return null\n }\n\n for (const c of dom) {\n if (!satisfies(eq, String(c), options)) {\n return false\n }\n }\n\n return true\n }\n\n let higher, lower\n let hasDomLT, hasDomGT\n // if the subset has a prerelease, we need a comparator in the superset\n // with the same tuple and a prerelease, or it's not a subset\n let needDomLTPre = lt &&\n !options.includePrerelease &&\n lt.semver.prerelease.length ? lt.semver : false\n let needDomGTPre = gt &&\n !options.includePrerelease &&\n gt.semver.prerelease.length ? gt.semver : false\n // exception: <1.2.3-0 is the same as <1.2.3\n if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n needDomLTPre = false\n }\n\n for (const c of dom) {\n hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n if (gt) {\n if (needDomGTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomGTPre.major &&\n c.semver.minor === needDomGTPre.minor &&\n c.semver.patch === needDomGTPre.patch) {\n needDomGTPre = false\n }\n }\n if (c.operator === '>' || c.operator === '>=') {\n higher = higherGT(gt, c, options)\n if (higher === c && higher !== gt) {\n return false\n }\n } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) {\n return false\n }\n }\n if (lt) {\n if (needDomLTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomLTPre.major &&\n c.semver.minor === needDomLTPre.minor &&\n c.semver.patch === needDomLTPre.patch) {\n needDomLTPre = false\n }\n }\n if (c.operator === '<' || c.operator === '<=') {\n lower = lowerLT(lt, c, options)\n if (lower === c && lower !== lt) {\n return false\n }\n } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) {\n return false\n }\n }\n if (!c.operator && (lt || gt) && gtltComp !== 0) {\n return false\n }\n }\n\n // if there was a < or >, and nothing in the dom, then must be false\n // UNLESS it was limited by another range in the other direction.\n // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n if (gt && hasDomLT && !lt && gtltComp !== 0) {\n return false\n }\n\n if (lt && hasDomGT && !gt && gtltComp !== 0) {\n return false\n }\n\n // we needed a prerelease range in a specific tuple, but didn't get one\n // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,\n // because it includes prereleases in the 1.2.3 tuple\n if (needDomGTPre || needDomLTPre) {\n return false\n }\n\n return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp > 0 ? a\n : comp < 0 ? b\n : b.operator === '>' && a.operator === '>=' ? b\n : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp < 0 ? a\n : comp > 0 ? b\n : b.operator === '<' && a.operator === '<=' ? b\n : a\n}\n\nmodule.exports = subset\n","// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n parse,\n valid,\n clean,\n inc,\n diff,\n major,\n minor,\n patch,\n prerelease,\n compare,\n rcompare,\n compareLoose,\n compareBuild,\n sort,\n rsort,\n gt,\n lt,\n eq,\n neq,\n gte,\n lte,\n cmp,\n coerce,\n Comparator,\n Range,\n satisfies,\n toComparators,\n maxSatisfying,\n minSatisfying,\n minVersion,\n validRange,\n outside,\n gtr,\n ltr,\n intersects,\n simplifyRange,\n subset,\n SemVer,\n re: internalRe.re,\n src: internalRe.src,\n tokens: internalRe.t,\n SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n RELEASE_TYPES: constants.RELEASE_TYPES,\n compareIdentifiers: identifiers.compareIdentifiers,\n rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n","<script setup lang=\"ts\">\nimport ButtonComponent from '@/components/ButtonComponent.vue';\nimport { useStoreAbility, useSubject } from '@/abilities';\nimport { useCurrentUser } from '@/api/auth';\nimport { getVersion, updateVersion } from '@/api/versions';\nimport { Status, type Block, type Version } from '@/api/types';\nimport { computed, ref, watch } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nconst props = defineProps<{\n version?: Version;\n block: Block;\n asButton?: boolean;\n disabled?: boolean;\n hideButtonIfDisabled?: boolean;\n}>();\n\nconst _version = ref<Version | null>(null);\n\nwatch(\n () => [props.version, props.block],\n async () => {\n if (props.version) _version.value = props.version;\n else {\n _version.value = await getVersion(\n props.block.blockId,\n props.block.currentVersionId,\n );\n }\n },\n { immediate: true },\n);\n\nconst emit = defineEmits<{\n (e: 'refreshBlock', noBubble?: boolean): void;\n}>();\n\nconst { t } = useI18n();\nconst { can } = useStoreAbility();\n\nconst changeStatus = async (version: Version | null, status: Status) => {\n if (!version) return;\n if (status === Status.AwaitingApproval) version.draftStatus = status;\n else version.status = status;\n await updateVersion(props.block.blockId, version.versionId, { status });\n emit('refreshBlock');\n};\n\nconst isDraft = computed(\n () => !!_version.value?.draftStatus || _version.value?.status == Status.Draft,\n);\n\nconst user = useCurrentUser();\nconst canPublish = computed(() => {\n const roles = user.value?.roles ?? [];\n return (\n props.block.category?.publishRoles?.some((role) => roles.includes(role)) ||\n can('publish', useSubject('Block', props.block))\n );\n});\n\nconst targetOperation = computed(\n (): 'changeDraftStatus' | 'submitDraft' | 'changePublishedStatus' =>\n isDraft.value\n ? canPublish.value\n ? 'changeDraftStatus'\n : 'submitDraft'\n : 'changePublishedStatus',\n);\n\nconst availableStatuses = computed(() => {\n const list: Status[] = [];\n if (\n _version.value?.draftStatus === Status.AwaitingApproval &&\n canPublish.value\n )\n return [Status.Published];\n if (targetOperation.value === 'changeDraftStatus') {\n if (_version.value?.draftStatus != Status.AwaitingApproval) {\n list.push(Status.Published);\n }\n } else if (targetOperation.value === 'submitDraft') {\n if (_version.value?.draftStatus != Status.AwaitingApproval) {\n list.push(Status.AwaitingApproval);\n }\n } else {\n list.push(Status.Draft);\n if (_version.value?.status != Status.Published) list.push(Status.Published);\n list.push(Status.Archived); // You can only archive a published version that has no draft\n }\n return list;\n});\n\nconst disableButton = computed(\n () =>\n targetOperation.value === 'changePublishedStatus' ||\n (_version.value?.draftStatus === Status.AwaitingApproval &&\n !canPublish.value) ||\n props.disabled,\n);\n</script>\n<template>\n <span v-if=\"!_version\" class=\"hidden\">Laster...</span>\n <ButtonComponent\n v-else-if=\"asButton\"\n :text=\"\n t(\n `admin.blockProduction.${\n targetOperation === 'changePublishedStatus'\n ? 'changeDraftStatus'\n : targetOperation\n }.imperative`,\n )\n \"\n type=\"primary\"\n :disabled=\"disableButton\"\n :class=\"{ hidden: disableButton && hideButtonIfDisabled }\"\n data-cy-id=\"PublishButton\"\n @click=\"() => changeStatus(_version, availableStatuses[0])\"\n />\n <template v-else-if=\"availableStatuses.length > 0\">\n <div\n class=\"font-bold text-gnist-black hover:cursor-default hover:bg-inherit\"\n >\n <span>\n {{ t(`admin.blockProduction.${targetOperation}.header`) }}\n </span>\n </div>\n <ul>\n <li\n v-for=\"status in availableStatuses\"\n :key=\"status\"\n :class=\"{\n hidden: !_version?.draftStatus && _version?.status === status,\n }\"\n data-cy-id=\"StatusSelector\"\n >\n <a @click=\"() => changeStatus(_version, status)\">\n {{ t(`admin.blockProduction.${targetOperation}.values.${status}`) }}\n </a>\n </li>\n </ul>\n </template>\n</template>\n","<script setup lang=\"ts\">\nimport { deleteDraft, deleteVersion } from '@/api/versions';\nimport MaterialIcon from '@/components/MaterialIcon.vue';\nimport ModalComponent from '../ModalComponent.vue';\nimport type { Block, Version } from '@/api/types';\nimport { ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nconst { t } = useI18n();\n\nconst props = defineProps<{\n version: Version;\n block: Block;\n deleteType: 'Draft' | 'Version';\n asButton?: boolean;\n}>();\n\nconst emit = defineEmits<{\n (e: 'refreshBlock', noBubble?: boolean): void;\n}>();\n\nconst versionToDelete = ref<Version | null>(null);\n\nasync function doDelete() {\n if (versionToDelete.value) {\n if (props.deleteType === 'Draft') {\n deleteDraft(props.block.blockId, versionToDelete.value.versionId);\n } else {\n deleteVersion(props.block.blockId, versionToDelete.value.versionId);\n }\n }\n emit('refreshBlock', true);\n versionToDelete.value = null;\n}\n</script>\n\n<template>\n <MaterialIcon\n v-if=\"asButton\"\n :title=\"t(`admin.blockProduction.delete${deleteType}`)\"\n class=\"cursor-pointer text-gnist-red\"\n @click.prevent=\"versionToDelete = version\"\n >\n delete\n </MaterialIcon>\n <a v-else class=\"text-gnist-red\" @click=\"versionToDelete = version\">\n {{ t(`admin.blockProduction.delete${deleteType}`) }}\n <template v-if=\"deleteType === 'Version'\">\n {{ version.versionNumber }}\n </template>\n </a>\n <ModalComponent\n :show-modal=\"versionToDelete !== null\"\n :title=\"t(`admin.blockProduction.confirmDelete${deleteType}`)\"\n size=\"auto\"\n @close=\"versionToDelete = null\"\n @handle-click=\"doDelete\"\n >\n <template #default>\n <p>\n {{ t(`admin.blockProduction.deleteBlock${deleteType}Permanently`) }}\n </p>\n </template>\n </ModalComponent>\n</template>\n","<script setup lang=\"ts\">\nimport { setCurrentVersion, updateVersion } from '@/api/versions';\nimport { Status, type Version, type Block } from '@/api/types';\nimport { computed, onMounted, ref } from 'vue';\nimport ButtonComponent from '../ButtonComponent.vue';\nimport MaterialIcon from '../MaterialIcon.vue';\nimport ModalComponent from '../ModalComponent.vue';\nimport PublishSelector from '@/components/admin/PublishSelector.vue';\nimport VersionDeletor from '@/components/admin/VersionDeletor.vue';\nimport { useStoreAbility } from '@/abilities';\nimport { getBlocksRouteLink } from '@/utilities/routeUtils';\nimport { useI18n } from 'vue-i18n';\nimport { isValidVersionNumber } from './VersionCopy.vue';\n\nconst { t } = useI18n();\n\nconst props = defineProps<{\n version: Version;\n allVersions: Version[] | null;\n idx: number;\n block: Block;\n}>();\n\nconst emit = defineEmits<{\n (e: 'refreshBlock', noBubble?: boolean): void;\n}>();\n\nconst { can } = useStoreAbility();\n\nconst versionNumber = ref(\n props.version.versionNumber ?? props.block.currentVersionNumber ?? '',\n);\n\nconst existingVersionNumber = computed(\n () =>\n !!props.allVersions?.find((v) => v.versionNumber == versionNumber.value),\n);\n\nconst showEditVersionNumberModal = ref(false);\nconst validVersionNumber = computed(() =>\n isValidVersionNumber(versionNumber.value),\n);\n\nconst editVersionNumber = async (\n version: Version,\n newVersionNumber: string,\n) => {\n await updateVersion(props.block.blockId, version.versionId, {\n versionNumber: newVersionNumber,\n });\n emit('refreshBlock');\n};\n\nasync function updateCurrentVersion(version: Version) {\n await setCurrentVersion(props.block.blockId, version.versionId);\n emit('refreshBlock');\n}\n\nconst hasWorkingCopy = computed(() => !!props.version.draftStatus);\n\n// Because we made the parent table scrollable on small screens, we need to make everything below the table parent static, which breaks the relative positioning. This bit ensures it works after all.\nconst buttonRef = ref<HTMLElement>();\nconst menuRef = ref<HTMLElement>();\nonMounted(() => {\n if (buttonRef.value && menuRef.value) {\n menuRef.value.style.right =\n Math.floor(buttonRef.value.offsetWidth).toString() + 'px';\n menuRef.value.style.bottom =\n (\n ((menuRef.value.offsetParent as HTMLElement)?.offsetHeight ?? 0) -\n menuRef.value.offsetTop +\n buttonRef.value.offsetHeight\n ).toString() + 'px';\n }\n});\n</script>\n<template>\n <!-- Version context menu -->\n <div class=\"dropdown static justify-self-end\">\n <!-- The Daisy UI dropdown component uses advanced CSS to show the dropdown menu when the label has focus... -->\n <label\n ref=\"buttonRef\"\n tabindex=\"0\"\n class=\"static block h-8 w-8 rounded text-center hover:cursor-pointer hover:bg-gnist-gray-light-light\"\n data-cy-id=\"VersionContextMenuButton\"\n >\n <MaterialIcon class=\"text-2xl\">more_vert</MaterialIcon>\n </label>\n <ul\n ref=\"menuRef\"\n tabindex=\"0\"\n class=\"menu dropdown-content z-10 rounded-box bg-gnist-white p-2 shadow [&_*]:relative [&_li>*]:grow\"\n >\n <li>\n <RouterLink\n :to=\"{\n name: 'edit_version',\n params: { blockId: block.blockId, versionId: version.versionId },\n }\"\n >\n {{ t('admin.blockProduction.edit') }}\n </RouterLink>\n </li>\n <li>\n <RouterLink\n :to=\"\n getBlocksRouteLink(block.blockId, {\n version: version.versionNumber,\n preview: 1,\n })\n \"\n >\n {{ t('admin.blockProduction.preview') }}\n </RouterLink>\n </li>\n <li>\n <a @click=\"showEditVersionNumberModal = true\">{{\n t('admin.blockProduction.editVersionNumber')\n }}</a>\n </li>\n <li\n v-if=\"\n version.status === Status.Published &&\n block.currentVersionNumber !== version.versionNumber\n \"\n >\n <a @click=\"() => updateCurrentVersion(version)\">\n {{ t('admin.blockProduction.setCurrent') }}\n </a>\n </li>\n <li class=\"hide-empty\">\n <PublishSelector\n :version=\"version\"\n :block=\"block\"\n @refresh-block=\"() => emit('refreshBlock')\"\n />\n </li>\n <li v-if=\"hasWorkingCopy\">\n <VersionDeletor\n :block=\"block\"\n :version=\"version\"\n delete-type=\"Draft\"\n @refresh-block=\"() => emit('refreshBlock')\"\n />\n </li>\n <li v-if=\"version.status === Status.Archived && can('delete', 'Block')\">\n <VersionDeletor\n :block=\"block\"\n :version=\"version\"\n delete-type=\"Version\"\n @refresh-block=\"() => emit('refreshBlock')\"\n />\n </li>\n </ul>\n </div>\n\n <!--\n Change version number modal(s)\n -->\n <ModalComponent\n :title=\"t('admin.blockProduction.editVersionNumber')\"\n :show-modal=\"showEditVersionNumberModal\"\n @close=\"showEditVersionNumberModal = false\"\n >\n <input v-model=\"versionNumber\" class=\"mt-4 w-full border p-2\" />\n <p class=\"min-h-16\">\n <span v-if=\"existingVersionNumber\">{{\n t('admin.blockProduction.existingVersion')\n }}</span>\n <span v-if=\"!validVersionNumber\">{{\n t('admin.blockProduction.invalidVersionName')\n }}</span>\n </p>\n <template #buttons>\n <div class=\"flex justify-end\">\n <div class=\"gnist-button-group\">\n <ButtonComponent\n :text=\"t('buttons.cancel')\"\n @click=\"showEditVersionNumberModal = false\"\n />\n <ButtonComponent\n :text=\"t('admin.blockProduction.save')\"\n type=\"primary\"\n :disabled=\"\n !validVersionNumber ||\n !!allVersions?.find((v) => v.versionNumber == versionNumber)\n \"\n @click=\"() => editVersionNumber(version, versionNumber)\"\n />\n </div>\n </div>\n </template>\n </ModalComponent>\n</template>\n","<script setup lang=\"ts\">\nimport semver from 'semver';\nimport { useVersions } from '@/api/versions';\nimport { Status, type Block } from '@/api/types';\nimport { computed } from 'vue';\nimport VersionContextMenu from '@/components/admin/VersionContextMenu.vue';\nimport VersionCopy from '@/components/admin/VersionCopy.vue';\nimport { formatDate } from '@/utilities/formatDate';\nimport { useI18n } from 'vue-i18n';\nimport { pageTemplates } from '@/renderTemplates';\nimport { translateStringOrLocale } from '@/i18n';\nimport TableComponent from '../TableComponent.vue';\n\nconst { t } = useI18n();\n\nconst props = defineProps<{\n block: Block;\n}>();\n\nconst emit = defineEmits<{ (e: 'refreshBlock'): void }>();\n\nconst { result: versions, refresh } = useVersions(\n props.block.blockId,\n true,\n false,\n);\n\nconst versionWarning = computed(() => ({\n show: !pageTemplates.find(\n (i) => i.id == props.block?.category?.pageTemplateId,\n )?.hasVersionSelector,\n category: translateStringOrLocale(() => props.block?.category?.name).value,\n}));\n</script>\n<template>\n <h2>\n {{ t('block.versions') }}\n </h2>\n <p class=\"text-p2 py-4 italic\">\n {{ t('admin.blockProduction.versionsSubtitle') }}\n </p>\n <p v-if=\"versionWarning.show\" class=\"px-8 pb-4\">\n <span class=\"alert alert-warning max-w-max rounded text-gnist-black\">\n {{ t('admin.blockProduction.versionsFullpage', versionWarning) }}\n </span>\n </p>\n\n <TableComponent\n size=\"table-sm\"\n no-zebra\n column-header-class=\"font-[number:inherit]\"\n text-color=\"sp-blue-dark\"\n header-text-color=\"black\"\n class=\"VersionListTable\"\n :rows=\"versions\"\n i18n-key=\"admin.blockProduction\"\n :get-key=\"(version) => version.versionNumber\"\n :columns=\"[\n 'versionNumber',\n 'isBacklog',\n 'status',\n 'draftStatus',\n 'publishedDate',\n 'lastChanged',\n null,\n ]\"\n sort-fields=\"versionNumber\"\n :comparers=\"{\n versionNumber: (v1, v2) => {\n const v1Parsed = semver.coerce(v1);\n const v2Parsed = semver.coerce(v2);\n if (v1Parsed && v2Parsed) return semver.compare(v1Parsed, v2Parsed);\n else if (v1Parsed && v2Parsed === null)\n return semver.compare(v1Parsed, '0.0.0');\n else if (v1Parsed === null && v2Parsed)\n return semver.compare('0.0.0', v2Parsed);\n return v1.localeCompare(v2);\n },\n }\"\n >\n <template #columnHeader=\"{ item: version }\">\n <RouterLink\n :to=\"{\n name: 'edit_version',\n params: {\n blockId: block.blockId,\n versionId: version.versionId,\n },\n }\"\n class=\"underline\"\n >\n <span>{{ version.versionNumber }}</span>\n <span\n v-if=\"version.versionNumber === block.currentVersionNumber\"\n class=\"italic\"\n >\n ({{ t('admin.blockProduction.current') }})\n </span>\n </RouterLink>\n </template>\n <template #columns=\"{ item: version, rowIndex: idx }\">\n <td>\n <p>\n {{ t(`booleans.${version.isBacklog}`) }}\n </p>\n </td>\n <td>\n <p data-cy-id=\"PublishedStatus\">\n <span :class=\"{ italic: version.status === Status.Draft }\">\n {{ t(`block.status.${version.status}`) }}\n </span>\n </p>\n </td>\n <td>\n <p>\n <span v-if=\"version.draftStatus\">\n {{ t(`block.draftStatus.${version.draftStatus}`) }}\n </span>\n <span v-else-if=\"version.status === Status.Draft\">\n {{ t(`block.draftStatus.${version.status}`) }}\n </span>\n </p>\n </td>\n <td>\n <p v-if=\"version.status === Status.Published\">\n {{ formatDate(version.publishedDate) }}\n </p>\n <p v-else class=\"justify-self-center\">-</p>\n </td>\n <td>\n <p>\n {{ formatDate(version.lastChanged) }}\n </p>\n </td>\n <td>\n <VersionContextMenu\n :block=\"block\"\n :all-versions=\"versions\"\n :version=\"version\"\n :idx=\"idx\"\n @refresh-block=\"\n async (noBubble?) => {\n if (refresh) await refresh();\n if (!noBubble) emit('refreshBlock');\n }\n \"\n />\n </td>\n </template>\n </TableComponent>\n <VersionCopy\n :block-id=\"block.blockId\"\n :versions=\"versions\"\n class=\"mx-auto mt-16 w-fit\"\n @created=\"\n async () => {\n if (refresh) await refresh();\n emit('refreshBlock');\n }\n \"\n />\n</template>\n\n<style>\n.VersionListTable,\n.VersionListTable table,\n.VersionListTable * {\n @apply static;\n}\n.VersionListTable table {\n @apply border-y-2 border-gnist-gray-light p-2;\n}\n.VersionListTable thead {\n @apply border-y-2;\n}\n.VersionListTable.VersionListTable :not(tfoot) tr {\n font-size: initial;\n}\n.VersionListTable tr > * {\n @apply p-2;\n}\n.VersionListTable thread tr > * {\n @apply py-2.5;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { useStoreAbility } from '@/abilities';\nimport type { Block } from '@/api/types';\nimport { ref } from 'vue';\nimport { useRouter } from 'vue-router';\nimport ModalComponent from '../ModalComponent.vue';\nimport { deleteBlock } from '@/api/blocks';\nimport { useI18n } from 'vue-i18n';\nimport { editBlocksRouteId } from '@/config';\nimport { translateStringOrLocale } from '@/i18n';\n\nconst { t } = useI18n();\n\nconst { can } = useStoreAbility();\nconst router = useRouter();\n\nconst props = defineProps<{\n block: Block;\n editable: boolean;\n}>();\n\nconst showDeleteBlockModal = ref(false);\n\nasync function doDeleteBlock() {\n await deleteBlock(props.block.blockId);\n showDeleteBlockModal.value = false;\n router.push({ name: editBlocksRouteId });\n}\nconst description = translateStringOrLocale(() => props.block.description);\nconst category = translateStringOrLocale(() => props.block.category?.name);\n</script>\n<template>\n <div>\n <p class=\"mb-2 mt-2 italic\">\n {{ category }}\n </p>\n <p>{{ description }}</p>\n\n <RouterLink\n v-if=\"editable\"\n :to=\"{ name: editBlocksRouteId, params: {} }\"\n class=\"gnist-button mt-4\"\n >\n {{ t('admin.blockProduction.goBackToToolList') }}\n </RouterLink>\n\n <RouterLink\n v-if=\"editable\"\n :to=\"{ name: 'edit_block', params: { blockId: block.blockId } }\"\n class=\"gnist-button gnist-button-primary ml-4 mt-4\"\n >\n {{ t('admin.blockProduction.editBlock') }}\n </RouterLink>\n\n <button\n v-if=\"editable && can('delete', 'Block')\"\n class=\"gnist-button gnist-button-danger ml-4 mt-4\"\n data-cy-id=\"delete-block-button\"\n @click=\"() => (showDeleteBlockModal = true)\"\n >\n {{ t('admin.blockProduction.deleteBlock') }}\n </button>\n\n <ModalComponent\n :show-modal=\"showDeleteBlockModal\"\n :title=\"t('admin.blockProduction.confirmDeleteBlock')\"\n @close=\"() => (showDeleteBlockModal = false)\"\n @handle-click=\"doDeleteBlock\"\n >\n <template #default>\n <p>{{ t('admin.blockProduction.deleteBlockPermanently') }}</p>\n </template>\n </ModalComponent>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { useRoute } from 'vue-router';\nimport VersionList from '@/components/admin/VersionList.vue';\nimport BlockDetails from '@/components/admin/BlockDetails.vue';\nimport ContentPage from '../components/ContentPage.vue';\nimport { useBlock } from '@/api/blocks';\nimport { throwOnError } from '@/api/composable';\nimport type { Guid } from '@/api/types';\nimport { translateStringOrLocale } from '@/i18n';\nimport { watchEffect } from 'vue';\nimport { getRouteTitle } from '@/utilities/routeUtils';\nimport { useI18n } from 'vue-i18n';\n\nconst { t } = useI18n();\n\nconst route = useRoute();\nconst blockId = route.params.blockId as Guid;\nconst { result: block, refresh } = throwOnError(useBlock(blockId, true));\nconst blockTitle = translateStringOrLocale(() => block.value?.name);\nwatchEffect(() => {\n if (blockTitle.value)\n document.title = getRouteTitle([\n t('admin.blockProduction.versionsTitle'),\n blockTitle.value,\n ]);\n});\n</script>\n\n<template>\n <ContentPage :title=\"block?.name ?? ''\" class=\"bg-gnist-gray-light-light\">\n <template #banner>\n <BlockDetails v-if=\"block\" class=\"mb-4\" :block=\"block\" :editable=\"true\" />\n </template>\n <template #default>\n <div class=\"py-8\">\n <VersionList v-if=\"block\" :block=\"block\" @refresh-block=\"refresh\" />\n </div>\n </template>\n </ContentPage>\n</template>\n","<script lang=\"ts\" setup>\nimport type { SingleItem } from '@/api/types';\nimport ContentPage from '@/components/ContentPage.vue';\nimport Dropdown from '@/components/forms/InputDropdown.vue';\nimport { useI18n } from 'vue-i18n';\nimport { ref, watch } from 'vue';\nimport SearchBar from '@/components/SearchBar.vue';\nimport { computed } from 'vue';\nimport { useRoles, useUsers, updateRoles } from '@/api/user';\nimport { mapValueList } from '@/utilities/mapValueList';\nimport type { RoleName } from '@/api/auth';\nimport TableComponent from '@/components/TableComponent.vue';\n\nconst users = useUsers();\ntype UserForAdmin = NonNullable<SingleItem<typeof users.value>>;\nconst { result: roles } = useRoles();\nconst searchText = ref<string>('');\nconst roleOptions = computed(() =>\n mapValueList(\n roles.value?.map((r) => r.name) ?? [],\n 'userAdmin.manualRoles',\n true,\n ),\n);\nconst roleFilter = ref<RoleName>();\n\nconst viewDetailsUser = ref<UserForAdmin | null>(null);\nconst rolesModel = ref<RoleName[]>([]);\n\nwatch(viewDetailsUser, () => {\n rolesModel.value = [...(viewDetailsUser.value?.roles ?? [])];\n});\n\nasync function onSave() {\n const roleIds = roles.value\n ?.filter((v) => rolesModel.value.includes(v.name))\n .map((v) => v.id);\n if (roleIds && viewDetailsUser.value) {\n await updateRoles(viewDetailsUser.value.id, roleIds);\n }\n if (viewDetailsUser.value)\n viewDetailsUser.value.roles = [...rolesModel.value];\n}\n\nconst { t } = useI18n();\n\nconst matchesSearch = (user: UserForAdmin) => {\n const searchLower = searchText.value.toLowerCase();\n return (\n (!roleFilter.value || user.roles?.includes(roleFilter.value)) &&\n (user.firstName?.toLowerCase().includes(searchLower) ||\n user.lastName?.toLowerCase().includes(searchLower) ||\n user.email?.toLowerCase().includes(searchLower) ||\n !user.roles?.every((role) => !role.toLowerCase().includes(searchLower)) ||\n !user.roles\n ?.map((r) => t(`userAdmin.manualRoles.values.${r}`))\n .every((role) => !role.toLowerCase().includes(searchLower)))\n );\n};\nconst filteredUsers = computed(() => users.value?.filter(matchesSearch) ?? []);\n</script>\n<template>\n <ContentPage :title=\"t('userAdmin.title')\" class=\"bg-gnist-gray-light-light\">\n <RouterLink\n :to=\"{ path: '/usermanual/about_roles' }\"\n target=\"_blank\"\n class=\"underline hover:bg-gnist-gray-light\"\n >\n {{ t('userAdmin.help') }}\n </RouterLink>\n\n <div class=\"flex justify-between\">\n <SearchBar\n class=\"my-4 w-full text-black lg:w-11/12 lg:max-w-4xl\"\n :placeholder=\"t('userAdmin.searchUsers')\"\n @change=\"(text: string) => (searchText = text)\"\n />\n <Dropdown\n v-model=\"roleFilter\"\n :options=\"roleOptions\"\n :placeholder=\"t('userAdmin.selectRolePlaceholder')\"\n :getkey=\"(o) => o\"\n class=\"z-40 flex items-center self-stretch\"\n />\n </div>\n <div class=\"pb-8\">\n <TableComponent\n size=\"table-lg\"\n :rows=\"filteredUsers\"\n show-spinner\n i18n-key=\"profile\"\n :get-key=\"(user) => user.id\"\n :columns=\"['email', 'fullName', 'roles', 'lastLogin']\"\n :sort-fields=\"['email', 'fullName', 'roles', 'lastLogin']\"\n row-class=\"cursor-pointer\"\n column-header-class=\"font-normal break-all\"\n :edit=\"{\n title: 'userAdmin.viewUser',\n onSave,\n isSelectedItemValid: true,\n }\"\n @update:selected-item=\"(user) => (viewDetailsUser = user)\"\n >\n <template #columnHeader=\"{ item: user }\">\n {{ user.email }}\n </template>\n <template #columns=\"{ item: user }\">\n <td>{{ `${user.firstName} ${user.lastName}` }}</td>\n <td class=\"w-1/4\">\n {{\n user.roles\n ?.map((r) => t(`userAdmin.manualRoles.values.${r}`))\n .join(', ') ?? ''\n }}\n </td>\n <td class=\"w-max\">\n {{\n user.lastLogin ? new Date(user.lastLogin).toLocaleString() : ''\n }}\n </td>\n </template>\n <template #editor>\n <div v-if=\"viewDetailsUser\">\n {{ viewDetailsUser.fullName }}\n <h3 class=\"mt-8 text-lg\">\n {{ t('profile.roles') }}\n </h3>\n <div v-for=\"role in roles\" :key=\"role.id\">\n <input\n :id=\"`role-${role.name}`\"\n v-model=\"rolesModel\"\n type=\"checkbox\"\n class=\"mr-2 mt-2\"\n :value=\"role.name\"\n />\n <label :for=\"`role-${role.name}`\">\n {{ t(`userAdmin.manualRoles.values.${role.name}`) }}\n </label>\n </div>\n </div>\n </template>\n </TableComponent>\n </div>\n </ContentPage>\n</template>\n<style scoped>\n:deep(th),\n:deep(td) {\n text-align: left;\n padding: 1rem 0.5rem;\n text-overflow: ellipsis;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport {\n routeTypes,\n type routeType,\n type RouteItemDTO,\n fgColorList,\n type Translated,\n type Link,\n type PartialSome,\n type Guid,\n} from '@/api/types';\nimport { computed, toRef } from 'vue';\nimport TextInput from '@/components/forms/InputText.vue';\nimport Dropdown, {\n toDropdownItems,\n} from '@/components/forms/InputDropdown.vue';\nimport Checkbox from '@/components/forms/InputCheckbox.vue';\nimport LinkInput from '@/components/forms/InputLink.vue';\nimport { mapValueList } from '@/utilities/mapValueList';\nimport { useInternalState } from '@/utilities/useInternalState';\nimport { useRouter } from 'vue-router';\nimport { getBlocksRouteLink } from '@/utilities/routeUtils';\n\nconst props = defineProps<{\n modelValue?: PartialSome<RouteItemDTO, 'id'> | null;\n allItems?: RouteItemDTO[];\n}>();\ntype ModelType = typeof props.modelValue;\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: ModelType): void;\n (e: 'reportValidationError', name: string, hasError: boolean): void;\n}>();\n\nconst router = useRouter();\n\ntype internalValType = Required<Pick<NonNullable<ModelType>, 'customOptions'>> &\n Omit<NonNullable<ModelType>, 'aliases' | 'routeType' | 'targetDoc'> & {\n aliases: string;\n routeType: routeType | null;\n targetDoc: PartialSome<Translated<Link>, 'text' | 'alt'> | undefined;\n targetRoute: Pick<Translated<Link>, 'url'> | undefined;\n };\nconst item = useInternalState<ModelType, internalValType | null>(\n toRef(props, 'modelValue'),\n null,\n (val) => emit('update:modelValue', val),\n (newExtState) => {\n if (newExtState == null) return null;\n return {\n ...newExtState,\n aliases: newExtState.aliases?.join(',') ?? '',\n routeType: newExtState.routeName === null ? null : newExtState.routeType,\n customOptions: newExtState.customOptions ?? {},\n targetDoc:\n newExtState.targetDoc === undefined\n ? undefined\n : {\n url: router.resolve(getBlocksRouteLink(newExtState.targetDoc))\n .fullPath,\n },\n targetRoute:\n newExtState.routeType === 'hardcoded'\n ? {\n url: newExtState.routeName\n ? router.resolve({ name: newExtState.routeName }).fullPath\n : '',\n }\n : undefined,\n } satisfies internalValType;\n },\n (newIntState) => {\n if (newIntState == null) return null;\n return {\n ...newIntState,\n routeName: newIntState.targetRoute?.url\n ? router.resolve(newIntState.targetRoute.url).name?.toString() ??\n newIntState.targetRoute.url\n : newIntState.routeName === null\n ? newIntState.routeType === null\n ? (null as unknown as string)\n : ''\n : newIntState.routeName,\n aliases: newIntState.aliases.split(',').map((i: string) => i.trim()),\n targetDoc:\n newIntState.routeType !== 'page'\n ? undefined\n : !newIntState.targetDoc?.url\n ? ('-' as Guid)\n : (router\n .resolve(newIntState.targetDoc.url)\n .params.blockId.toString() as Guid),\n headerType:\n newIntState.routeType == 'header'\n ? newIntState.headerType ?? 'menu'\n : undefined,\n routeType: newIntState.routeType ?? 'hardcoded',\n customOptions:\n newIntState.routeType === 'page'\n ? newIntState.customOptions\n : undefined,\n } satisfies ModelType;\n },\n);\n\nconst routeTypeOptions = mapValueList(\n routeTypes,\n 'routeAdmin.routeType',\n true,\n null,\n);\nconst targetMenuOptions = mapValueList(['main'], 'routeAdmin.targetMenu', true);\nconst headerTypeOptions = mapValueList(\n ['menu', 'routeOnly', 'menuOnly'],\n 'routeAdmin.headerType',\n);\nconst parentOptions = computed(() =>\n toDropdownItems(\n props.allItems?.filter((i) => !!i.headerType),\n (i) => [i.routeName, i.text.no],\n true,\n ),\n);\nconst colorOptions = mapValueList(fgColorList, 'routeAdmin.colors', true);\n</script>\n<template>\n <div v-if=\"item\">\n <div class=\"mt-12 flex flex-col gap-8 [&_.GnistInputLabel]:font-bold\">\n <div\n class=\"flex grow flex-col gap-8 md:grid md:grid-cols-[repeat(auto-fit,minmax(max(15rem,30%),1fr))]\"\n >\n <Dropdown\n v-model=\"item.routeType\"\n label=\"routeAdmin.routeType.title\"\n tooltip=\"routeAdmin.routeType.tooltip\"\n class=\"RouteType\"\n allow-empty-value\n disable-empty-option\n :options=\"routeTypeOptions\"\n :getkey=\"(val) => val\"\n required\n />\n <template v-if=\"item.routeType\">\n <TextInput\n v-if=\"item.routeType !== 'hardcoded'\"\n v-model=\"item.routeName\"\n label=\"routeAdmin.routeName\"\n tooltip=\"routeAdmin.routeNameTooltip\"\n required\n />\n <LinkInput\n v-else\n v-model=\"item.targetRoute\"\n for-name=\"routeName\"\n label=\"routeAdmin.routeNameStatic\"\n tooltip=\"routeAdmin.routeNameStaticTooltip\"\n inline\n hide-text\n hide-description\n show-validation-message\n can-target-hardcoded\n cannot-target-external\n required\n />\n <Dropdown\n v-if=\"item.routeType === 'header'\"\n v-model=\"item.headerType\"\n label=\"routeAdmin.headerType.title\"\n :options=\"headerTypeOptions\"\n :getkey=\"(val) => val ?? 'empty'\"\n />\n <LinkInput\n v-if=\"item.routeType == 'page'\"\n v-model=\"item.targetDoc\"\n for-name=\"targetdoc\"\n label=\"routeAdmin.targetDoc\"\n inline\n hide-text\n hide-description\n show-validation-message\n can-target-blocks\n cannot-target-external\n required\n />\n <Dropdown\n v-model=\"item.targetMenu\"\n label=\"routeAdmin.targetMenu.title\"\n tooltip=\"routeAdmin.targetMenu.tooltip\"\n :options=\"targetMenuOptions\"\n :getkey=\"(val) => val ?? 'empty'\"\n />\n <Dropdown\n v-model=\"item.parent\"\n label=\"routeAdmin.parent\"\n tooltip=\"routeAdmin.parentTooltip\"\n class=\"ParentField\"\n :options=\"parentOptions\"\n :getkey=\"(val) => val ?? 'empty'\"\n />\n <Checkbox v-model=\"item.mobileOnly\" label=\"routeAdmin.mobileOnly\" />\n <TextInput\n v-if=\"item.routeType !== 'header'\"\n v-model=\"item.aliases\"\n label=\"routeAdmin.aliases\"\n tooltip=\"routeAdmin.aliasesTooltip\"\n />\n <div\n v-if=\"!(item.headerType === 'routeOnly') && !!item.targetMenu\"\n class=\"col-span-2 grid grid-cols-2 gap-8\"\n >\n <TextInput\n v-model=\"item.text.no\"\n label=\"routeAdmin.textNo\"\n required\n />\n <TextInput\n v-model=\"item.text.en\"\n label=\"routeAdmin.textEn\"\n required\n />\n </div>\n <TextInput\n v-model=\"item.sortOrder\"\n label=\"routeAdmin.sortOrder\"\n tooltip=\"routeAdmin.sortOrderTooltip\"\n type=\"number\"\n />\n <Checkbox\n v-if=\"item.routeType === 'page'\"\n v-model=\"item.isDocsListRoute\"\n label=\"routeAdmin.isDocsRoute\"\n tooltip=\"routeAdmin.isDocsRouteTooltip\"\n />\n </template>\n </div>\n <div\n v-if=\"item.routeType === 'page'\"\n class=\"grid grid-cols-1 gap-8 md:grid-cols-3\"\n >\n <Dropdown\n v-model=\"item.customOptions.fgColor\"\n label=\"routeAdmin.colors.title\"\n :options=\"colorOptions\"\n :getkey=\"(val) => val ?? 'empty'\"\n />\n <Checkbox\n v-model=\"item.customOptions.fullscreen\"\n label=\"routeAdmin.fullscreen\"\n />\n <Checkbox\n v-model=\"item.customOptions.hideShimmer\"\n label=\"routeAdmin.hideShimmer\"\n />\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n:deep(.GnistInputLabel) .tooltip:before {\n @apply sm:!w-max;\n width: calc(100vw - 2rem);\n}\n:deep(.ParentField) .tooltip:before,\n:deep(.RouteType) .tooltip:before {\n @apply max-w-lg;\n @apply text-left;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport type { RouteItem, RouteItemDTO, PartialSome } from '@/api/types';\nimport ContentPage from '@/components/ContentPage.vue';\nimport RouteEditor from '@/components/RouteEditor.vue';\nimport { useI18n } from 'vue-i18n';\nimport { ref } from 'vue';\nimport {\n createRouteItem,\n deleteRouteItem,\n updateRouteItem,\n useRouteItems,\n} from '@/api/menu';\nimport { useValidationTracking } from '@/utilities/useValidationTracking';\nimport { hardcodedStaticRoutes } from '@/router/routeUtils';\nimport TableComponent from '@/components/TableComponent.vue';\n\nconst { result: routeItems, refresh } = useRouteItems();\n\nconst selectedItem = ref<PartialSome<RouteItemDTO, 'id'> | null>(null);\n\nfunction triggerValidationMessages() {\n showValidationMessages.value = true; // Show validation messages when editing (in case the validation requirements have changed)\n setTimeout(() => (showValidationMessages.value = false), 1000); // Stop forcing validation messages after a short while (to avoid changing focus each time another value is entered)\n}\n\nasync function onSave() {\n if (!selectedItem.value) return;\n if (!isValid.value) {\n showValidationMessages.value = true;\n return;\n }\n showValidationMessages.value = false;\n if (selectedItem.value.id === undefined) {\n const updatedItem = await createRouteItem(selectedItem.value);\n routeItems.value?.push(updatedItem);\n } else {\n const updatedItem = await updateRouteItem(selectedItem.value);\n selectedItem.value.routeName = updatedItem.routeName;\n }\n refresh?.();\n}\n\nasync function onCreateButtonClick() {\n if (!routeItems.value) return null;\n const newItem: PartialSome<RouteItemDTO, 'id'> &\n Pick<RouteItem, 'routeType'> = {\n routeName: null as unknown as string,\n text: { no: '' },\n routeType: 'page',\n targetMenu: 'main',\n id: undefined,\n };\n return newItem;\n}\n\nasync function onDelete(itemToDelete: RouteItemDTO) {\n if (!itemToDelete.id) return;\n await deleteRouteItem(itemToDelete.id);\n refresh?.();\n routeItems.value =\n routeItems.value?.filter((i) => i.id !== itemToDelete.id) ?? [];\n}\n\nconst { t } = useI18n();\n\nconst showValidationMessages = ref<boolean>(false);\nconst { onValidChanged, formRef, isValid } = useValidationTracking(\n selectedItem,\n showValidationMessages,\n true,\n);\n</script>\n<template>\n <ContentPage :title=\"t('routeAdmin.title')\" class=\"bg-gnist-gray-light-light\">\n <div class=\"pb-8\">\n <TableComponent\n size=\"table-xs\"\n :rows=\"routeItems\"\n show-spinner\n i18n-key=\"routeAdmin\"\n :get-key=\"(routeItem) => routeItem.id\"\n :columns=\"[\n 'text',\n 'parent',\n 'routeName',\n 'routeType.title',\n 'sortOrder',\n ]\"\n row-class=\"cursor-pointer\"\n :create=\"{\n title: 'routeAdmin.create',\n idProperty: 'id',\n onCreateClick: onCreateButtonClick,\n }\"\n :edit=\"{\n title: 'routeAdmin.viewRoute',\n onSave,\n isSelectedItemValid: isValid,\n modalProps: { size: 'big', showOverflow: true },\n }\"\n :delete=\"{\n onDelete,\n getIdentificator: (row) => row.routeName,\n identificatorLabel: 'routeAdmin.routeName',\n title: 'routeAdmin.delete.title',\n warning: 'routeAdmin.delete.warning',\n }\"\n @update:selected-item=\"(item) => (selectedItem = item)\"\n @on:update-triggered=\"triggerValidationMessages\"\n >\n <template #afterCreate>\n <RouterLink\n :to=\"{ path: '/usermanual/about_routes' }\"\n target=\"_blank\"\n class=\"mx-4 underline hover:bg-gnist-gray-light\"\n >\n {{ t('routeAdmin.help') }}\n </RouterLink>\n </template>\n <template #columnHeader=\"{ item: routeItem }\">\n {{ routeItem.text.no }}\n </template>\n <template #columns=\"{ item: routeItem }\">\n <td>\n {{\n routeItems!.find((i) => i.routeName == routeItem.parent)?.text.no\n }}\n </td>\n <td>\n {{\n routeItem.routeType === 'hardcoded'\n ? t('routeAdmin.routeType.values.hardcoded') +\n ': ' +\n t(\n hardcodedStaticRoutes.find(\n (r) => r.name === routeItem.routeName,\n )?.sourceTitle ?? '',\n )\n : routeItem.routeName\n }}\n </td>\n <td>\n {{ t('routeAdmin.routeType.values.' + routeItem.routeType) }}\n </td>\n <td>\n {{ routeItem.sortOrder }}\n </td>\n </template>\n <template #editor>\n <form ref=\"formRef\">\n <RouteEditor\n v-model=\"selectedItem\"\n :all-items=\"routeItems ?? []\"\n @report-validation-error=\"\n (name, hasError) => onValidChanged(name, !hasError)\n \"\n />\n </form>\n </template>\n </TableComponent>\n </div>\n </ContentPage>\n</template>\n\n<style scoped>\n:deep(th),\n:deep(td) {\n text-align: left;\n padding: 1rem 0.5rem;\n text-overflow: ellipsis;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { type Category, colorList } from '@/api/types';\nimport TextInput from '@/components/forms/InputText.vue';\nimport Dropdown, {\n toDropdownItems,\n} from '@/components/forms/InputDropdown.vue';\nimport InputBlockPicker from './forms/InputBlockPicker.vue';\nimport { mapValueList } from '@/utilities/mapValueList';\nimport { useI18n } from 'vue-i18n';\nimport { computed, toRef } from 'vue';\nimport { useInternalState } from '@/utilities/useInternalState';\nimport { cardTemplates, pageTemplates } from '@/renderTemplates';\nimport { useRoleMembers, useRoles } from '@/api/user';\nimport SchemaEditor from './SchemaEditor.vue';\nimport { useTagGroups } from '@/api/tags';\n\nconst { t } = useI18n();\n\nconst props = defineProps<{\n modelValue: Partial<Category> | null;\n allItems?: Category[];\n}>();\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: Category | null): void;\n (e: 'reportValidationError', name: string, hasError: boolean): void;\n}>();\n\nconst item = useInternalState<Partial<Category> | null>(\n toRef(props, 'modelValue'),\n null,\n (val) => emit('update:modelValue', val as Category),\n);\n\nconst colorOptions = mapValueList(colorList, 'categoryAdmin.colors', true);\nconst cardTemplateOptions = mapValueList(\n cardTemplates.map((t) => t.id),\n 'templates',\n true,\n);\nconst pageTemplateOptions = mapValueList(\n pageTemplates.map((t) => t.id),\n 'templates',\n true,\n);\n\nconst { result: categoryEditors } = useRoleMembers('category_editor');\nconst editorOptions = computed(() => {\n if (!categoryEditors.value) return [];\n return toDropdownItems(categoryEditors.value, (item) => [\n item.id,\n item.fullName ?? `${item.firstName} ${item.lastName}`,\n ]);\n});\n\nconst { result: roles } = useRoles(['DocumentAdmin']);\nconst roleOptions = computed(() =>\n mapValueList(roles.value?.map((r) => r.name) ?? [], 'roleSelection'),\n);\n\nconst { result: tagGroups } = useTagGroups();\nconst tagGroupOptions = computed(() => {\n if (!tagGroups.value) return [];\n return toDropdownItems(tagGroups.value, item => [\n item.id.toString(),\n item.label.no\n ]);\n});\n</script>\n\n<template>\n <div v-if=\"item\">\n <div class=\"flex flex-col gap-8\">\n <div\n class=\"flex grow flex-col gap-8 md:grid md:grid-cols-[repeat(auto-fit,minmax(max(15rem,30%),1fr))]\"\n >\n <TextInput\n v-model=\"(item as Category).name.no\"\n label=\"categoryAdmin.nameNo\"\n required\n />\n <TextInput\n v-model=\"(item as Category).name.en\"\n label=\"categoryAdmin.nameEn\"\n required\n />\n <Dropdown\n v-model=\"item.color\"\n label=\"categoryAdmin.colors.title\"\n :multiple=\"{ emptyLabel: '', maxItems: 1 }\"\n :options=\"colorOptions\"\n :getkey=\"(val) => val ?? 'empty'\"\n >\n <template #button=\"{ selectedItems: [selColor] }\">\n <span\n class=\"decoration items-center whitespace-nowrap underline decoration-4 underline-offset-4\"\n :class=\"[`decoration-gnist-${selColor}`]\"\n >\n {{ selColor ? t('categoryAdmin.colors.values.' + selColor) : '' }}\n </span>\n </template>\n <template #option=\"{ item: color }\">\n <span\n class=\"mx-4 my-1 flex items-center whitespace-nowrap\"\n :class=\"[\n color.value\n ? `decoration underline decoration-4 underline-offset-4 decoration-gnist-${color.value}`\n : '',\n ]\"\n >\n {{ color.text ? t(color.text) : ' ' }}\n </span>\n </template>\n </Dropdown>\n <Dropdown\n v-model=\"item.cardTemplateId\"\n label=\"categoryAdmin.template.card\"\n :options=\"cardTemplateOptions\"\n :getkey=\"(val) => val ?? 'empty'\"\n />\n <Dropdown\n v-model=\"item.pageTemplateId\"\n label=\"categoryAdmin.template.page\"\n :options=\"pageTemplateOptions\"\n :getkey=\"(val) => val ?? 'empty'\"\n />\n <Dropdown\n v-model=\"item.tagGroups\"\n label=\"categoryAdmin.tagGroups\"\n :multiple=\"{ emptyLabel: ''}\"\n :options=\"tagGroupOptions\"\n :getkey=\"(val) => val ?? 'empty'\"\n :allow-empty-value=\"true\"\n />\n <Dropdown\n v-model=\"item.editors\"\n label=\"categoryAdmin.editors\"\n :multiple=\"{ emptyLabel: '' }\"\n :options=\"editorOptions\"\n :getkey=\"(val) => val ?? 'empty'\"\n />\n <Dropdown\n v-model=\"item.createRoles\"\n label=\"categoryAdmin.roles.create\"\n tooltip=\"categoryAdmin.roles.createTooltip\"\n :multiple=\"{ emptyLabel: '' }\"\n :options=\"roleOptions\"\n :getkey=\"(val) => val ?? 'empty'\"\n />\n <Dropdown\n v-model=\"item.publishRoles\"\n label=\"categoryAdmin.roles.publish\"\n tooltip=\"categoryAdmin.roles.publishTooltip\"\n :multiple=\"{ emptyLabel: '' }\"\n :options=\"roleOptions\"\n :getkey=\"(val) => val ?? 'empty'\"\n />\n <TextInput\n v-model=\"item.sortOrder\"\n label=\"categoryAdmin.sortOrder\"\n type=\"number\"\n />\n <InputBlockPicker\n v-model=\"item.homePageId\"\n label=\"categoryAdmin.homePageId\"\n tooltip=\"categoryAdmin.homePageIdTooltip\"\n />\n </div>\n <SchemaEditor\n v-model=\"item.schema\"\n :card-template-id=\"item.cardTemplateId\"\n :page-template-id=\"item.pageTemplateId\"\n />\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport {\n getEmptyLocaleValue,\n type Category,\n type PartialSome,\n} from '@/api/types';\nimport ContentPage from '@/components/ContentPage.vue';\nimport CategoryEditor from '@/components/CategoryEditor.vue';\nimport { useI18n } from 'vue-i18n';\nimport { ref } from 'vue';\nimport { throwOnError } from '@/api/composable';\nimport {\n createCategory,\n deleteCategory,\n updateCategory,\n useCategoriesLazy,\n} from '@/api/category';\nimport { translateStringOrLocale } from '@/i18n';\nimport { useValidationTracking } from '@/utilities/useValidationTracking';\nimport { defaultSchema } from '@/components/SchemaEditor.vue';\nimport TableComponent from '@/components/TableComponent.vue';\n\nconst { result: categories } = throwOnError(useCategoriesLazy());\n\nconst selectedItem = ref<PartialSome<Category, 'categoryId'> | null>(null);\n\nasync function onSave() {\n if (!selectedItem.value) return;\n if (!isValid.value) {\n showValidationMessages.value = true;\n return;\n }\n showValidationMessages.value = false;\n const saveValue: PartialSome<Category, 'categoryId'> = {\n ...selectedItem.value,\n schema: selectedItem.value.schema?.map((s) => ({\n ...s,\n requiredByTemplate: undefined,\n canUnsetRequired: undefined,\n })),\n };\n if (!selectedItem.value.categoryId) {\n const updatedItem = await createCategory(saveValue);\n selectedItem.value.categoryId = updatedItem.categoryId;\n } else {\n await updateCategory(saveValue);\n }\n}\n\nfunction onCreateButtonClick() {\n if (!categories.value) return null;\n const newItem: PartialSome<Category, 'categoryId'> = {\n name: getEmptyLocaleValue(),\n schema: [{ ...defaultSchema, name: 'content' }],\n };\n categories.value.push(newItem as Category);\n return newItem;\n}\n\nasync function onDelete(itemToDelete: Category) {\n if (!itemToDelete.categoryId) return;\n await deleteCategory(itemToDelete.categoryId.toString());\n categories.value =\n categories.value?.filter((i) => i.categoryId !== itemToDelete.categoryId) ??\n [];\n}\n\nconst { t } = useI18n();\n\nconst showValidationMessages = ref<boolean>(false);\nconst { onValidChanged, formRef, isValid } = useValidationTracking(\n selectedItem,\n showValidationMessages,\n true,\n);\n</script>\n<template>\n <ContentPage\n :title=\"t('categoryAdmin.title')\"\n class=\"bg-gnist-gray-light-light\"\n >\n <div class=\"pb-8\">\n <div class=\"w-full max-w-full overflow-x-auto\">\n <TableComponent\n size=\"table-lg\"\n :rows=\"categories\"\n show-spinner\n i18n-key=\"categoryAdmin\"\n :get-key=\"(category) => category.categoryId\"\n :columns=\"['name', 'sortOrder']\"\n row-class=\"cursor-pointer\"\n :create=\"{\n title: 'categoryAdmin.create',\n idProperty: 'categoryId',\n onCreateClick: onCreateButtonClick,\n }\"\n :edit=\"{\n title: 'categoryAdmin.view',\n onSave,\n isSelectedItemValid: isValid,\n modalProps: { size: 'big' },\n }\"\n :delete=\"{\n onDelete,\n getIdentificator: (row) => row.name,\n identificatorLabel: 'categoryAdmin.name',\n title: 'categoryAdmin.delete.title',\n warning: 'categoryAdmin.delete.warning',\n }\"\n @update:selected-item=\"(item) => (selectedItem = item)\"\n >\n <template #afterCreate>\n <RouterLink\n :to=\"{ path: '/usermanual/about_categories' }\"\n target=\"_blank\"\n class=\"mx-4 underline hover:bg-gnist-gray-light\"\n >\n {{ t('categoryAdmin.help') }}\n </RouterLink>\n </template>\n <template #columnHeader=\"{ item: category }\">\n {{ translateStringOrLocale(category.name).value }}\n </template>\n <template #columns=\"{ item: category }\">\n <td>\n {{ category.sortOrder }}\n </td>\n </template>\n <template #editor>\n <form ref=\"formRef\">\n <CategoryEditor\n v-model=\"selectedItem\"\n :all-items=\"categories ?? []\"\n @report-validation-error=\"\n (name, hasError) => onValidChanged(name, !hasError)\n \"\n />\n </form>\n </template>\n </TableComponent>\n </div>\n </div>\n </ContentPage>\n</template>\n\n<style scoped>\n:deep(th),\n:deep(td:not(.ButtonRow)) {\n text-align: left;\n padding: 1rem 0.5rem;\n text-overflow: ellipsis;\n}\n</style>\n","export default \"curl -v -X {{console.method}} \\\"{{console.requestUrl}}\\\"\\n{%- for header in console.request.meaningfulHeaders %} -H \\\"\\n{%- if showSecrets == false and header.secret -%}\\n{{ header.name }}: {{ header.hiddenValue }}\\n{%- else -%}\\n{{ header.name }}: {{ header.value }}\\n{%- endif -%}\\\"\\n{%- endfor -%}\\n{% if console.request.body != blank -%}\\n{%- if console.request.bodyFormat == \\\"raw\\\" -%}\\n{%- assign formattedBody = console.request.body | replace:'\\\"','\\\\\\\\\\\"' -%}\\n{%- assign formattedBody = formattedBody | replace: '\\\\r\\\\n', ' ' -%}\\n{%- assign formattedBody = formattedBody | replace: ' ', ' ' %} --data-raw \\\"{{formattedBody}}\\\"\\n{%- elsif console.request.bodyFormat == \\\"binary\\\" %} --data-binary \\\"@ < path/to/{{console.request.binary.name}} >\\\"\\n{% endif -%}\\n{% endif -%}\"","/*\nLanguage: Shell Session\nRequires: bash.js\nAuthor: TSUYUSATO Kitsune <make.just.on@gmail.com>\nCategory: common\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction shell(hljs) {\n return {\n name: 'Shell Session',\n aliases: [\n 'console',\n 'shellsession'\n ],\n contains: [\n {\n className: 'meta.prompt',\n // We cannot add \\s (spaces) in the regular expression otherwise it will be too broad and produce unexpected result.\n // For instance, in the following example, it would match \"echo /path/to/home >\" as a prompt:\n // echo /path/to/home > t.exe\n begin: /^\\s{0,3}[/~\\w\\d[\\]()@-]*[>%$#][ ]?/,\n starts: {\n end: /[^\\\\](?=\\s*$)/,\n subLanguage: 'bash'\n }\n }\n ]\n };\n}\n\nexport { shell as default };\n","export default \"using System;\\nusing System.Net.Http.Headers;\\nusing System.Text;\\nusing System.Net.Http;\\nusing System.Web;\\nusing System.IO;\\n\\nnamespace CSHttpClientSample\\n{\\n static class Program\\n {\\n static void Main()\\n {\\n MakeRequest();\\n Console.WriteLine(\\\"Hit ENTER to exit...\\\");\\n Console.ReadLine();\\n }\\n\\n static async void MakeRequest()\\n {\\n var client = new HttpClient();\\n\\n{% if console.request.meaningfulHeaders.size > 0 %}\\n // Request headers\\n{% for header in console.request.meaningfulHeaders -%}\\n{% case header.name | downcase -%}\\n{%when\\\"content-disposition\\\"-%}\\n {%- continue %};\\n{%when \\\"content-encoding\\\" -%}\\n {%- continue %};\\n{%when \\\"content-language\\\" -%}\\n {%- continue -%};\\n{%when \\\"content-length\\\" %}\\n {%- continue -%};\\n{%when \\\"content-location\\\" %}\\n {%- continue %};\\n{%when \\\"content-md5\\\" -%}\\n {%- continue %};\\n{%when \\\"content-range\\\" -%}\\n {%- continue %};\\n{%when \\\"content-type\\\" -%}\\n {%- continue -%};\\n{%when \\\"expires\\\" -%}\\n {%- continue %};\\n{%when \\\"last-modified\\\" -%}\\n {%- continue %};\\n{% when \\\"accept\\\"%}\\n client.DefaultRequestHeaders.Accept.Add(MediaTypeWithQualityHeaderValue.Parse(\\\"{{header.value}}\\\"));\\n{% when \\\"accept-charset\\\" %}\\n client.DefaultRequestHeaders.AcceptCharset.Add(StringWithQualityHeaderValue.Parse(\\\"{{header.value}}\\\"));\\n{% when \\\"accept-encoding\\\" %}\\n client.DefaultRequestHeaders.AcceptEncoding.Add(StringWithQualityHeaderValue.Parse(\\\"{{header.value}}\\\"));\\n{% when \\\"accept-language\\\" %}\\n client.DefaultRequestHeaders.AcceptLanguage.Add(StringWithQualityHeaderValue.Parse(\\\"{{header.value}}\\\"));\\n{% when \\\"cache-control\\\" %}\\n client.DefaultRequestHeaders.CacheControl = CacheControlHeaderValue.Parse(\\\"{{header.value}}\\\");\\n{% when \\\"connection\\\" %}\\n client.DefaultRequestHeaders.Connection.Add(\\\"{{header.value}}\\\");\\n{% when \\\"date\\\" %}\\n client.DefaultRequestHeaders.Date = DateTimeOffset.Parse(\\\"{{header.value}}\\\");\\n{% when \\\"expect\\\" %}\\n client.DefaultRequestHeaders.Expect.Add(NameValueWithParametersHeaderValue.Parse(\\\"{{header.value}}\\\"));\\n{% when \\\"if-match\\\" %}\\n client.DefaultRequestHeaders.IfMatch.Add(EntityTagHeaderValue.Parse(\\\"{{header.value}}\\\"));\\n{% when \\\"if-modified-since\\\" %}\\n client.DefaultRequestHeaders.IfModifiedSince = DateTimeOffset.Parse(\\\"{{header.value}}\\\");\\n{% when \\\"if-none-match\\\" %}\\n client.DefaultRequestHeaders.IfNoneMatch.Add(EntityTagHeaderValue.Parse(\\\"{{header.value}}\\\"));\\n{% when \\\"if-range\\\" %}\\n client.DefaultRequestHeaders.IfRange = RangeConditionHeaderValue.Parse(\\\"{{header.value}}\\\");\\n{% when \\\"if-unmodified-since\\\" %}\\n client.DefaultRequestHeaders.IfUnmodifiedSince = DateTimeOffset.Parse(\\\"{{header.value}}\\\");\\n{% when \\\"max-forwards\\\" %}\\n client.DefaultRequestHeaders.MaxForwards = int.Parse(\\\"{{header.value}}\\\");\\n{% when \\\"pragma\\\" %}\\n client.DefaultRequestHeaders.Pragma.Add(NameValueHeaderValue.Parse(\\\"{{header.value}}\\\"));\\n{% when \\\"range\\\" %}\\n client.DefaultRequestHeaders.Range = RangeHeaderValue.Parse(\\\"{{header.value}}\\\");\\n{% when \\\"referer\\\" %}\\n client.DefaultRequestHeaders.Referrer = new Uri(\\\"{{header.value}}\\\");\\n{% when \\\"te\\\" %}\\n client.DefaultRequestHeaders.TE.Add(TransferCodingWithQualityHeaderValue.Parse(\\\"{{header.value}}\\\"));\\n{% when \\\"transfer-encoding\\\" %}\\n client.DefaultRequestHeaders.TransferEncoding.Add(TransferCodingHeaderValue.Parse(\\\"{{header.value}}\\\"));\\n{% when \\\"upgrade\\\" %}\\n client.DefaultRequestHeaders.Upgrade.Add(ProductHeaderValue.Parse(\\\"{{header.value}}\\\"));\\n{% when \\\"user-agent\\\" %}\\n client.DefaultRequestHeaders.UserAgent.Add(ProductInfoHeaderValue.Parse(\\\"{{header.value}}\\\"));\\n{% when \\\"via\\\" %}\\n client.DefaultRequestHeaders.Via.Add(ViaHeaderValue.Parse(\\\"{{header.value}}\\\"));\\n{% when \\\"warning\\\" %}\\n client.DefaultRequestHeaders.Warning.Add(WarningHeaderValue.Parse(\\\"{{header.value}}\\\"));\\n{% else %}\\n {% if showSecrets == false and header.secret -%}\\n client.DefaultRequestHeaders.Add(\\\"{{header.name}}\\\", \\\"{{header.hiddenValue}}\\\");\\n {% else -%}\\n client.DefaultRequestHeaders.Add(\\\"{{header.name}}\\\", \\\"{{header.value}}\\\");\\n {% endif -%}\\n \\n{% endcase -%}\\n{% endfor -%}\\n{% endif -%}\\n\\n var uri = \\\"{{console.requestUrl}}\\\";\\n\\n{% case console.method -%}\\n\\n{% when \\\"POST\\\" %}\\n HttpResponseMessage response;\\n {%- if console.request.body != blank %}\\n // Request body\\n{%- if console.request.bodyFormat == \\\"raw\\\" -%}\\n {%- assign formattedBody = console.requestbody | replace:'\\\"','\\\\\\\\\\\"' -%}\\n {%- assign formattedBody = formattedBody | replace: '\\\\r\\\\n', ' ' -%}\\n {%- assign formattedBody = formattedBody | replace: ' ', ' ' %}\\n\\n using (var content = new StringContent(\\\"{{formattedBody}}\\\"))\\n {\\n{%- elsif console.request.bodyFormat == \\\"binary\\\" %}\\n using (var content = new StreamContent(File.OpenRead(\\\" < path\\\\\\\\to\\\\\\\\{{console.request.binary.name}} > \\\")))\\n {\\n{%- endif %}\\n {%- for header in console.request.meaningfulHeaders -%}\\n {% case header.name | downcase -%}\\n {%when\\\"content-disposition\\\" %}\\n content.Headers.ContentDisposition = new ContentDispositionHeaderValue(\\\"{{header.value}}\\\");\\n {%when \\\"content-encoding\\\" %}\\n content.Headers.ContentEncoding.Add(\\\"{{header.value}}\\\");\\n {%when \\\"content-language\\\" %}\\n content.Headers.ContentLanguage.Add(\\\"{{header.value}}\\\");\\n {%when \\\"content-length\\\" %}\\n content.Headers.ContentLength = {{header.value}};\\n {%when \\\"content-location\\\" %}\\n content.Headers.ContentLocation = new Uri(\\\"{{header.value}}\\\"); \\n {%when \\\"content-md5\\\" %}\\n content.Headers.Add(\\\"content-md5\\\", \\\"{{header.value}}\\\");\\n {%when \\\"content-range\\\" %}\\n content.Headers.ContentRange = new ContentRangeHeaderValue({{header.value}});\\n {%when \\\"content-type\\\" %}\\n content.Headers.ContentType = new MediaTypeHeaderValue(\\\"{{header.value}}\\\");\\n {%when \\\"expires\\\" %}\\n content.Headers.Add(\\\"expires\\\", \\\"{{header.value}}\\\");\\n {%when \\\"last-modified\\\" %}\\n content.Headers.Add(\\\"last-modified\\\", \\\"{{header.value}}\\\");\\n {% else -%}\\n {%- continue -%};\\n {% endcase -%}\\n {% endfor -%}\\n{% endif -%}\\n response = await client.PostAsync(uri, content);\\n }\\n\\n{% when \\\"GET\\\" -%}\\n var response = await client.GetAsync(uri);\\n{% when \\\"DELETE\\\" -%}\\n var response = await client.DeleteAsync(uri);\\n{% when \\\"PUT\\\" %}\\n HttpResponseMessage response;\\n{% if console.request.body != blank %}\\n // Request body\\n{%- if console.request.bodyFormat == \\\"raw\\\" -%}\\n {%- assign formattedBody = console.request.body | replace:'\\\"','\\\\\\\\\\\"' -%}\\n {%- assign formattedBody = formattedBody | replace: '\\\\r\\\\n', ' ' -%}\\n {%- assign formattedBody = formattedBody | replace: ' ', ' ' %}\\n using (var content = new StringContent(\\\"{{formattedBody}}\\\"))\\n {\\n{%- elsif console.request.bodyFormat == \\\"binary\\\" %}\\n using (var content = new StreamContent(File.OpenRead(\\\" < path\\\\\\\\to\\\\\\\\{{console.request.binary.name}} > \\\")))\\n {\\n{%- endif %}\\n{%- for header in console.request.meaningfulHeaders -%}\\n {% case header.name | downcase -%}\\n {%when\\\"content-disposition\\\" %}\\n content.Headers.ContentDisposition = new ContentDispositionHeaderValue(\\\"{{header.value}}\\\");\\n {%when \\\"content-encoding\\\" %}\\n content.Headers.ContentEncoding.Add(\\\"{{header.value}}\\\");\\n {%when \\\"content-language\\\" %}\\n content.Headers.ContentLanguage.Add(\\\"{{header.value}}\\\");\\n {%when \\\"content-length\\\" %}\\n content.Headers.ContentLength = {{header.value}};\\n {%when \\\"content-location\\\" %}\\n content.Headers.ContentLocation = new Uri(\\\"{{header.value}}\\\"); \\n {%when \\\"content-md5\\\" %}\\n content.Headers.Add(\\\"content-md5\\\", \\\"{{header.value}}\\\");\\n {%when \\\"content-range\\\" %}\\n content.Headers.ContentRange = new ContentRangeHeaderValue({{header.value}});\\n {%when \\\"content-type\\\" %}\\n content.Headers.ContentType = new MediaTypeHeaderValue(\\\"{{header.value}}\\\");\\n {%when \\\"expires\\\" %}\\n content.Headers.Add(\\\"expires\\\", \\\"{{header.value}}\\\");\\n {%when \\\"last-modified\\\" %}\\n content.Headers.Add(\\\"last-modified\\\", \\\"{{header.value}}\\\");\\n {% else -%}\\n {%- continue -%};\\n {% endcase -%}\\n{% endfor -%}\\n{% endif -%}\\n response = await client.PutAsync(uri, content);\\n }\\n{% when \\\"HEAD\\\" -%}\\n var response = await client.SendAsync(new HttpRequestMessage(HttpMethod.Head, uri));\\n{% when \\\"OPTIONS\\\" -%}\\n var response = await client.SendAsync(new HttpRequestMessage(HttpMethod.Options, uri));\\n{% when \\\"TRACE\\\" -%}\\n var response = await client.SendAsync(new HttpRequestMessage(HttpMethod.Trace, uri));\\n\\n if (response.Content != null)\\n {\\n var responseString = await response.Content.ReadAsStringAsync();\\n Console.WriteLine(responseString);\\n }\\n{% endcase %}\\n }\\n }\\n}\\n\"","/*\nLanguage: C#\nAuthor: Jason Diamond <jason@diamond.name>\nContributor: Nicolas LLOBERA <nllobera@gmail.com>, Pieter Vantorre <pietervantorre@gmail.com>, David Pine <david.pine@microsoft.com>\nWebsite: https://docs.microsoft.com/dotnet/csharp/\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction csharp(hljs) {\n const BUILT_IN_KEYWORDS = [\n 'bool',\n 'byte',\n 'char',\n 'decimal',\n 'delegate',\n 'double',\n 'dynamic',\n 'enum',\n 'float',\n 'int',\n 'long',\n 'nint',\n 'nuint',\n 'object',\n 'sbyte',\n 'short',\n 'string',\n 'ulong',\n 'uint',\n 'ushort'\n ];\n const FUNCTION_MODIFIERS = [\n 'public',\n 'private',\n 'protected',\n 'static',\n 'internal',\n 'protected',\n 'abstract',\n 'async',\n 'extern',\n 'override',\n 'unsafe',\n 'virtual',\n 'new',\n 'sealed',\n 'partial'\n ];\n const LITERAL_KEYWORDS = [\n 'default',\n 'false',\n 'null',\n 'true'\n ];\n const NORMAL_KEYWORDS = [\n 'abstract',\n 'as',\n 'base',\n 'break',\n 'case',\n 'catch',\n 'class',\n 'const',\n 'continue',\n 'do',\n 'else',\n 'event',\n 'explicit',\n 'extern',\n 'finally',\n 'fixed',\n 'for',\n 'foreach',\n 'goto',\n 'if',\n 'implicit',\n 'in',\n 'interface',\n 'internal',\n 'is',\n 'lock',\n 'namespace',\n 'new',\n 'operator',\n 'out',\n 'override',\n 'params',\n 'private',\n 'protected',\n 'public',\n 'readonly',\n 'record',\n 'ref',\n 'return',\n 'scoped',\n 'sealed',\n 'sizeof',\n 'stackalloc',\n 'static',\n 'struct',\n 'switch',\n 'this',\n 'throw',\n 'try',\n 'typeof',\n 'unchecked',\n 'unsafe',\n 'using',\n 'virtual',\n 'void',\n 'volatile',\n 'while'\n ];\n const CONTEXTUAL_KEYWORDS = [\n 'add',\n 'alias',\n 'and',\n 'ascending',\n 'async',\n 'await',\n 'by',\n 'descending',\n 'equals',\n 'from',\n 'get',\n 'global',\n 'group',\n 'init',\n 'into',\n 'join',\n 'let',\n 'nameof',\n 'not',\n 'notnull',\n 'on',\n 'or',\n 'orderby',\n 'partial',\n 'remove',\n 'select',\n 'set',\n 'unmanaged',\n 'value|0',\n 'var',\n 'when',\n 'where',\n 'with',\n 'yield'\n ];\n\n const KEYWORDS = {\n keyword: NORMAL_KEYWORDS.concat(CONTEXTUAL_KEYWORDS),\n built_in: BUILT_IN_KEYWORDS,\n literal: LITERAL_KEYWORDS\n };\n const TITLE_MODE = hljs.inherit(hljs.TITLE_MODE, { begin: '[a-zA-Z](\\\\.?\\\\w)*' });\n const NUMBERS = {\n className: 'number',\n variants: [\n { begin: '\\\\b(0b[01\\']+)' },\n { begin: '(-?)\\\\b([\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)(u|U|l|L|ul|UL|f|F|b|B)' },\n { begin: '(-?)(\\\\b0[xX][a-fA-F0-9\\']+|(\\\\b[\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)([eE][-+]?[\\\\d\\']+)?)' }\n ],\n relevance: 0\n };\n const RAW_STRING = {\n className: 'string',\n begin: /\"\"\"(\"*)(?!\")(.|\\n)*?\"\"\"\\1/,\n relevance: 1\n };\n const VERBATIM_STRING = {\n className: 'string',\n begin: '@\"',\n end: '\"',\n contains: [ { begin: '\"\"' } ]\n };\n const VERBATIM_STRING_NO_LF = hljs.inherit(VERBATIM_STRING, { illegal: /\\n/ });\n const SUBST = {\n className: 'subst',\n begin: /\\{/,\n end: /\\}/,\n keywords: KEYWORDS\n };\n const SUBST_NO_LF = hljs.inherit(SUBST, { illegal: /\\n/ });\n const INTERPOLATED_STRING = {\n className: 'string',\n begin: /\\$\"/,\n end: '\"',\n illegal: /\\n/,\n contains: [\n { begin: /\\{\\{/ },\n { begin: /\\}\\}/ },\n hljs.BACKSLASH_ESCAPE,\n SUBST_NO_LF\n ]\n };\n const INTERPOLATED_VERBATIM_STRING = {\n className: 'string',\n begin: /\\$@\"/,\n end: '\"',\n contains: [\n { begin: /\\{\\{/ },\n { begin: /\\}\\}/ },\n { begin: '\"\"' },\n SUBST\n ]\n };\n const INTERPOLATED_VERBATIM_STRING_NO_LF = hljs.inherit(INTERPOLATED_VERBATIM_STRING, {\n illegal: /\\n/,\n contains: [\n { begin: /\\{\\{/ },\n { begin: /\\}\\}/ },\n { begin: '\"\"' },\n SUBST_NO_LF\n ]\n });\n SUBST.contains = [\n INTERPOLATED_VERBATIM_STRING,\n INTERPOLATED_STRING,\n VERBATIM_STRING,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n NUMBERS,\n hljs.C_BLOCK_COMMENT_MODE\n ];\n SUBST_NO_LF.contains = [\n INTERPOLATED_VERBATIM_STRING_NO_LF,\n INTERPOLATED_STRING,\n VERBATIM_STRING_NO_LF,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n NUMBERS,\n hljs.inherit(hljs.C_BLOCK_COMMENT_MODE, { illegal: /\\n/ })\n ];\n const STRING = { variants: [\n RAW_STRING,\n INTERPOLATED_VERBATIM_STRING,\n INTERPOLATED_STRING,\n VERBATIM_STRING,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ] };\n\n const GENERIC_MODIFIER = {\n begin: \"<\",\n end: \">\",\n contains: [\n { beginKeywords: \"in out\" },\n TITLE_MODE\n ]\n };\n const TYPE_IDENT_RE = hljs.IDENT_RE + '(<' + hljs.IDENT_RE + '(\\\\s*,\\\\s*' + hljs.IDENT_RE + ')*>)?(\\\\[\\\\])?';\n const AT_IDENTIFIER = {\n // prevents expressions like `@class` from incorrect flagging\n // `class` as a keyword\n begin: \"@\" + hljs.IDENT_RE,\n relevance: 0\n };\n\n return {\n name: 'C#',\n aliases: [\n 'cs',\n 'c#'\n ],\n keywords: KEYWORDS,\n illegal: /::/,\n contains: [\n hljs.COMMENT(\n '///',\n '$',\n {\n returnBegin: true,\n contains: [\n {\n className: 'doctag',\n variants: [\n {\n begin: '///',\n relevance: 0\n },\n { begin: '<!--|-->' },\n {\n begin: '</?',\n end: '>'\n }\n ]\n }\n ]\n }\n ),\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n {\n className: 'meta',\n begin: '#',\n end: '$',\n keywords: { keyword: 'if else elif endif define undef warning error line region endregion pragma checksum' }\n },\n STRING,\n NUMBERS,\n {\n beginKeywords: 'class interface',\n relevance: 0,\n end: /[{;=]/,\n illegal: /[^\\s:,]/,\n contains: [\n { beginKeywords: \"where class\" },\n TITLE_MODE,\n GENERIC_MODIFIER,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n {\n beginKeywords: 'namespace',\n relevance: 0,\n end: /[{;=]/,\n illegal: /[^\\s:]/,\n contains: [\n TITLE_MODE,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n {\n beginKeywords: 'record',\n relevance: 0,\n end: /[{;=]/,\n illegal: /[^\\s:]/,\n contains: [\n TITLE_MODE,\n GENERIC_MODIFIER,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n {\n // [Attributes(\"\")]\n className: 'meta',\n begin: '^\\\\s*\\\\[(?=[\\\\w])',\n excludeBegin: true,\n end: '\\\\]',\n excludeEnd: true,\n contains: [\n {\n className: 'string',\n begin: /\"/,\n end: /\"/\n }\n ]\n },\n {\n // Expression keywords prevent 'keyword Name(...)' from being\n // recognized as a function definition\n beginKeywords: 'new return throw await else',\n relevance: 0\n },\n {\n className: 'function',\n begin: '(' + TYPE_IDENT_RE + '\\\\s+)+' + hljs.IDENT_RE + '\\\\s*(<[^=]+>\\\\s*)?\\\\(',\n returnBegin: true,\n end: /\\s*[{;=]/,\n excludeEnd: true,\n keywords: KEYWORDS,\n contains: [\n // prevents these from being highlighted `title`\n {\n beginKeywords: FUNCTION_MODIFIERS.join(\" \"),\n relevance: 0\n },\n {\n begin: hljs.IDENT_RE + '\\\\s*(<[^=]+>\\\\s*)?\\\\(',\n returnBegin: true,\n contains: [\n hljs.TITLE_MODE,\n GENERIC_MODIFIER\n ],\n relevance: 0\n },\n { match: /\\(\\)/ },\n {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS,\n relevance: 0,\n contains: [\n STRING,\n NUMBERS,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n AT_IDENTIFIER\n ]\n };\n}\n\nexport { csharp as default };\n","export default \"{{console.method}} {{console.requestUrl}} HTTP/1.1\\n\\n{% for header in console.request.meaningfulHeaders -%}\\n{% if showSecrets == false and header.secret -%}\\n{{ header.name }}: {{ header.hiddenValue }}\\n{% else -%}\\n{{ header.name }}: {{ header.value }}\\n{% endif -%}\\n{% endfor %}\\n{% if console.request.body != blank and console.request.bodyFormat == \\\"raw\\\" -%}\\n{{ console.request.body }}\\n{% endif -%}\\n{% if console.request.binary != blank and console.request.bodyFormat == \\\"binary\\\" -%}\\n[ {{ console.request.binary.name }} ]\\n{% endif -%}\"","/*\nLanguage: HTTP\nDescription: HTTP request and response headers with automatic body highlighting\nAuthor: Ivan Sagalaev <maniac@softwaremaniacs.org>\nCategory: protocols, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview\n*/\n\nfunction http(hljs) {\n const regex = hljs.regex;\n const VERSION = 'HTTP/([32]|1\\\\.[01])';\n const HEADER_NAME = /[A-Za-z][A-Za-z0-9-]*/;\n const HEADER = {\n className: 'attribute',\n begin: regex.concat('^', HEADER_NAME, '(?=\\\\:\\\\s)'),\n starts: { contains: [\n {\n className: \"punctuation\",\n begin: /: /,\n relevance: 0,\n starts: {\n end: '$',\n relevance: 0\n }\n }\n ] }\n };\n const HEADERS_AND_BODY = [\n HEADER,\n {\n begin: '\\\\n\\\\n',\n starts: {\n subLanguage: [],\n endsWithParent: true\n }\n }\n ];\n\n return {\n name: 'HTTP',\n aliases: [ 'https' ],\n illegal: /\\S/,\n contains: [\n // response\n {\n begin: '^(?=' + VERSION + \" \\\\d{3})\",\n end: /$/,\n contains: [\n {\n className: \"meta\",\n begin: VERSION\n },\n {\n className: 'number',\n begin: '\\\\b\\\\d{3}\\\\b'\n }\n ],\n starts: {\n end: /\\b\\B/,\n illegal: /\\S/,\n contains: HEADERS_AND_BODY\n }\n },\n // request\n {\n begin: '(?=^[A-Z]+ (.*?) ' + VERSION + '$)',\n end: /$/,\n contains: [\n {\n className: 'string',\n begin: ' ',\n end: ' ',\n excludeBegin: true,\n excludeEnd: true\n },\n {\n className: \"meta\",\n begin: VERSION\n },\n {\n className: 'keyword',\n begin: '[A-Z]+'\n }\n ],\n starts: {\n end: /\\b\\B/,\n illegal: /\\S/,\n contains: HEADERS_AND_BODY\n }\n },\n // to allow headers to work even without a preamble\n hljs.inherit(HEADER, { relevance: 0 })\n ]\n };\n}\n\nexport { http as default };\n","export default \"import java.io.BufferedReader;\\nimport java.io.InputStreamReader;\\nimport java.net.HttpURLConnection;\\nimport java.net.URL;\\nimport java.net.URLEncoder;\\nimport java.util.HashMap;\\nimport java.util.Map;\\nimport java.io.UnsupportedEncodingException;\\nimport java.io.DataInputStream;\\nimport java.io.InputStream;\\nimport java.io.FileInputStream;\\n\\npublic class HelloWorld {\\n\\n public static void main(String[] args) {\\n try {\\n String urlString = \\\"{{console.requestUrl}}\\\";\\n URL url = new URL(urlString);\\n HttpURLConnection connection = (HttpURLConnection) url.openConnection();\\n\\n //Request headers\\n{%- for header in console.request.meaningfulHeaders %}\\n {% if showSecrets == false and header.secret -%}\\n connection.setRequestProperty(\\\"{{header.name}}\\\", \\\"{{header.hiddenValue}}\\\");\\n {% else -%}\\n connection.setRequestProperty(\\\"{{header.name}}\\\", \\\"{{header.value}}\\\");\\n {% endif -%}\\n \\n{% endfor %}\\n connection.setRequestMethod(\\\"{{console.method}}\\\");\\n{% if console.method == \\\"POST\\\" or console.method == \\\"PUT\\\" -%}\\n {%- if console.request.body != blank %}\\n // Request body\\n connection.setDoOutput(true);\\n {%- if console.request.bodyFormat == \\\"raw\\\" -%}\\n {%- assign formattedBody = console.request.body | replace:'\\\"','\\\\\\\\\\\"' -%}\\n {%- assign formattedBody = formattedBody | replace: '\\\\r\\\\n', ' ' -%}\\n {%- assign formattedBody = formattedBody | replace: '\\\\n', ' ' -%}\\n {%- assign formattedBody = formattedBody | replace: ' ', ' ' %}\\n connection\\n .getOutputStream()\\n .write(\\n \\\"{{formattedBody}}\\\".getBytes()\\n );\\n {%- elsif console.request.bodyFormat == \\\"binary\\\" %}\\n String fileName = \\\"< path/to/{{console.request.binary.name}} >\\\";\\n InputStream is = new FileInputStream(fileName);\\n byte[] bytes = new byte[(int) is.available()];\\n DataInputStream dataInputStream = new DataInputStream(is);\\n dataInputStream.readFully(bytes);\\n dataInputStream.close();\\n connection.getOutputStream().write(bytes);\\n {%- endif %}\\n {% endif -%}\\n\\n{% endif %}\\n int status = connection.getResponseCode();\\n System.out.println(status);\\n\\n BufferedReader in = new BufferedReader(\\n new InputStreamReader(connection.getInputStream())\\n );\\n String inputLine;\\n StringBuffer content = new StringBuffer();\\n while ((inputLine = in.readLine()) != null) {\\n content.append(inputLine);\\n }\\n in.close();\\n System.out.println(content);\\n\\n connection.disconnect();\\n } catch (Exception ex) {\\n System.out.print(\\\"exception:\\\" + ex.getMessage());\\n }\\n }\\n}\"","// https://docs.oracle.com/javase/specs/jls/se15/html/jls-3.html#jls-3.10\nvar decimalDigits = '[0-9](_*[0-9])*';\nvar frac = `\\\\.(${decimalDigits})`;\nvar hexDigits = '[0-9a-fA-F](_*[0-9a-fA-F])*';\nvar NUMERIC = {\n className: 'number',\n variants: [\n // DecimalFloatingPointLiteral\n // including ExponentPart\n { begin: `(\\\\b(${decimalDigits})((${frac})|\\\\.)?|(${frac}))` +\n `[eE][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n // excluding ExponentPart\n { begin: `\\\\b(${decimalDigits})((${frac})[fFdD]?\\\\b|\\\\.([fFdD]\\\\b)?)` },\n { begin: `(${frac})[fFdD]?\\\\b` },\n { begin: `\\\\b(${decimalDigits})[fFdD]\\\\b` },\n\n // HexadecimalFloatingPointLiteral\n { begin: `\\\\b0[xX]((${hexDigits})\\\\.?|(${hexDigits})?\\\\.(${hexDigits}))` +\n `[pP][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n\n // DecimalIntegerLiteral\n { begin: '\\\\b(0|[1-9](_*[0-9])*)[lL]?\\\\b' },\n\n // HexIntegerLiteral\n { begin: `\\\\b0[xX](${hexDigits})[lL]?\\\\b` },\n\n // OctalIntegerLiteral\n { begin: '\\\\b0(_*[0-7])*[lL]?\\\\b' },\n\n // BinaryIntegerLiteral\n { begin: '\\\\b0[bB][01](_*[01])*[lL]?\\\\b' },\n ],\n relevance: 0\n};\n\n/*\nLanguage: Java\nAuthor: Vsevolod Solovyov <vsevolod.solovyov@gmail.com>\nCategory: common, enterprise\nWebsite: https://www.java.com/\n*/\n\n\n/**\n * Allows recursive regex expressions to a given depth\n *\n * ie: recurRegex(\"(abc~~~)\", /~~~/g, 2) becomes:\n * (abc(abc(abc)))\n *\n * @param {string} re\n * @param {RegExp} substitution (should be a g mode regex)\n * @param {number} depth\n * @returns {string}``\n */\nfunction recurRegex(re, substitution, depth) {\n if (depth === -1) return \"\";\n\n return re.replace(substitution, _ => {\n return recurRegex(re, substitution, depth - 1);\n });\n}\n\n/** @type LanguageFn */\nfunction java(hljs) {\n const regex = hljs.regex;\n const JAVA_IDENT_RE = '[\\u00C0-\\u02B8a-zA-Z_$][\\u00C0-\\u02B8a-zA-Z_$0-9]*';\n const GENERIC_IDENT_RE = JAVA_IDENT_RE\n + recurRegex('(?:<' + JAVA_IDENT_RE + '~~~(?:\\\\s*,\\\\s*' + JAVA_IDENT_RE + '~~~)*>)?', /~~~/g, 2);\n const MAIN_KEYWORDS = [\n 'synchronized',\n 'abstract',\n 'private',\n 'var',\n 'static',\n 'if',\n 'const ',\n 'for',\n 'while',\n 'strictfp',\n 'finally',\n 'protected',\n 'import',\n 'native',\n 'final',\n 'void',\n 'enum',\n 'else',\n 'break',\n 'transient',\n 'catch',\n 'instanceof',\n 'volatile',\n 'case',\n 'assert',\n 'package',\n 'default',\n 'public',\n 'try',\n 'switch',\n 'continue',\n 'throws',\n 'protected',\n 'public',\n 'private',\n 'module',\n 'requires',\n 'exports',\n 'do',\n 'sealed',\n 'yield',\n 'permits',\n 'goto'\n ];\n\n const BUILT_INS = [\n 'super',\n 'this'\n ];\n\n const LITERALS = [\n 'false',\n 'true',\n 'null'\n ];\n\n const TYPES = [\n 'char',\n 'boolean',\n 'long',\n 'float',\n 'int',\n 'byte',\n 'short',\n 'double'\n ];\n\n const KEYWORDS = {\n keyword: MAIN_KEYWORDS,\n literal: LITERALS,\n type: TYPES,\n built_in: BUILT_INS\n };\n\n const ANNOTATION = {\n className: 'meta',\n begin: '@' + JAVA_IDENT_RE,\n contains: [\n {\n begin: /\\(/,\n end: /\\)/,\n contains: [ \"self\" ] // allow nested () inside our annotation\n }\n ]\n };\n const PARAMS = {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n keywords: KEYWORDS,\n relevance: 0,\n contains: [ hljs.C_BLOCK_COMMENT_MODE ],\n endsParent: true\n };\n\n return {\n name: 'Java',\n aliases: [ 'jsp' ],\n keywords: KEYWORDS,\n illegal: /<\\/|#/,\n contains: [\n hljs.COMMENT(\n '/\\\\*\\\\*',\n '\\\\*/',\n {\n relevance: 0,\n contains: [\n {\n // eat up @'s in emails to prevent them to be recognized as doctags\n begin: /\\w+@/,\n relevance: 0\n },\n {\n className: 'doctag',\n begin: '@[A-Za-z]+'\n }\n ]\n }\n ),\n // relevance boost\n {\n begin: /import java\\.[a-z]+\\./,\n keywords: \"import\",\n relevance: 2\n },\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n {\n begin: /\"\"\"/,\n end: /\"\"\"/,\n className: \"string\",\n contains: [ hljs.BACKSLASH_ESCAPE ]\n },\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n {\n match: [\n /\\b(?:class|interface|enum|extends|implements|new)/,\n /\\s+/,\n JAVA_IDENT_RE\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n {\n // Exceptions for hyphenated keywords\n match: /non-sealed/,\n scope: \"keyword\"\n },\n {\n begin: [\n regex.concat(/(?!else)/, JAVA_IDENT_RE),\n /\\s+/,\n JAVA_IDENT_RE,\n /\\s+/,\n /=(?!=)/\n ],\n className: {\n 1: \"type\",\n 3: \"variable\",\n 5: \"operator\"\n }\n },\n {\n begin: [\n /record/,\n /\\s+/,\n JAVA_IDENT_RE\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.class\"\n },\n contains: [\n PARAMS,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n {\n // Expression keywords prevent 'keyword Name(...)' from being\n // recognized as a function definition\n beginKeywords: 'new throw return else',\n relevance: 0\n },\n {\n begin: [\n '(?:' + GENERIC_IDENT_RE + '\\\\s+)',\n hljs.UNDERSCORE_IDENT_RE,\n /\\s*(?=\\()/\n ],\n className: { 2: \"title.function\" },\n keywords: KEYWORDS,\n contains: [\n {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n keywords: KEYWORDS,\n relevance: 0,\n contains: [\n ANNOTATION,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n NUMERIC,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n NUMERIC,\n ANNOTATION\n ]\n };\n}\n\nexport { java as default };\n","export default \"{%- if console.request.body != blank and console.request.bodyFormat == \\\"raw\\\" -%}\\n// Request body\\nconst body = {{console.request.body}};\\n{%- endif -%}\\n\\nfetch('{{console.requestUrl}}', {\\n method: '{{console.method | upcase}}',\\n {%- if console.request.body != blank %}\\n body: JSON.stringify(body),\\n {%- endif -%}\\n {% if console.request.meaningfulHeaders.size > 0 %}\\n // Request headers\\n headers: {\\n {%- for header in console.request.meaningfulHeaders %}\\n {% if showSecrets == false and header.secret -%}\\n '{{header.name}}': '{{header.hiddenValue}}',\\n {%- else -%}\\n '{{header.name}}': '{{header.value}}',\\n {%- endif -%}\\n {%- endfor -%}\\n {%- endif -%}\\n }\\n })\\n .then(response => {\\n console.log(response.status);\\n console.log(response.text());\\n })\\n .catch(err => console.error(err));\"","const IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\nconst KEYWORDS = [\n \"as\", // for exports\n \"in\",\n \"of\",\n \"if\",\n \"for\",\n \"while\",\n \"finally\",\n \"var\",\n \"new\",\n \"function\",\n \"do\",\n \"return\",\n \"void\",\n \"else\",\n \"break\",\n \"catch\",\n \"instanceof\",\n \"with\",\n \"throw\",\n \"case\",\n \"default\",\n \"try\",\n \"switch\",\n \"continue\",\n \"typeof\",\n \"delete\",\n \"let\",\n \"yield\",\n \"const\",\n \"class\",\n // JS handles these with a special rule\n // \"get\",\n // \"set\",\n \"debugger\",\n \"async\",\n \"await\",\n \"static\",\n \"import\",\n \"from\",\n \"export\",\n \"extends\"\n];\nconst LITERALS = [\n \"true\",\n \"false\",\n \"null\",\n \"undefined\",\n \"NaN\",\n \"Infinity\"\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\nconst TYPES = [\n // Fundamental objects\n \"Object\",\n \"Function\",\n \"Boolean\",\n \"Symbol\",\n // numbers and dates\n \"Math\",\n \"Date\",\n \"Number\",\n \"BigInt\",\n // text\n \"String\",\n \"RegExp\",\n // Indexed collections\n \"Array\",\n \"Float32Array\",\n \"Float64Array\",\n \"Int8Array\",\n \"Uint8Array\",\n \"Uint8ClampedArray\",\n \"Int16Array\",\n \"Int32Array\",\n \"Uint16Array\",\n \"Uint32Array\",\n \"BigInt64Array\",\n \"BigUint64Array\",\n // Keyed collections\n \"Set\",\n \"Map\",\n \"WeakSet\",\n \"WeakMap\",\n // Structured data\n \"ArrayBuffer\",\n \"SharedArrayBuffer\",\n \"Atomics\",\n \"DataView\",\n \"JSON\",\n // Control abstraction objects\n \"Promise\",\n \"Generator\",\n \"GeneratorFunction\",\n \"AsyncFunction\",\n // Reflection\n \"Reflect\",\n \"Proxy\",\n // Internationalization\n \"Intl\",\n // WebAssembly\n \"WebAssembly\"\n];\n\nconst ERROR_TYPES = [\n \"Error\",\n \"EvalError\",\n \"InternalError\",\n \"RangeError\",\n \"ReferenceError\",\n \"SyntaxError\",\n \"TypeError\",\n \"URIError\"\n];\n\nconst BUILT_IN_GLOBALS = [\n \"setInterval\",\n \"setTimeout\",\n \"clearInterval\",\n \"clearTimeout\",\n\n \"require\",\n \"exports\",\n\n \"eval\",\n \"isFinite\",\n \"isNaN\",\n \"parseFloat\",\n \"parseInt\",\n \"decodeURI\",\n \"decodeURIComponent\",\n \"encodeURI\",\n \"encodeURIComponent\",\n \"escape\",\n \"unescape\"\n];\n\nconst BUILT_IN_VARIABLES = [\n \"arguments\",\n \"this\",\n \"super\",\n \"console\",\n \"window\",\n \"document\",\n \"localStorage\",\n \"sessionStorage\",\n \"module\",\n \"global\" // Node.js\n];\n\nconst BUILT_INS = [].concat(\n BUILT_IN_GLOBALS,\n TYPES,\n ERROR_TYPES\n);\n\n/*\nLanguage: JavaScript\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\nCategory: common, scripting, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\n*/\n\n\n/** @type LanguageFn */\nfunction javascript(hljs) {\n const regex = hljs.regex;\n /**\n * Takes a string like \"<Booger\" and checks to see\n * if we can find a matching \"</Booger\" later in the\n * content.\n * @param {RegExpMatchArray} match\n * @param {{after:number}} param1\n */\n const hasClosingTag = (match, { after }) => {\n const tag = \"</\" + match[0].slice(1);\n const pos = match.input.indexOf(tag, after);\n return pos !== -1;\n };\n\n const IDENT_RE$1 = IDENT_RE;\n const FRAGMENT = {\n begin: '<>',\n end: '</>'\n };\n // to avoid some special cases inside isTrulyOpeningTag\n const XML_SELF_CLOSING = /<[A-Za-z0-9\\\\._:-]+\\s*\\/>/;\n const XML_TAG = {\n begin: /<[A-Za-z0-9\\\\._:-]+/,\n end: /\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,\n /**\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\n isTrulyOpeningTag: (match, response) => {\n const afterMatchIndex = match[0].length + match.index;\n const nextChar = match.input[afterMatchIndex];\n if (\n // HTML should not include another raw `<` inside a tag\n // nested type?\n // `<Array<Array<number>>`, etc.\n nextChar === \"<\" ||\n // the , gives away that this is not HTML\n // `<T, A extends keyof T, V>`\n nextChar === \",\"\n ) {\n response.ignoreMatch();\n return;\n }\n\n // `<something>`\n // Quite possibly a tag, lets look for a matching closing tag...\n if (nextChar === \">\") {\n // if we cannot find a matching closing tag, then we\n // will ignore it\n if (!hasClosingTag(match, { after: afterMatchIndex })) {\n response.ignoreMatch();\n }\n }\n\n // `<blah />` (self-closing)\n // handled by simpleSelfClosing rule\n\n let m;\n const afterMatch = match.input.substring(afterMatchIndex);\n\n // some more template typing stuff\n // <T = any>(key?: string) => Modify<\n if ((m = afterMatch.match(/^\\s*=/))) {\n response.ignoreMatch();\n return;\n }\n\n // `<From extends string>`\n // technically this could be HTML, but it smells like a type\n // NOTE: This is ugh, but added specifically for https://github.com/highlightjs/highlight.js/issues/3276\n if ((m = afterMatch.match(/^\\s+extends\\s+/))) {\n if (m.index === 0) {\n response.ignoreMatch();\n // eslint-disable-next-line no-useless-return\n return;\n }\n }\n }\n };\n const KEYWORDS$1 = {\n $pattern: IDENT_RE,\n keyword: KEYWORDS,\n literal: LITERALS,\n built_in: BUILT_INS,\n \"variable.language\": BUILT_IN_VARIABLES\n };\n\n // https://tc39.es/ecma262/#sec-literals-numeric-literals\n const decimalDigits = '[0-9](_?[0-9])*';\n const frac = `\\\\.(${decimalDigits})`;\n // DecimalIntegerLiteral, including Annex B NonOctalDecimalIntegerLiteral\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;\n const NUMBER = {\n className: 'number',\n variants: [\n // DecimalLiteral\n { begin: `(\\\\b(${decimalInteger})((${frac})|\\\\.)?|(${frac}))` +\n `[eE][+-]?(${decimalDigits})\\\\b` },\n { begin: `\\\\b(${decimalInteger})\\\\b((${frac})\\\\b|\\\\.)?|(${frac})\\\\b` },\n\n // DecimalBigIntegerLiteral\n { begin: `\\\\b(0|[1-9](_?[0-9])*)n\\\\b` },\n\n // NonDecimalIntegerLiteral\n { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b\" },\n { begin: \"\\\\b0[bB][0-1](_?[0-1])*n?\\\\b\" },\n { begin: \"\\\\b0[oO][0-7](_?[0-7])*n?\\\\b\" },\n\n // LegacyOctalIntegerLiteral (does not include underscore separators)\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n { begin: \"\\\\b0[0-7]+n?\\\\b\" },\n ],\n relevance: 0\n };\n\n const SUBST = {\n className: 'subst',\n begin: '\\\\$\\\\{',\n end: '\\\\}',\n keywords: KEYWORDS$1,\n contains: [] // defined later\n };\n const HTML_TEMPLATE = {\n begin: '\\.?html`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'xml'\n }\n };\n const CSS_TEMPLATE = {\n begin: '\\.?css`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'css'\n }\n };\n const GRAPHQL_TEMPLATE = {\n begin: '\\.?gql`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'graphql'\n }\n };\n const TEMPLATE_STRING = {\n className: 'string',\n begin: '`',\n end: '`',\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ]\n };\n const JSDOC_COMMENT = hljs.COMMENT(\n /\\/\\*\\*(?!\\/)/,\n '\\\\*/',\n {\n relevance: 0,\n contains: [\n {\n begin: '(?=@[A-Za-z]+)',\n relevance: 0,\n contains: [\n {\n className: 'doctag',\n begin: '@[A-Za-z]+'\n },\n {\n className: 'type',\n begin: '\\\\{',\n end: '\\\\}',\n excludeEnd: true,\n excludeBegin: true,\n relevance: 0\n },\n {\n className: 'variable',\n begin: IDENT_RE$1 + '(?=\\\\s*(-)|$)',\n endsParent: true,\n relevance: 0\n },\n // eat spaces (not newlines) so we can find\n // types or variables\n {\n begin: /(?=[^\\n])\\s/,\n relevance: 0\n }\n ]\n }\n ]\n }\n );\n const COMMENT = {\n className: \"comment\",\n variants: [\n JSDOC_COMMENT,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.C_LINE_COMMENT_MODE\n ]\n };\n const SUBST_INTERNALS = [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n GRAPHQL_TEMPLATE,\n TEMPLATE_STRING,\n // Skip numbers when they are part of a variable name\n { match: /\\$\\d+/ },\n NUMBER,\n // This is intentional:\n // See https://github.com/highlightjs/highlight.js/issues/3288\n // hljs.REGEXP_MODE\n ];\n SUBST.contains = SUBST_INTERNALS\n .concat({\n // we need to pair up {} inside our subst to prevent\n // it from ending too early by matching another }\n begin: /\\{/,\n end: /\\}/,\n keywords: KEYWORDS$1,\n contains: [\n \"self\"\n ].concat(SUBST_INTERNALS)\n });\n const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);\n const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([\n // eat recursive parens in sub expressions\n {\n begin: /(\\s*)\\(/,\n end: /\\)/,\n keywords: KEYWORDS$1,\n contains: [\"self\"].concat(SUBST_AND_COMMENTS)\n }\n ]);\n const PARAMS = {\n className: 'params',\n // convert this to negative lookbehind in v12\n begin: /(\\s*)\\(/, // to match the parms with \n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n };\n\n // ES6 classes\n const CLASS_OR_EXTENDS = {\n variants: [\n // class Car extends vehicle\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1,\n /\\s+/,\n /extends/,\n /\\s+/,\n regex.concat(IDENT_RE$1, \"(\", regex.concat(/\\./, IDENT_RE$1), \")*\")\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\",\n 5: \"keyword\",\n 7: \"title.class.inherited\"\n }\n },\n // class Car\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n\n ]\n };\n\n const CLASS_REFERENCE = {\n relevance: 0,\n match:\n regex.either(\n // Hard coded exceptions\n /\\bJSON/,\n // Float32Array, OutT\n /\\b[A-Z][a-z]+([A-Z][a-z]*|\\d)*/,\n // CSSFactory, CSSFactoryT\n /\\b[A-Z]{2,}([A-Z][a-z]+|\\d)+([A-Z][a-z]*)*/,\n // FPs, FPsT\n /\\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\\d)*([A-Z][a-z]*)*/,\n // P\n // single letters are not highlighted\n // BLAH\n // this will be flagged as a UPPER_CASE_CONSTANT instead\n ),\n className: \"title.class\",\n keywords: {\n _: [\n // se we still get relevance credit for JS library classes\n ...TYPES,\n ...ERROR_TYPES\n ]\n }\n };\n\n const USE_STRICT = {\n label: \"use_strict\",\n className: 'meta',\n relevance: 10,\n begin: /^\\s*['\"]use (strict|asm)['\"]/\n };\n\n const FUNCTION_DEFINITION = {\n variants: [\n {\n match: [\n /function/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\s*\\()/\n ]\n },\n // anonymous function\n {\n match: [\n /function/,\n /\\s*(?=\\()/\n ]\n }\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n label: \"func.def\",\n contains: [ PARAMS ],\n illegal: /%/\n };\n\n const UPPER_CASE_CONSTANT = {\n relevance: 0,\n match: /\\b[A-Z][A-Z_0-9]+\\b/,\n className: \"variable.constant\"\n };\n\n function noneOf(list) {\n return regex.concat(\"(?!\", list.join(\"|\"), \")\");\n }\n\n const FUNCTION_CALL = {\n match: regex.concat(\n /\\b/,\n noneOf([\n ...BUILT_IN_GLOBALS,\n \"super\",\n \"import\"\n ].map(x => `${x}\\\\s*\\\\(`)),\n IDENT_RE$1, regex.lookahead(/\\s*\\(/)),\n className: \"title.function\",\n relevance: 0\n };\n\n const PROPERTY_ACCESS = {\n begin: regex.concat(/\\./, regex.lookahead(\n regex.concat(IDENT_RE$1, /(?![0-9A-Za-z$_(])/)\n )),\n end: IDENT_RE$1,\n excludeBegin: true,\n keywords: \"prototype\",\n className: \"property\",\n relevance: 0\n };\n\n const GETTER_OR_SETTER = {\n match: [\n /get|set/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\()/\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n { // eat to avoid empty params\n begin: /\\(\\)/\n },\n PARAMS\n ]\n };\n\n const FUNC_LEAD_IN_RE = '(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*' +\n '\\\\)[^()]*)*' +\n '\\\\)[^()]*)*' +\n '\\\\)|' + hljs.UNDERSCORE_IDENT_RE + ')\\\\s*=>';\n\n const FUNCTION_VARIABLE = {\n match: [\n /const|var|let/, /\\s+/,\n IDENT_RE$1, /\\s*/,\n /=\\s*/,\n /(async\\s*)?/, // async is optional\n regex.lookahead(FUNC_LEAD_IN_RE)\n ],\n keywords: \"async\",\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n PARAMS\n ]\n };\n\n return {\n name: 'JavaScript',\n aliases: ['js', 'jsx', 'mjs', 'cjs'],\n keywords: KEYWORDS$1,\n // this will be extended by TypeScript\n exports: { PARAMS_CONTAINS, CLASS_REFERENCE },\n illegal: /#(?![$_A-z])/,\n contains: [\n hljs.SHEBANG({\n label: \"shebang\",\n binary: \"node\",\n relevance: 5\n }),\n USE_STRICT,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n GRAPHQL_TEMPLATE,\n TEMPLATE_STRING,\n COMMENT,\n // Skip numbers when they are part of a variable name\n { match: /\\$\\d+/ },\n NUMBER,\n CLASS_REFERENCE,\n {\n className: 'attr',\n begin: IDENT_RE$1 + regex.lookahead(':'),\n relevance: 0\n },\n FUNCTION_VARIABLE,\n { // \"value\" container\n begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n keywords: 'return throw case',\n relevance: 0,\n contains: [\n COMMENT,\n hljs.REGEXP_MODE,\n {\n className: 'function',\n // we have to count the parens to make sure we actually have the\n // correct bounding ( ) before the =>. There could be any number of\n // sub-expressions inside also surrounded by parens.\n begin: FUNC_LEAD_IN_RE,\n returnBegin: true,\n end: '\\\\s*=>',\n contains: [\n {\n className: 'params',\n variants: [\n {\n begin: hljs.UNDERSCORE_IDENT_RE,\n relevance: 0\n },\n {\n className: null,\n begin: /\\(\\s*\\)/,\n skip: true\n },\n {\n begin: /(\\s*)\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n }\n ]\n }\n ]\n },\n { // could be a comma delimited list of params to a function call\n begin: /,/,\n relevance: 0\n },\n {\n match: /\\s+/,\n relevance: 0\n },\n { // JSX\n variants: [\n { begin: FRAGMENT.begin, end: FRAGMENT.end },\n { match: XML_SELF_CLOSING },\n {\n begin: XML_TAG.begin,\n // we carefully check the opening tag to see if it truly\n // is a tag and not a false positive\n 'on:begin': XML_TAG.isTrulyOpeningTag,\n end: XML_TAG.end\n }\n ],\n subLanguage: 'xml',\n contains: [\n {\n begin: XML_TAG.begin,\n end: XML_TAG.end,\n skip: true,\n contains: ['self']\n }\n ]\n }\n ],\n },\n FUNCTION_DEFINITION,\n {\n // prevent this from getting swallowed up by function\n // since they appear \"function like\"\n beginKeywords: \"while if switch catch for\"\n },\n {\n // we have to count the parens to make sure we actually have the correct\n // bounding ( ). There could be any number of sub-expressions inside\n // also surrounded by parens.\n begin: '\\\\b(?!function)' + hljs.UNDERSCORE_IDENT_RE +\n '\\\\(' + // first parens\n '[^()]*(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*' +\n '\\\\)[^()]*)*' +\n '\\\\)[^()]*)*' +\n '\\\\)\\\\s*\\\\{', // end parens\n returnBegin:true,\n label: \"func.def\",\n contains: [\n PARAMS,\n hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1, className: \"title.function\" })\n ]\n },\n // catch ... so it won't trigger the property rule below\n {\n match: /\\.\\.\\./,\n relevance: 0\n },\n PROPERTY_ACCESS,\n // hack: prevents detection of keywords in some circumstances\n // .keyword()\n // $keyword = x\n {\n match: '\\\\$' + IDENT_RE$1,\n relevance: 0\n },\n {\n match: [ /\\bconstructor(?=\\s*\\()/ ],\n className: { 1: \"title.function\" },\n contains: [ PARAMS ]\n },\n FUNCTION_CALL,\n UPPER_CASE_CONSTANT,\n CLASS_OR_EXTENDS,\n GETTER_OR_SETTER,\n {\n match: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n }\n ]\n };\n}\n\nexport { javascript as default };\n","export default \"<?php\\n\\n$url = \\\"{{console.requestUrl}}\\\";\\n$curl = curl_init($url);\\n\\ncurl_setopt($curl, CURLOPT_CUSTOMREQUEST, \\\"{{console.method}}\\\");\\ncurl_setopt($curl, CURLOPT_URL, $url);\\ncurl_setopt($curl, CURLOPT_RETURNTRANSFER, true);\\n\\n{% if console.request.meaningfulHeaders.size > 0 -%}\\n# Request headers\\n$headers = array(\\n{%- for header in console.request.meaningfulHeaders %}\\n {% if showSecrets == false and header.secret -%}\\n '{{header.name}}: {{header.hiddenValue}}',\\n {%- else -%}\\n '{{header.name}}: {{header.value}}',\\n {%- endif -%}\\n{%- endfor -%});\\ncurl_setopt($curl, CURLOPT_HTTPHEADER, $headers);\\n{%- endif %}\\n{% if console.request.body != blank %}\\n# Request body\\n{% if console.request.bodyFormat == \\\"raw\\\" -%}\\n$request_body = '{{console.request.body}}';\\n{%- elsif console.request.bodyFormat == \\\"binary\\\" %}\\n$file = fopen(\\\"< path\\\\\\\\to\\\\\\\\{{console.request.binary.name}} >\\\", \\\"r\\\");\\n$request_body = fread($file,filesize(\\\"< path\\\\\\\\to\\\\\\\\{{console.request.binary.name}} >\\\"));\\nfclose($file);\\n{% endif %}\\ncurl_setopt($curl, CURLOPT_POSTFIELDS, $request_body);\\n{% endif %}\\n$resp = curl_exec($curl);\\ncurl_close($curl);\\nvar_dump($resp);\\n?>\"","/*\nLanguage: PHP\nAuthor: Victor Karamzin <Victor.Karamzin@enterra-inc.com>\nContributors: Evgeny Stepanischev <imbolk@gmail.com>, Ivan Sagalaev <maniac@softwaremaniacs.org>\nWebsite: https://www.php.net\nCategory: common\n*/\n\n/**\n * @param {HLJSApi} hljs\n * @returns {LanguageDetail}\n * */\nfunction php(hljs) {\n const regex = hljs.regex;\n // negative look-ahead tries to avoid matching patterns that are not\n // Perl at all like $ident$, @ident@, etc.\n const NOT_PERL_ETC = /(?![A-Za-z0-9])(?![$])/;\n const IDENT_RE = regex.concat(\n /[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*/,\n NOT_PERL_ETC);\n // Will not detect camelCase classes\n const PASCAL_CASE_CLASS_NAME_RE = regex.concat(\n /(\\\\?[A-Z][a-z0-9_\\x7f-\\xff]+|\\\\?[A-Z]+(?=[A-Z][a-z0-9_\\x7f-\\xff])){1,}/,\n NOT_PERL_ETC);\n const VARIABLE = {\n scope: 'variable',\n match: '\\\\$+' + IDENT_RE,\n };\n const PREPROCESSOR = {\n scope: 'meta',\n variants: [\n { begin: /<\\?php/, relevance: 10 }, // boost for obvious PHP\n { begin: /<\\?=/ },\n // less relevant per PSR-1 which says not to use short-tags\n { begin: /<\\?/, relevance: 0.1 },\n { begin: /\\?>/ } // end php tag\n ]\n };\n const SUBST = {\n scope: 'subst',\n variants: [\n { begin: /\\$\\w+/ },\n {\n begin: /\\{\\$/,\n end: /\\}/\n }\n ]\n };\n const SINGLE_QUOTED = hljs.inherit(hljs.APOS_STRING_MODE, { illegal: null, });\n const DOUBLE_QUOTED = hljs.inherit(hljs.QUOTE_STRING_MODE, {\n illegal: null,\n contains: hljs.QUOTE_STRING_MODE.contains.concat(SUBST),\n });\n\n const HEREDOC = {\n begin: /<<<[ \\t]*(?:(\\w+)|\"(\\w+)\")\\n/,\n end: /[ \\t]*(\\w+)\\b/,\n contains: hljs.QUOTE_STRING_MODE.contains.concat(SUBST),\n 'on:begin': (m, resp) => { resp.data._beginMatch = m[1] || m[2]; },\n 'on:end': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch(); },\n };\n\n const NOWDOC = hljs.END_SAME_AS_BEGIN({\n begin: /<<<[ \\t]*'(\\w+)'\\n/,\n end: /[ \\t]*(\\w+)\\b/,\n });\n // list of valid whitespaces because non-breaking space might be part of a IDENT_RE\n const WHITESPACE = '[ \\t\\n]';\n const STRING = {\n scope: 'string',\n variants: [\n DOUBLE_QUOTED,\n SINGLE_QUOTED,\n HEREDOC,\n NOWDOC\n ]\n };\n const NUMBER = {\n scope: 'number',\n variants: [\n { begin: `\\\\b0[bB][01]+(?:_[01]+)*\\\\b` }, // Binary w/ underscore support\n { begin: `\\\\b0[oO][0-7]+(?:_[0-7]+)*\\\\b` }, // Octals w/ underscore support\n { begin: `\\\\b0[xX][\\\\da-fA-F]+(?:_[\\\\da-fA-F]+)*\\\\b` }, // Hex w/ underscore support\n // Decimals w/ underscore support, with optional fragments and scientific exponent (e) suffix.\n { begin: `(?:\\\\b\\\\d+(?:_\\\\d+)*(\\\\.(?:\\\\d+(?:_\\\\d+)*))?|\\\\B\\\\.\\\\d+)(?:[eE][+-]?\\\\d+)?` }\n ],\n relevance: 0\n };\n const LITERALS = [\n \"false\",\n \"null\",\n \"true\"\n ];\n const KWS = [\n // Magic constants:\n // <https://www.php.net/manual/en/language.constants.predefined.php>\n \"__CLASS__\",\n \"__DIR__\",\n \"__FILE__\",\n \"__FUNCTION__\",\n \"__COMPILER_HALT_OFFSET__\",\n \"__LINE__\",\n \"__METHOD__\",\n \"__NAMESPACE__\",\n \"__TRAIT__\",\n // Function that look like language construct or language construct that look like function:\n // List of keywords that may not require parenthesis\n \"die\",\n \"echo\",\n \"exit\",\n \"include\",\n \"include_once\",\n \"print\",\n \"require\",\n \"require_once\",\n // These are not language construct (function) but operate on the currently-executing function and can access the current symbol table\n // 'compact extract func_get_arg func_get_args func_num_args get_called_class get_parent_class ' +\n // Other keywords:\n // <https://www.php.net/manual/en/reserved.php>\n // <https://www.php.net/manual/en/language.types.type-juggling.php>\n \"array\",\n \"abstract\",\n \"and\",\n \"as\",\n \"binary\",\n \"bool\",\n \"boolean\",\n \"break\",\n \"callable\",\n \"case\",\n \"catch\",\n \"class\",\n \"clone\",\n \"const\",\n \"continue\",\n \"declare\",\n \"default\",\n \"do\",\n \"double\",\n \"else\",\n \"elseif\",\n \"empty\",\n \"enddeclare\",\n \"endfor\",\n \"endforeach\",\n \"endif\",\n \"endswitch\",\n \"endwhile\",\n \"enum\",\n \"eval\",\n \"extends\",\n \"final\",\n \"finally\",\n \"float\",\n \"for\",\n \"foreach\",\n \"from\",\n \"global\",\n \"goto\",\n \"if\",\n \"implements\",\n \"instanceof\",\n \"insteadof\",\n \"int\",\n \"integer\",\n \"interface\",\n \"isset\",\n \"iterable\",\n \"list\",\n \"match|0\",\n \"mixed\",\n \"new\",\n \"never\",\n \"object\",\n \"or\",\n \"private\",\n \"protected\",\n \"public\",\n \"readonly\",\n \"real\",\n \"return\",\n \"string\",\n \"switch\",\n \"throw\",\n \"trait\",\n \"try\",\n \"unset\",\n \"use\",\n \"var\",\n \"void\",\n \"while\",\n \"xor\",\n \"yield\"\n ];\n\n const BUILT_INS = [\n // Standard PHP library:\n // <https://www.php.net/manual/en/book.spl.php>\n \"Error|0\",\n \"AppendIterator\",\n \"ArgumentCountError\",\n \"ArithmeticError\",\n \"ArrayIterator\",\n \"ArrayObject\",\n \"AssertionError\",\n \"BadFunctionCallException\",\n \"BadMethodCallException\",\n \"CachingIterator\",\n \"CallbackFilterIterator\",\n \"CompileError\",\n \"Countable\",\n \"DirectoryIterator\",\n \"DivisionByZeroError\",\n \"DomainException\",\n \"EmptyIterator\",\n \"ErrorException\",\n \"Exception\",\n \"FilesystemIterator\",\n \"FilterIterator\",\n \"GlobIterator\",\n \"InfiniteIterator\",\n \"InvalidArgumentException\",\n \"IteratorIterator\",\n \"LengthException\",\n \"LimitIterator\",\n \"LogicException\",\n \"MultipleIterator\",\n \"NoRewindIterator\",\n \"OutOfBoundsException\",\n \"OutOfRangeException\",\n \"OuterIterator\",\n \"OverflowException\",\n \"ParentIterator\",\n \"ParseError\",\n \"RangeException\",\n \"RecursiveArrayIterator\",\n \"RecursiveCachingIterator\",\n \"RecursiveCallbackFilterIterator\",\n \"RecursiveDirectoryIterator\",\n \"RecursiveFilterIterator\",\n \"RecursiveIterator\",\n \"RecursiveIteratorIterator\",\n \"RecursiveRegexIterator\",\n \"RecursiveTreeIterator\",\n \"RegexIterator\",\n \"RuntimeException\",\n \"SeekableIterator\",\n \"SplDoublyLinkedList\",\n \"SplFileInfo\",\n \"SplFileObject\",\n \"SplFixedArray\",\n \"SplHeap\",\n \"SplMaxHeap\",\n \"SplMinHeap\",\n \"SplObjectStorage\",\n \"SplObserver\",\n \"SplPriorityQueue\",\n \"SplQueue\",\n \"SplStack\",\n \"SplSubject\",\n \"SplTempFileObject\",\n \"TypeError\",\n \"UnderflowException\",\n \"UnexpectedValueException\",\n \"UnhandledMatchError\",\n // Reserved interfaces:\n // <https://www.php.net/manual/en/reserved.interfaces.php>\n \"ArrayAccess\",\n \"BackedEnum\",\n \"Closure\",\n \"Fiber\",\n \"Generator\",\n \"Iterator\",\n \"IteratorAggregate\",\n \"Serializable\",\n \"Stringable\",\n \"Throwable\",\n \"Traversable\",\n \"UnitEnum\",\n \"WeakReference\",\n \"WeakMap\",\n // Reserved classes:\n // <https://www.php.net/manual/en/reserved.classes.php>\n \"Directory\",\n \"__PHP_Incomplete_Class\",\n \"parent\",\n \"php_user_filter\",\n \"self\",\n \"static\",\n \"stdClass\"\n ];\n\n /** Dual-case keywords\n *\n * [\"then\",\"FILE\"] =>\n * [\"then\", \"THEN\", \"FILE\", \"file\"]\n *\n * @param {string[]} items */\n const dualCase = (items) => {\n /** @type string[] */\n const result = [];\n items.forEach(item => {\n result.push(item);\n if (item.toLowerCase() === item) {\n result.push(item.toUpperCase());\n } else {\n result.push(item.toLowerCase());\n }\n });\n return result;\n };\n\n const KEYWORDS = {\n keyword: KWS,\n literal: dualCase(LITERALS),\n built_in: BUILT_INS,\n };\n\n /**\n * @param {string[]} items */\n const normalizeKeywords = (items) => {\n return items.map(item => {\n return item.replace(/\\|\\d+$/, \"\");\n });\n };\n\n const CONSTRUCTOR_CALL = { variants: [\n {\n match: [\n /new/,\n regex.concat(WHITESPACE, \"+\"),\n // to prevent built ins from being confused as the class constructor call\n regex.concat(\"(?!\", normalizeKeywords(BUILT_INS).join(\"\\\\b|\"), \"\\\\b)\"),\n PASCAL_CASE_CLASS_NAME_RE,\n ],\n scope: {\n 1: \"keyword\",\n 4: \"title.class\",\n },\n }\n ] };\n\n const CONSTANT_REFERENCE = regex.concat(IDENT_RE, \"\\\\b(?!\\\\()\");\n\n const LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON = { variants: [\n {\n match: [\n regex.concat(\n /::/,\n regex.lookahead(/(?!class\\b)/)\n ),\n CONSTANT_REFERENCE,\n ],\n scope: { 2: \"variable.constant\", },\n },\n {\n match: [\n /::/,\n /class/,\n ],\n scope: { 2: \"variable.language\", },\n },\n {\n match: [\n PASCAL_CASE_CLASS_NAME_RE,\n regex.concat(\n /::/,\n regex.lookahead(/(?!class\\b)/)\n ),\n CONSTANT_REFERENCE,\n ],\n scope: {\n 1: \"title.class\",\n 3: \"variable.constant\",\n },\n },\n {\n match: [\n PASCAL_CASE_CLASS_NAME_RE,\n regex.concat(\n \"::\",\n regex.lookahead(/(?!class\\b)/)\n ),\n ],\n scope: { 1: \"title.class\", },\n },\n {\n match: [\n PASCAL_CASE_CLASS_NAME_RE,\n /::/,\n /class/,\n ],\n scope: {\n 1: \"title.class\",\n 3: \"variable.language\",\n },\n }\n ] };\n\n const NAMED_ARGUMENT = {\n scope: 'attr',\n match: regex.concat(IDENT_RE, regex.lookahead(':'), regex.lookahead(/(?!::)/)),\n };\n const PARAMS_MODE = {\n relevance: 0,\n begin: /\\(/,\n end: /\\)/,\n keywords: KEYWORDS,\n contains: [\n NAMED_ARGUMENT,\n VARIABLE,\n LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\n hljs.C_BLOCK_COMMENT_MODE,\n STRING,\n NUMBER,\n CONSTRUCTOR_CALL,\n ],\n };\n const FUNCTION_INVOKE = {\n relevance: 0,\n match: [\n /\\b/,\n // to prevent keywords from being confused as the function title\n regex.concat(\"(?!fn\\\\b|function\\\\b|\", normalizeKeywords(KWS).join(\"\\\\b|\"), \"|\", normalizeKeywords(BUILT_INS).join(\"\\\\b|\"), \"\\\\b)\"),\n IDENT_RE,\n regex.concat(WHITESPACE, \"*\"),\n regex.lookahead(/(?=\\()/)\n ],\n scope: { 3: \"title.function.invoke\", },\n contains: [ PARAMS_MODE ]\n };\n PARAMS_MODE.contains.push(FUNCTION_INVOKE);\n\n const ATTRIBUTE_CONTAINS = [\n NAMED_ARGUMENT,\n LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\n hljs.C_BLOCK_COMMENT_MODE,\n STRING,\n NUMBER,\n CONSTRUCTOR_CALL,\n ];\n\n const ATTRIBUTES = {\n begin: regex.concat(/#\\[\\s*/, PASCAL_CASE_CLASS_NAME_RE),\n beginScope: \"meta\",\n end: /]/,\n endScope: \"meta\",\n keywords: {\n literal: LITERALS,\n keyword: [\n 'new',\n 'array',\n ]\n },\n contains: [\n {\n begin: /\\[/,\n end: /]/,\n keywords: {\n literal: LITERALS,\n keyword: [\n 'new',\n 'array',\n ]\n },\n contains: [\n 'self',\n ...ATTRIBUTE_CONTAINS,\n ]\n },\n ...ATTRIBUTE_CONTAINS,\n {\n scope: 'meta',\n match: PASCAL_CASE_CLASS_NAME_RE\n }\n ]\n };\n\n return {\n case_insensitive: false,\n keywords: KEYWORDS,\n contains: [\n ATTRIBUTES,\n hljs.HASH_COMMENT_MODE,\n hljs.COMMENT('//', '$'),\n hljs.COMMENT(\n '/\\\\*',\n '\\\\*/',\n { contains: [\n {\n scope: 'doctag',\n match: '@[A-Za-z]+'\n }\n ] }\n ),\n {\n match: /__halt_compiler\\(\\);/,\n keywords: '__halt_compiler',\n starts: {\n scope: \"comment\",\n end: hljs.MATCH_NOTHING_RE,\n contains: [\n {\n match: /\\?>/,\n scope: \"meta\",\n endsParent: true\n }\n ]\n }\n },\n PREPROCESSOR,\n {\n scope: 'variable.language',\n match: /\\$this\\b/\n },\n VARIABLE,\n FUNCTION_INVOKE,\n LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\n {\n match: [\n /const/,\n /\\s/,\n IDENT_RE,\n ],\n scope: {\n 1: \"keyword\",\n 3: \"variable.constant\",\n },\n },\n CONSTRUCTOR_CALL,\n {\n scope: 'function',\n relevance: 0,\n beginKeywords: 'fn function',\n end: /[;{]/,\n excludeEnd: true,\n illegal: '[$%\\\\[]',\n contains: [\n { beginKeywords: 'use', },\n hljs.UNDERSCORE_TITLE_MODE,\n {\n begin: '=>', // No markup, just a relevance booster\n endsParent: true\n },\n {\n scope: 'params',\n begin: '\\\\(',\n end: '\\\\)',\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS,\n contains: [\n 'self',\n VARIABLE,\n LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\n hljs.C_BLOCK_COMMENT_MODE,\n STRING,\n NUMBER\n ]\n },\n ]\n },\n {\n scope: 'class',\n variants: [\n {\n beginKeywords: \"enum\",\n illegal: /[($\"]/\n },\n {\n beginKeywords: \"class interface trait\",\n illegal: /[:($\"]/\n }\n ],\n relevance: 0,\n end: /\\{/,\n excludeEnd: true,\n contains: [\n { beginKeywords: 'extends implements' },\n hljs.UNDERSCORE_TITLE_MODE\n ]\n },\n // both use and namespace still use \"old style\" rules (vs multi-match)\n // because the namespace name can include `\\` and we still want each\n // element to be treated as its own *individual* title\n {\n beginKeywords: 'namespace',\n relevance: 0,\n end: ';',\n illegal: /[.']/,\n contains: [ hljs.inherit(hljs.UNDERSCORE_TITLE_MODE, { scope: \"title.class\" }) ]\n },\n {\n beginKeywords: 'use',\n relevance: 0,\n end: ';',\n contains: [\n // TODO: title.function vs title.class\n {\n match: /\\b(as|const|function)\\b/,\n scope: \"keyword\"\n },\n // TODO: could be title.class or title.function\n hljs.UNDERSCORE_TITLE_MODE\n ]\n },\n STRING,\n NUMBER,\n ]\n };\n}\n\nexport { php as default };\n","export default \"import urllib.request, json\\n\\ntry:\\n url = \\\"{{console.requestUrl}}\\\"\\n\\n hdr = {\\n # Request headers\\n{%- for header in console.request.meaningfulHeaders %}\\n {% if showSecrets == false and header.secret -%}\\n '{{header.name}}': '{{header.hiddenValue}}',\\n {%- else -%}\\n '{{header.name}}': '{{header.value}}',\\n {%- endif -%}\\n{%- endfor %}\\n }\\n{% if console.request.body != blank %}\\n # Request body\\n{%- if console.request.bodyFormat == \\\"raw\\\" %}\\n data = {{request.body}}\\n data = json.dumps(data)\\n req = urllib.request.Request(url, headers=hdr, data = bytes(data.encode(\\\"utf-8\\\")))\\n{%- elsif console.request.bodyFormat == \\\"binary\\\" %}\\n with open('< path/to/{{request.binary.name}} >', 'rb') as f:\\n data = f.read()\\n req = urllib.request.Request(url, headers=hdr, data = bytes(data))\\n{%- endif %}\\n{% else %}\\n req = urllib.request.Request(url, headers=hdr)\\n{% endif %}\\n req.get_method = lambda: '{{console.method}}'\\n response = urllib.request.urlopen(req)\\n print(response.getcode())\\n print(response.read())\\nexcept Exception as e:\\n print(e)\"","/*\nLanguage: Python\nDescription: Python is an interpreted, object-oriented, high-level programming language with dynamic semantics.\nWebsite: https://www.python.org\nCategory: common\n*/\n\nfunction python(hljs) {\n const regex = hljs.regex;\n const IDENT_RE = /[\\p{XID_Start}_]\\p{XID_Continue}*/u;\n const RESERVED_WORDS = [\n 'and',\n 'as',\n 'assert',\n 'async',\n 'await',\n 'break',\n 'case',\n 'class',\n 'continue',\n 'def',\n 'del',\n 'elif',\n 'else',\n 'except',\n 'finally',\n 'for',\n 'from',\n 'global',\n 'if',\n 'import',\n 'in',\n 'is',\n 'lambda',\n 'match',\n 'nonlocal|10',\n 'not',\n 'or',\n 'pass',\n 'raise',\n 'return',\n 'try',\n 'while',\n 'with',\n 'yield'\n ];\n\n const BUILT_INS = [\n '__import__',\n 'abs',\n 'all',\n 'any',\n 'ascii',\n 'bin',\n 'bool',\n 'breakpoint',\n 'bytearray',\n 'bytes',\n 'callable',\n 'chr',\n 'classmethod',\n 'compile',\n 'complex',\n 'delattr',\n 'dict',\n 'dir',\n 'divmod',\n 'enumerate',\n 'eval',\n 'exec',\n 'filter',\n 'float',\n 'format',\n 'frozenset',\n 'getattr',\n 'globals',\n 'hasattr',\n 'hash',\n 'help',\n 'hex',\n 'id',\n 'input',\n 'int',\n 'isinstance',\n 'issubclass',\n 'iter',\n 'len',\n 'list',\n 'locals',\n 'map',\n 'max',\n 'memoryview',\n 'min',\n 'next',\n 'object',\n 'oct',\n 'open',\n 'ord',\n 'pow',\n 'print',\n 'property',\n 'range',\n 'repr',\n 'reversed',\n 'round',\n 'set',\n 'setattr',\n 'slice',\n 'sorted',\n 'staticmethod',\n 'str',\n 'sum',\n 'super',\n 'tuple',\n 'type',\n 'vars',\n 'zip'\n ];\n\n const LITERALS = [\n '__debug__',\n 'Ellipsis',\n 'False',\n 'None',\n 'NotImplemented',\n 'True'\n ];\n\n // https://docs.python.org/3/library/typing.html\n // TODO: Could these be supplemented by a CamelCase matcher in certain\n // contexts, leaving these remaining only for relevance hinting?\n const TYPES = [\n \"Any\",\n \"Callable\",\n \"Coroutine\",\n \"Dict\",\n \"List\",\n \"Literal\",\n \"Generic\",\n \"Optional\",\n \"Sequence\",\n \"Set\",\n \"Tuple\",\n \"Type\",\n \"Union\"\n ];\n\n const KEYWORDS = {\n $pattern: /[A-Za-z]\\w+|__\\w+__/,\n keyword: RESERVED_WORDS,\n built_in: BUILT_INS,\n literal: LITERALS,\n type: TYPES\n };\n\n const PROMPT = {\n className: 'meta',\n begin: /^(>>>|\\.\\.\\.) /\n };\n\n const SUBST = {\n className: 'subst',\n begin: /\\{/,\n end: /\\}/,\n keywords: KEYWORDS,\n illegal: /#/\n };\n\n const LITERAL_BRACKET = {\n begin: /\\{\\{/,\n relevance: 0\n };\n\n const STRING = {\n className: 'string',\n contains: [ hljs.BACKSLASH_ESCAPE ],\n variants: [\n {\n begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,\n end: /'''/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT\n ],\n relevance: 10\n },\n {\n begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?\"\"\"/,\n end: /\"\"\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT\n ],\n relevance: 10\n },\n {\n begin: /([fF][rR]|[rR][fF]|[fF])'''/,\n end: /'''/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n {\n begin: /([fF][rR]|[rR][fF]|[fF])\"\"\"/,\n end: /\"\"\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n {\n begin: /([uU]|[rR])'/,\n end: /'/,\n relevance: 10\n },\n {\n begin: /([uU]|[rR])\"/,\n end: /\"/,\n relevance: 10\n },\n {\n begin: /([bB]|[bB][rR]|[rR][bB])'/,\n end: /'/\n },\n {\n begin: /([bB]|[bB][rR]|[rR][bB])\"/,\n end: /\"/\n },\n {\n begin: /([fF][rR]|[rR][fF]|[fF])'/,\n end: /'/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n {\n begin: /([fF][rR]|[rR][fF]|[fF])\"/,\n end: /\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ]\n };\n\n // https://docs.python.org/3.9/reference/lexical_analysis.html#numeric-literals\n const digitpart = '[0-9](_?[0-9])*';\n const pointfloat = `(\\\\b(${digitpart}))?\\\\.(${digitpart})|\\\\b(${digitpart})\\\\.`;\n // Whitespace after a number (or any lexical token) is needed only if its absence\n // would change the tokenization\n // https://docs.python.org/3.9/reference/lexical_analysis.html#whitespace-between-tokens\n // We deviate slightly, requiring a word boundary or a keyword\n // to avoid accidentally recognizing *prefixes* (e.g., `0` in `0x41` or `08` or `0__1`)\n const lookahead = `\\\\b|${RESERVED_WORDS.join('|')}`;\n const NUMBER = {\n className: 'number',\n relevance: 0,\n variants: [\n // exponentfloat, pointfloat\n // https://docs.python.org/3.9/reference/lexical_analysis.html#floating-point-literals\n // optionally imaginary\n // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n // Note: no leading \\b because floats can start with a decimal point\n // and we don't want to mishandle e.g. `fn(.5)`,\n // no trailing \\b for pointfloat because it can end with a decimal point\n // and we don't want to mishandle e.g. `0..hex()`; this should be safe\n // because both MUST contain a decimal point and so cannot be confused with\n // the interior part of an identifier\n {\n begin: `(\\\\b(${digitpart})|(${pointfloat}))[eE][+-]?(${digitpart})[jJ]?(?=${lookahead})`\n },\n {\n begin: `(${pointfloat})[jJ]?`\n },\n\n // decinteger, bininteger, octinteger, hexinteger\n // https://docs.python.org/3.9/reference/lexical_analysis.html#integer-literals\n // optionally \"long\" in Python 2\n // https://docs.python.org/2.7/reference/lexical_analysis.html#integer-and-long-integer-literals\n // decinteger is optionally imaginary\n // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n {\n begin: `\\\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${lookahead})`\n },\n {\n begin: `\\\\b0[bB](_?[01])+[lL]?(?=${lookahead})`\n },\n {\n begin: `\\\\b0[oO](_?[0-7])+[lL]?(?=${lookahead})`\n },\n {\n begin: `\\\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${lookahead})`\n },\n\n // imagnumber (digitpart-based)\n // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n {\n begin: `\\\\b(${digitpart})[jJ](?=${lookahead})`\n }\n ]\n };\n const COMMENT_TYPE = {\n className: \"comment\",\n begin: regex.lookahead(/# type:/),\n end: /$/,\n keywords: KEYWORDS,\n contains: [\n { // prevent keywords from coloring `type`\n begin: /# type:/\n },\n // comment within a datatype comment includes no keywords\n {\n begin: /#/,\n end: /\\b\\B/,\n endsWithParent: true\n }\n ]\n };\n const PARAMS = {\n className: 'params',\n variants: [\n // Exclude params in functions without params\n {\n className: \"\",\n begin: /\\(\\s*\\)/,\n skip: true\n },\n {\n begin: /\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS,\n contains: [\n 'self',\n PROMPT,\n NUMBER,\n STRING,\n hljs.HASH_COMMENT_MODE\n ]\n }\n ]\n };\n SUBST.contains = [\n STRING,\n NUMBER,\n PROMPT\n ];\n\n return {\n name: 'Python',\n aliases: [\n 'py',\n 'gyp',\n 'ipython'\n ],\n unicodeRegex: true,\n keywords: KEYWORDS,\n illegal: /(<\\/|\\?)|=>/,\n contains: [\n PROMPT,\n NUMBER,\n {\n // very common convention\n scope: 'variable.language',\n match: /\\bself\\b/\n },\n {\n // eat \"if\" prior to string so that it won't accidentally be\n // labeled as an f-string\n beginKeywords: \"if\",\n relevance: 0\n },\n { match: /\\bor\\b/, scope: \"keyword\" },\n STRING,\n COMMENT_TYPE,\n hljs.HASH_COMMENT_MODE,\n {\n match: [\n /\\bdef/, /\\s+/,\n IDENT_RE,\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [ PARAMS ]\n },\n {\n variants: [\n {\n match: [\n /\\bclass/, /\\s+/,\n IDENT_RE, /\\s*/,\n /\\(\\s*/, IDENT_RE,/\\s*\\)/\n ],\n },\n {\n match: [\n /\\bclass/, /\\s+/,\n IDENT_RE\n ],\n }\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\",\n 6: \"title.class.inherited\",\n }\n },\n {\n className: 'meta',\n begin: /^[\\t ]*@/,\n end: /(?=#)|$/,\n contains: [\n NUMBER,\n PARAMS,\n STRING\n ]\n }\n ]\n };\n}\n\nexport { python as default };\n","export default \"require 'net/http'\\n\\nuri = URI('{{console.requestUrl}}')\\n\\n\\nrequest = Net::HTTP::{{ console.method | downcase | capitalize }}.new(uri.request_uri)\\n\\n# Request headers\\n{% for header in console.request.meaningfulHeaders -%}\\n{% if showSecrets == false and header.secret -%}\\n request['{{header.name}}'] = '{{header.hiddenValue}}'\\n{% else -%}\\n request['{{header.name}}'] = '{{header.value}}'\\n{% endif -%}\\n{% endfor %}\\n{% if console.request.body != blank -%}\\n# Request body\\n{% if console.request.bodyFormat == \\\"raw\\\" -%}\\nrequest.body = '{{ console.request.body }}'\\n{%- elsif console.request.bodyFormat == \\\"binary\\\" -%}\\nrequest.body = File.read(\\\"< path/to/{{console.request.binary.name}} >\\\")\\n{% endif %}\\n{% endif %}\\nresponse = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|\\n http.request(request)\\nend\\n\\nputs response.code\\nputs response.body\\n\"","/*\nLanguage: Ruby\nDescription: Ruby is a dynamic, open source programming language with a focus on simplicity and productivity.\nWebsite: https://www.ruby-lang.org/\nAuthor: Anton Kovalyov <anton@kovalyov.net>\nContributors: Peter Leonov <gojpeg@yandex.ru>, Vasily Polovnyov <vast@whiteants.net>, Loren Segal <lsegal@soen.ca>, Pascal Hurni <phi@ruby-reactive.org>, Cedric Sohrauer <sohrauer@googlemail.com>\nCategory: common, scripting\n*/\n\nfunction ruby(hljs) {\n const regex = hljs.regex;\n const RUBY_METHOD_RE = '([a-zA-Z_]\\\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~`|]|\\\\[\\\\]=?)';\n // TODO: move concepts like CAMEL_CASE into `modes.js`\n const CLASS_NAME_RE = regex.either(\n /\\b([A-Z]+[a-z0-9]+)+/,\n // ends in caps\n /\\b([A-Z]+[a-z0-9]+)+[A-Z]+/,\n )\n ;\n const CLASS_NAME_WITH_NAMESPACE_RE = regex.concat(CLASS_NAME_RE, /(::\\w+)*/);\n // very popular ruby built-ins that one might even assume\n // are actual keywords (despite that not being the case)\n const PSEUDO_KWS = [\n \"include\",\n \"extend\",\n \"prepend\",\n \"public\",\n \"private\",\n \"protected\",\n \"raise\",\n \"throw\"\n ];\n const RUBY_KEYWORDS = {\n \"variable.constant\": [\n \"__FILE__\",\n \"__LINE__\",\n \"__ENCODING__\"\n ],\n \"variable.language\": [\n \"self\",\n \"super\",\n ],\n keyword: [\n \"alias\",\n \"and\",\n \"begin\",\n \"BEGIN\",\n \"break\",\n \"case\",\n \"class\",\n \"defined\",\n \"do\",\n \"else\",\n \"elsif\",\n \"end\",\n \"END\",\n \"ensure\",\n \"for\",\n \"if\",\n \"in\",\n \"module\",\n \"next\",\n \"not\",\n \"or\",\n \"redo\",\n \"require\",\n \"rescue\",\n \"retry\",\n \"return\",\n \"then\",\n \"undef\",\n \"unless\",\n \"until\",\n \"when\",\n \"while\",\n \"yield\",\n ...PSEUDO_KWS\n ],\n built_in: [\n \"proc\",\n \"lambda\",\n \"attr_accessor\",\n \"attr_reader\",\n \"attr_writer\",\n \"define_method\",\n \"private_constant\",\n \"module_function\"\n ],\n literal: [\n \"true\",\n \"false\",\n \"nil\"\n ]\n };\n const YARDOCTAG = {\n className: 'doctag',\n begin: '@[A-Za-z]+'\n };\n const IRB_OBJECT = {\n begin: '#<',\n end: '>'\n };\n const COMMENT_MODES = [\n hljs.COMMENT(\n '#',\n '$',\n { contains: [ YARDOCTAG ] }\n ),\n hljs.COMMENT(\n '^=begin',\n '^=end',\n {\n contains: [ YARDOCTAG ],\n relevance: 10\n }\n ),\n hljs.COMMENT('^__END__', hljs.MATCH_NOTHING_RE)\n ];\n const SUBST = {\n className: 'subst',\n begin: /#\\{/,\n end: /\\}/,\n keywords: RUBY_KEYWORDS\n };\n const STRING = {\n className: 'string',\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n variants: [\n {\n begin: /'/,\n end: /'/\n },\n {\n begin: /\"/,\n end: /\"/\n },\n {\n begin: /`/,\n end: /`/\n },\n {\n begin: /%[qQwWx]?\\(/,\n end: /\\)/\n },\n {\n begin: /%[qQwWx]?\\[/,\n end: /\\]/\n },\n {\n begin: /%[qQwWx]?\\{/,\n end: /\\}/\n },\n {\n begin: /%[qQwWx]?</,\n end: />/\n },\n {\n begin: /%[qQwWx]?\\//,\n end: /\\//\n },\n {\n begin: /%[qQwWx]?%/,\n end: /%/\n },\n {\n begin: /%[qQwWx]?-/,\n end: /-/\n },\n {\n begin: /%[qQwWx]?\\|/,\n end: /\\|/\n },\n // in the following expressions, \\B in the beginning suppresses recognition of ?-sequences\n // where ? is the last character of a preceding identifier, as in: `func?4`\n { begin: /\\B\\?(\\\\\\d{1,3})/ },\n { begin: /\\B\\?(\\\\x[A-Fa-f0-9]{1,2})/ },\n { begin: /\\B\\?(\\\\u\\{?[A-Fa-f0-9]{1,6}\\}?)/ },\n { begin: /\\B\\?(\\\\M-\\\\C-|\\\\M-\\\\c|\\\\c\\\\M-|\\\\M-|\\\\C-\\\\M-)[\\x20-\\x7e]/ },\n { begin: /\\B\\?\\\\(c|C-)[\\x20-\\x7e]/ },\n { begin: /\\B\\?\\\\?\\S/ },\n // heredocs\n {\n // this guard makes sure that we have an entire heredoc and not a false\n // positive (auto-detect, etc.)\n begin: regex.concat(\n /<<[-~]?'?/,\n regex.lookahead(/(\\w+)(?=\\W)[^\\n]*\\n(?:[^\\n]*\\n)*?\\s*\\1\\b/)\n ),\n contains: [\n hljs.END_SAME_AS_BEGIN({\n begin: /(\\w+)/,\n end: /(\\w+)/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ]\n })\n ]\n }\n ]\n };\n\n // Ruby syntax is underdocumented, but this grammar seems to be accurate\n // as of version 2.7.2 (confirmed with (irb and `Ripper.sexp(...)`)\n // https://docs.ruby-lang.org/en/2.7.0/doc/syntax/literals_rdoc.html#label-Numbers\n const decimal = '[1-9](_?[0-9])*|0';\n const digits = '[0-9](_?[0-9])*';\n const NUMBER = {\n className: 'number',\n relevance: 0,\n variants: [\n // decimal integer/float, optionally exponential or rational, optionally imaginary\n { begin: `\\\\b(${decimal})(\\\\.(${digits}))?([eE][+-]?(${digits})|r)?i?\\\\b` },\n\n // explicit decimal/binary/octal/hexadecimal integer,\n // optionally rational and/or imaginary\n { begin: \"\\\\b0[dD][0-9](_?[0-9])*r?i?\\\\b\" },\n { begin: \"\\\\b0[bB][0-1](_?[0-1])*r?i?\\\\b\" },\n { begin: \"\\\\b0[oO][0-7](_?[0-7])*r?i?\\\\b\" },\n { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\\\b\" },\n\n // 0-prefixed implicit octal integer, optionally rational and/or imaginary\n { begin: \"\\\\b0(_?[0-7])+r?i?\\\\b\" }\n ]\n };\n\n const PARAMS = {\n variants: [\n {\n match: /\\(\\)/,\n },\n {\n className: 'params',\n begin: /\\(/,\n end: /(?=\\))/,\n excludeBegin: true,\n endsParent: true,\n keywords: RUBY_KEYWORDS,\n }\n ]\n };\n\n const INCLUDE_EXTEND = {\n match: [\n /(include|extend)\\s+/,\n CLASS_NAME_WITH_NAMESPACE_RE\n ],\n scope: {\n 2: \"title.class\"\n },\n keywords: RUBY_KEYWORDS\n };\n\n const CLASS_DEFINITION = {\n variants: [\n {\n match: [\n /class\\s+/,\n CLASS_NAME_WITH_NAMESPACE_RE,\n /\\s+<\\s+/,\n CLASS_NAME_WITH_NAMESPACE_RE\n ]\n },\n {\n match: [\n /\\b(class|module)\\s+/,\n CLASS_NAME_WITH_NAMESPACE_RE\n ]\n }\n ],\n scope: {\n 2: \"title.class\",\n 4: \"title.class.inherited\"\n },\n keywords: RUBY_KEYWORDS\n };\n\n const UPPER_CASE_CONSTANT = {\n relevance: 0,\n match: /\\b[A-Z][A-Z_0-9]+\\b/,\n className: \"variable.constant\"\n };\n\n const METHOD_DEFINITION = {\n match: [\n /def/, /\\s+/,\n RUBY_METHOD_RE\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n PARAMS\n ]\n };\n\n const OBJECT_CREATION = {\n relevance: 0,\n match: [\n CLASS_NAME_WITH_NAMESPACE_RE,\n /\\.new[. (]/\n ],\n scope: {\n 1: \"title.class\"\n }\n };\n\n // CamelCase\n const CLASS_REFERENCE = {\n relevance: 0,\n match: CLASS_NAME_RE,\n scope: \"title.class\"\n };\n\n const RUBY_DEFAULT_CONTAINS = [\n STRING,\n CLASS_DEFINITION,\n INCLUDE_EXTEND,\n OBJECT_CREATION,\n UPPER_CASE_CONSTANT,\n CLASS_REFERENCE,\n METHOD_DEFINITION,\n {\n // swallow namespace qualifiers before symbols\n begin: hljs.IDENT_RE + '::' },\n {\n className: 'symbol',\n begin: hljs.UNDERSCORE_IDENT_RE + '(!|\\\\?)?:',\n relevance: 0\n },\n {\n className: 'symbol',\n begin: ':(?!\\\\s)',\n contains: [\n STRING,\n { begin: RUBY_METHOD_RE }\n ],\n relevance: 0\n },\n NUMBER,\n {\n // negative-look forward attempts to prevent false matches like:\n // @ident@ or $ident$ that might indicate this is not ruby at all\n className: \"variable\",\n begin: '(\\\\$\\\\W)|((\\\\$|@@?)(\\\\w+))(?=[^@$?])' + `(?![A-Za-z])(?![@$?'])`\n },\n {\n className: 'params',\n begin: /\\|/,\n end: /\\|/,\n excludeBegin: true,\n excludeEnd: true,\n relevance: 0, // this could be a lot of things (in other languages) other than params\n keywords: RUBY_KEYWORDS\n },\n { // regexp container\n begin: '(' + hljs.RE_STARTERS_RE + '|unless)\\\\s*',\n keywords: 'unless',\n contains: [\n {\n className: 'regexp',\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n illegal: /\\n/,\n variants: [\n {\n begin: '/',\n end: '/[a-z]*'\n },\n {\n begin: /%r\\{/,\n end: /\\}[a-z]*/\n },\n {\n begin: '%r\\\\(',\n end: '\\\\)[a-z]*'\n },\n {\n begin: '%r!',\n end: '![a-z]*'\n },\n {\n begin: '%r\\\\[',\n end: '\\\\][a-z]*'\n }\n ]\n }\n ].concat(IRB_OBJECT, COMMENT_MODES),\n relevance: 0\n }\n ].concat(IRB_OBJECT, COMMENT_MODES);\n\n SUBST.contains = RUBY_DEFAULT_CONTAINS;\n PARAMS.contains = RUBY_DEFAULT_CONTAINS;\n\n // >>\n // ?>\n const SIMPLE_PROMPT = \"[>?]>\";\n // irb(main):001:0>\n const DEFAULT_PROMPT = \"[\\\\w#]+\\\\(\\\\w+\\\\):\\\\d+:\\\\d+[>*]\";\n const RVM_PROMPT = \"(\\\\w+-)?\\\\d+\\\\.\\\\d+\\\\.\\\\d+(p\\\\d+)?[^\\\\d][^>]+>\";\n\n const IRB_DEFAULT = [\n {\n begin: /^\\s*=>/,\n starts: {\n end: '$',\n contains: RUBY_DEFAULT_CONTAINS\n }\n },\n {\n className: 'meta.prompt',\n begin: '^(' + SIMPLE_PROMPT + \"|\" + DEFAULT_PROMPT + '|' + RVM_PROMPT + ')(?=[ ])',\n starts: {\n end: '$',\n keywords: RUBY_KEYWORDS,\n contains: RUBY_DEFAULT_CONTAINS\n }\n }\n ];\n\n COMMENT_MODES.unshift(IRB_OBJECT);\n\n return {\n name: 'Ruby',\n aliases: [\n 'rb',\n 'gemspec',\n 'podspec',\n 'thor',\n 'irb'\n ],\n keywords: RUBY_KEYWORDS,\n illegal: /\\/\\*/,\n contains: [ hljs.SHEBANG({ binary: \"ruby\" }) ]\n .concat(IRB_DEFAULT)\n .concat(COMMENT_MODES)\n .concat(RUBY_DEFAULT_CONTAINS)\n };\n}\n\nexport { ruby as default };\n","export default \"import Foundation\\nimport FoundationNetworking\\n\\nlet url = URL(string: \\\"{{console.requestUrl}}\\\") \\nvar request : URLRequest = URLRequest(url: url!)\\nrequest.httpMethod = \\\"{{console.method}}\\\"\\n\\n// Request headers \\nlet headers = [\\n{% for header in console.request.meaningfulHeaders %}\\n {% if showSecrets == false and header.secret -%}\\n \\\"{{header.name}}\\\": \\\"{{header.hiddenValue}}\\\",\\n {%- else -%}\\n \\\"{{header.name}}\\\": \\\"{{header.value}}\\\",\\n {%- endif -%}\\n{%- endfor %}\\n]\\nrequest.allHTTPHeaderFields = headers\\n{% if console.request.body != blank %}\\n// Request body\\n{%- if console.request.bodyFormat == \\\"raw\\\" -%}\\n{%- assign formattedBody = console.request.body | replace:'\\\"','\\\\\\\\\\\"' -%}\\n{%- assign formattedBody = formattedBody | replace: '\\\\r\\\\n', ' ' -%}\\n{%- assign formattedBody = formattedBody | replace: ' ', ' ' %}\\nlet postString = \\\"{{formattedBody}}\\\"\\nrequest.httpBody = postString.data(using: .utf8)\\n{%- elsif console.request.bodyFormat == \\\"binary\\\" %}\\nlet file = \\\"< path/to/{{request.binary.name}} >\\\" \\nvar result = \\\"\\\"\\nif let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first { \\n let fileURL = dir.appendingPathComponent(file) \\n do { \\n result = try String(contentsOf: fileURL, encoding: .utf8) \\n } \\n catch {\\n print(\\\"error\\\")\\n }\\n request.httpBody = result.data(using: .utf8) \\n}\\n{% endif %}\\n{% endif %}\\nlet task = URLSession.shared.dataTask(with: request) { (data, response, error) in\\n\\tif (error != nil) {\\n\\t\\tif let error = error as Error? {\\n\\t\\tprint(error)\\n\\t\\t}\\n\\t} else {\\n\\t\\tif let response = response as? HTTPURLResponse, let responseCode = response.statusCode as Int? {\\n\\t\\t\\tprint(responseCode)\\n\\t\\t}\\n\\t\\tif let data = data, let dataString = String(data: data, encoding: .utf8) {\\n\\t\\t\\tprint(dataString)\\n\\t\\t}\\n\\t}\\n}\\ntask.resume()\\n\\nRunLoop.main.run()\"","/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n if (!re) return null;\n if (typeof re === \"string\") return re;\n\n return re.source;\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction lookahead(re) {\n return concat('(?=', re, ')');\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n const joined = args.map((x) => source(x)).join(\"\");\n return joined;\n}\n\n/**\n * @param { Array<string | RegExp | Object> } args\n * @returns {object}\n */\nfunction stripOptionsFromArgs(args) {\n const opts = args[args.length - 1];\n\n if (typeof opts === 'object' && opts.constructor === Object) {\n args.splice(args.length - 1, 1);\n return opts;\n } else {\n return {};\n }\n}\n\n/** @typedef { {capture?: boolean} } RegexEitherOptions */\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] | [...(RegExp | string)[], RegexEitherOptions]} args\n * @returns {string}\n */\nfunction either(...args) {\n /** @type { object & {capture?: boolean} } */\n const opts = stripOptionsFromArgs(args);\n const joined = '('\n + (opts.capture ? \"\" : \"?:\")\n + args.map((x) => source(x)).join(\"|\") + \")\";\n return joined;\n}\n\nconst keywordWrapper = keyword => concat(\n /\\b/,\n keyword,\n /\\w$/.test(keyword) ? /\\b/ : /\\B/\n);\n\n// Keywords that require a leading dot.\nconst dotKeywords = [\n 'Protocol', // contextual\n 'Type' // contextual\n].map(keywordWrapper);\n\n// Keywords that may have a leading dot.\nconst optionalDotKeywords = [\n 'init',\n 'self'\n].map(keywordWrapper);\n\n// should register as keyword, not type\nconst keywordTypes = [\n 'Any',\n 'Self'\n];\n\n// Regular keywords and literals.\nconst keywords = [\n // strings below will be fed into the regular `keywords` engine while regex\n // will result in additional modes being created to scan for those keywords to\n // avoid conflicts with other rules\n 'actor',\n 'any', // contextual\n 'associatedtype',\n 'async',\n 'await',\n /as\\?/, // operator\n /as!/, // operator\n 'as', // operator\n 'borrowing', // contextual\n 'break',\n 'case',\n 'catch',\n 'class',\n 'consume', // contextual\n 'consuming', // contextual\n 'continue',\n 'convenience', // contextual\n 'copy', // contextual\n 'default',\n 'defer',\n 'deinit',\n 'didSet', // contextual\n 'distributed',\n 'do',\n 'dynamic', // contextual\n 'each',\n 'else',\n 'enum',\n 'extension',\n 'fallthrough',\n /fileprivate\\(set\\)/,\n 'fileprivate',\n 'final', // contextual\n 'for',\n 'func',\n 'get', // contextual\n 'guard',\n 'if',\n 'import',\n 'indirect', // contextual\n 'infix', // contextual\n /init\\?/,\n /init!/,\n 'inout',\n /internal\\(set\\)/,\n 'internal',\n 'in',\n 'is', // operator\n 'isolated', // contextual\n 'nonisolated', // contextual\n 'lazy', // contextual\n 'let',\n 'macro',\n 'mutating', // contextual\n 'nonmutating', // contextual\n /open\\(set\\)/, // contextual\n 'open', // contextual\n 'operator',\n 'optional', // contextual\n 'override', // contextual\n 'package',\n 'postfix', // contextual\n 'precedencegroup',\n 'prefix', // contextual\n /private\\(set\\)/,\n 'private',\n 'protocol',\n /public\\(set\\)/,\n 'public',\n 'repeat',\n 'required', // contextual\n 'rethrows',\n 'return',\n 'set', // contextual\n 'some', // contextual\n 'static',\n 'struct',\n 'subscript',\n 'super',\n 'switch',\n 'throws',\n 'throw',\n /try\\?/, // operator\n /try!/, // operator\n 'try', // operator\n 'typealias',\n /unowned\\(safe\\)/, // contextual\n /unowned\\(unsafe\\)/, // contextual\n 'unowned', // contextual\n 'var',\n 'weak', // contextual\n 'where',\n 'while',\n 'willSet' // contextual\n];\n\n// NOTE: Contextual keywords are reserved only in specific contexts.\n// Ideally, these should be matched using modes to avoid false positives.\n\n// Literals.\nconst literals = [\n 'false',\n 'nil',\n 'true'\n];\n\n// Keywords used in precedence groups.\nconst precedencegroupKeywords = [\n 'assignment',\n 'associativity',\n 'higherThan',\n 'left',\n 'lowerThan',\n 'none',\n 'right'\n];\n\n// Keywords that start with a number sign (#).\n// #(un)available is handled separately.\nconst numberSignKeywords = [\n '#colorLiteral',\n '#column',\n '#dsohandle',\n '#else',\n '#elseif',\n '#endif',\n '#error',\n '#file',\n '#fileID',\n '#fileLiteral',\n '#filePath',\n '#function',\n '#if',\n '#imageLiteral',\n '#keyPath',\n '#line',\n '#selector',\n '#sourceLocation',\n '#warning'\n];\n\n// Global functions in the Standard Library.\nconst builtIns = [\n 'abs',\n 'all',\n 'any',\n 'assert',\n 'assertionFailure',\n 'debugPrint',\n 'dump',\n 'fatalError',\n 'getVaList',\n 'isKnownUniquelyReferenced',\n 'max',\n 'min',\n 'numericCast',\n 'pointwiseMax',\n 'pointwiseMin',\n 'precondition',\n 'preconditionFailure',\n 'print',\n 'readLine',\n 'repeatElement',\n 'sequence',\n 'stride',\n 'swap',\n 'swift_unboxFromSwiftValueWithType',\n 'transcode',\n 'type',\n 'unsafeBitCast',\n 'unsafeDowncast',\n 'withExtendedLifetime',\n 'withUnsafeMutablePointer',\n 'withUnsafePointer',\n 'withVaList',\n 'withoutActuallyEscaping',\n 'zip'\n];\n\n// Valid first characters for operators.\nconst operatorHead = either(\n /[/=\\-+!*%<>&|^~?]/,\n /[\\u00A1-\\u00A7]/,\n /[\\u00A9\\u00AB]/,\n /[\\u00AC\\u00AE]/,\n /[\\u00B0\\u00B1]/,\n /[\\u00B6\\u00BB\\u00BF\\u00D7\\u00F7]/,\n /[\\u2016-\\u2017]/,\n /[\\u2020-\\u2027]/,\n /[\\u2030-\\u203E]/,\n /[\\u2041-\\u2053]/,\n /[\\u2055-\\u205E]/,\n /[\\u2190-\\u23FF]/,\n /[\\u2500-\\u2775]/,\n /[\\u2794-\\u2BFF]/,\n /[\\u2E00-\\u2E7F]/,\n /[\\u3001-\\u3003]/,\n /[\\u3008-\\u3020]/,\n /[\\u3030]/\n);\n\n// Valid characters for operators.\nconst operatorCharacter = either(\n operatorHead,\n /[\\u0300-\\u036F]/,\n /[\\u1DC0-\\u1DFF]/,\n /[\\u20D0-\\u20FF]/,\n /[\\uFE00-\\uFE0F]/,\n /[\\uFE20-\\uFE2F]/\n // TODO: The following characters are also allowed, but the regex isn't supported yet.\n // /[\\u{E0100}-\\u{E01EF}]/u\n);\n\n// Valid operator.\nconst operator = concat(operatorHead, operatorCharacter, '*');\n\n// Valid first characters for identifiers.\nconst identifierHead = either(\n /[a-zA-Z_]/,\n /[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]/,\n /[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]/,\n /[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]/,\n /[\\u1E00-\\u1FFF]/,\n /[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]/,\n /[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]/,\n /[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]/,\n /[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]/,\n /[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]/,\n /[\\uFE47-\\uFEFE\\uFF00-\\uFFFD]/ // Should be /[\\uFE47-\\uFFFD]/, but we have to exclude FEFF.\n // The following characters are also allowed, but the regexes aren't supported yet.\n // /[\\u{10000}-\\u{1FFFD}\\u{20000-\\u{2FFFD}\\u{30000}-\\u{3FFFD}\\u{40000}-\\u{4FFFD}]/u,\n // /[\\u{50000}-\\u{5FFFD}\\u{60000-\\u{6FFFD}\\u{70000}-\\u{7FFFD}\\u{80000}-\\u{8FFFD}]/u,\n // /[\\u{90000}-\\u{9FFFD}\\u{A0000-\\u{AFFFD}\\u{B0000}-\\u{BFFFD}\\u{C0000}-\\u{CFFFD}]/u,\n // /[\\u{D0000}-\\u{DFFFD}\\u{E0000-\\u{EFFFD}]/u\n);\n\n// Valid characters for identifiers.\nconst identifierCharacter = either(\n identifierHead,\n /\\d/,\n /[\\u0300-\\u036F\\u1DC0-\\u1DFF\\u20D0-\\u20FF\\uFE20-\\uFE2F]/\n);\n\n// Valid identifier.\nconst identifier = concat(identifierHead, identifierCharacter, '*');\n\n// Valid type identifier.\nconst typeIdentifier = concat(/[A-Z]/, identifierCharacter, '*');\n\n// Built-in attributes, which are highlighted as keywords.\n// @available is handled separately.\n// https://docs.swift.org/swift-book/documentation/the-swift-programming-language/attributes\nconst keywordAttributes = [\n 'attached',\n 'autoclosure',\n concat(/convention\\(/, either('swift', 'block', 'c'), /\\)/),\n 'discardableResult',\n 'dynamicCallable',\n 'dynamicMemberLookup',\n 'escaping',\n 'freestanding',\n 'frozen',\n 'GKInspectable',\n 'IBAction',\n 'IBDesignable',\n 'IBInspectable',\n 'IBOutlet',\n 'IBSegueAction',\n 'inlinable',\n 'main',\n 'nonobjc',\n 'NSApplicationMain',\n 'NSCopying',\n 'NSManaged',\n concat(/objc\\(/, identifier, /\\)/),\n 'objc',\n 'objcMembers',\n 'propertyWrapper',\n 'requires_stored_property_inits',\n 'resultBuilder',\n 'Sendable',\n 'testable',\n 'UIApplicationMain',\n 'unchecked',\n 'unknown',\n 'usableFromInline',\n 'warn_unqualified_access'\n];\n\n// Contextual keywords used in @available and #(un)available.\nconst availabilityKeywords = [\n 'iOS',\n 'iOSApplicationExtension',\n 'macOS',\n 'macOSApplicationExtension',\n 'macCatalyst',\n 'macCatalystApplicationExtension',\n 'watchOS',\n 'watchOSApplicationExtension',\n 'tvOS',\n 'tvOSApplicationExtension',\n 'swift'\n];\n\n/*\nLanguage: Swift\nDescription: Swift is a general-purpose programming language built using a modern approach to safety, performance, and software design patterns.\nAuthor: Steven Van Impe <steven.vanimpe@icloud.com>\nContributors: Chris Eidhof <chris@eidhof.nl>, Nate Cook <natecook@gmail.com>, Alexander Lichter <manniL@gmx.net>, Richard Gibson <gibson042@github>\nWebsite: https://swift.org\nCategory: common, system\n*/\n\n\n/** @type LanguageFn */\nfunction swift(hljs) {\n const WHITESPACE = {\n match: /\\s+/,\n relevance: 0\n };\n // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID411\n const BLOCK_COMMENT = hljs.COMMENT(\n '/\\\\*',\n '\\\\*/',\n { contains: [ 'self' ] }\n );\n const COMMENTS = [\n hljs.C_LINE_COMMENT_MODE,\n BLOCK_COMMENT\n ];\n\n // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID413\n // https://docs.swift.org/swift-book/ReferenceManual/zzSummaryOfTheGrammar.html\n const DOT_KEYWORD = {\n match: [\n /\\./,\n either(...dotKeywords, ...optionalDotKeywords)\n ],\n className: { 2: \"keyword\" }\n };\n const KEYWORD_GUARD = {\n // Consume .keyword to prevent highlighting properties and methods as keywords.\n match: concat(/\\./, either(...keywords)),\n relevance: 0\n };\n const PLAIN_KEYWORDS = keywords\n .filter(kw => typeof kw === 'string')\n .concat([ \"_|0\" ]); // seems common, so 0 relevance\n const REGEX_KEYWORDS = keywords\n .filter(kw => typeof kw !== 'string') // find regex\n .concat(keywordTypes)\n .map(keywordWrapper);\n const KEYWORD = { variants: [\n {\n className: 'keyword',\n match: either(...REGEX_KEYWORDS, ...optionalDotKeywords)\n }\n ] };\n // find all the regular keywords\n const KEYWORDS = {\n $pattern: either(\n /\\b\\w+/, // regular keywords\n /#\\w+/ // number keywords\n ),\n keyword: PLAIN_KEYWORDS\n .concat(numberSignKeywords),\n literal: literals\n };\n const KEYWORD_MODES = [\n DOT_KEYWORD,\n KEYWORD_GUARD,\n KEYWORD\n ];\n\n // https://github.com/apple/swift/tree/main/stdlib/public/core\n const BUILT_IN_GUARD = {\n // Consume .built_in to prevent highlighting properties and methods.\n match: concat(/\\./, either(...builtIns)),\n relevance: 0\n };\n const BUILT_IN = {\n className: 'built_in',\n match: concat(/\\b/, either(...builtIns), /(?=\\()/)\n };\n const BUILT_INS = [\n BUILT_IN_GUARD,\n BUILT_IN\n ];\n\n // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID418\n const OPERATOR_GUARD = {\n // Prevent -> from being highlighting as an operator.\n match: /->/,\n relevance: 0\n };\n const OPERATOR = {\n className: 'operator',\n relevance: 0,\n variants: [\n { match: operator },\n {\n // dot-operator: only operators that start with a dot are allowed to use dots as\n // characters (..., ...<, .*, etc). So there rule here is: a dot followed by one or more\n // characters that may also include dots.\n match: `\\\\.(\\\\.|${operatorCharacter})+` }\n ]\n };\n const OPERATORS = [\n OPERATOR_GUARD,\n OPERATOR\n ];\n\n // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#grammar_numeric-literal\n // TODO: Update for leading `-` after lookbehind is supported everywhere\n const decimalDigits = '([0-9]_*)+';\n const hexDigits = '([0-9a-fA-F]_*)+';\n const NUMBER = {\n className: 'number',\n relevance: 0,\n variants: [\n // decimal floating-point-literal (subsumes decimal-literal)\n { match: `\\\\b(${decimalDigits})(\\\\.(${decimalDigits}))?` + `([eE][+-]?(${decimalDigits}))?\\\\b` },\n // hexadecimal floating-point-literal (subsumes hexadecimal-literal)\n { match: `\\\\b0x(${hexDigits})(\\\\.(${hexDigits}))?` + `([pP][+-]?(${decimalDigits}))?\\\\b` },\n // octal-literal\n { match: /\\b0o([0-7]_*)+\\b/ },\n // binary-literal\n { match: /\\b0b([01]_*)+\\b/ }\n ]\n };\n\n // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#grammar_string-literal\n const ESCAPED_CHARACTER = (rawDelimiter = \"\") => ({\n className: 'subst',\n variants: [\n { match: concat(/\\\\/, rawDelimiter, /[0\\\\tnr\"']/) },\n { match: concat(/\\\\/, rawDelimiter, /u\\{[0-9a-fA-F]{1,8}\\}/) }\n ]\n });\n const ESCAPED_NEWLINE = (rawDelimiter = \"\") => ({\n className: 'subst',\n match: concat(/\\\\/, rawDelimiter, /[\\t ]*(?:[\\r\\n]|\\r\\n)/)\n });\n const INTERPOLATION = (rawDelimiter = \"\") => ({\n className: 'subst',\n label: \"interpol\",\n begin: concat(/\\\\/, rawDelimiter, /\\(/),\n end: /\\)/\n });\n const MULTILINE_STRING = (rawDelimiter = \"\") => ({\n begin: concat(rawDelimiter, /\"\"\"/),\n end: concat(/\"\"\"/, rawDelimiter),\n contains: [\n ESCAPED_CHARACTER(rawDelimiter),\n ESCAPED_NEWLINE(rawDelimiter),\n INTERPOLATION(rawDelimiter)\n ]\n });\n const SINGLE_LINE_STRING = (rawDelimiter = \"\") => ({\n begin: concat(rawDelimiter, /\"/),\n end: concat(/\"/, rawDelimiter),\n contains: [\n ESCAPED_CHARACTER(rawDelimiter),\n INTERPOLATION(rawDelimiter)\n ]\n });\n const STRING = {\n className: 'string',\n variants: [\n MULTILINE_STRING(),\n MULTILINE_STRING(\"#\"),\n MULTILINE_STRING(\"##\"),\n MULTILINE_STRING(\"###\"),\n SINGLE_LINE_STRING(),\n SINGLE_LINE_STRING(\"#\"),\n SINGLE_LINE_STRING(\"##\"),\n SINGLE_LINE_STRING(\"###\")\n ]\n };\n\n const REGEXP_CONTENTS = [\n hljs.BACKSLASH_ESCAPE,\n {\n begin: /\\[/,\n end: /\\]/,\n relevance: 0,\n contains: [ hljs.BACKSLASH_ESCAPE ]\n }\n ];\n\n const BARE_REGEXP_LITERAL = {\n begin: /\\/[^\\s](?=[^/\\n]*\\/)/,\n end: /\\//,\n contains: REGEXP_CONTENTS\n };\n\n const EXTENDED_REGEXP_LITERAL = (rawDelimiter) => {\n const begin = concat(rawDelimiter, /\\//);\n const end = concat(/\\//, rawDelimiter);\n return {\n begin,\n end,\n contains: [\n ...REGEXP_CONTENTS,\n {\n scope: \"comment\",\n begin: `#(?!.*${end})`,\n end: /$/,\n },\n ],\n };\n };\n\n // https://docs.swift.org/swift-book/documentation/the-swift-programming-language/lexicalstructure/#Regular-Expression-Literals\n const REGEXP = {\n scope: \"regexp\",\n variants: [\n EXTENDED_REGEXP_LITERAL('###'),\n EXTENDED_REGEXP_LITERAL('##'),\n EXTENDED_REGEXP_LITERAL('#'),\n BARE_REGEXP_LITERAL\n ]\n };\n\n // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID412\n const QUOTED_IDENTIFIER = { match: concat(/`/, identifier, /`/) };\n const IMPLICIT_PARAMETER = {\n className: 'variable',\n match: /\\$\\d+/\n };\n const PROPERTY_WRAPPER_PROJECTION = {\n className: 'variable',\n match: `\\\\$${identifierCharacter}+`\n };\n const IDENTIFIERS = [\n QUOTED_IDENTIFIER,\n IMPLICIT_PARAMETER,\n PROPERTY_WRAPPER_PROJECTION\n ];\n\n // https://docs.swift.org/swift-book/ReferenceManual/Attributes.html\n const AVAILABLE_ATTRIBUTE = {\n match: /(@|#(un)?)available/,\n scope: 'keyword',\n starts: { contains: [\n {\n begin: /\\(/,\n end: /\\)/,\n keywords: availabilityKeywords,\n contains: [\n ...OPERATORS,\n NUMBER,\n STRING\n ]\n }\n ] }\n };\n\n const KEYWORD_ATTRIBUTE = {\n scope: 'keyword',\n match: concat(/@/, either(...keywordAttributes), lookahead(either(/\\(/, /\\s+/))),\n };\n\n const USER_DEFINED_ATTRIBUTE = {\n scope: 'meta',\n match: concat(/@/, identifier)\n };\n\n const ATTRIBUTES = [\n AVAILABLE_ATTRIBUTE,\n KEYWORD_ATTRIBUTE,\n USER_DEFINED_ATTRIBUTE\n ];\n\n // https://docs.swift.org/swift-book/ReferenceManual/Types.html\n const TYPE = {\n match: lookahead(/\\b[A-Z]/),\n relevance: 0,\n contains: [\n { // Common Apple frameworks, for relevance boost\n className: 'type',\n match: concat(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/, identifierCharacter, '+')\n },\n { // Type identifier\n className: 'type',\n match: typeIdentifier,\n relevance: 0\n },\n { // Optional type\n match: /[?!]+/,\n relevance: 0\n },\n { // Variadic parameter\n match: /\\.\\.\\./,\n relevance: 0\n },\n { // Protocol composition\n match: concat(/\\s+&\\s+/, lookahead(typeIdentifier)),\n relevance: 0\n }\n ]\n };\n const GENERIC_ARGUMENTS = {\n begin: /</,\n end: />/,\n keywords: KEYWORDS,\n contains: [\n ...COMMENTS,\n ...KEYWORD_MODES,\n ...ATTRIBUTES,\n OPERATOR_GUARD,\n TYPE\n ]\n };\n TYPE.contains.push(GENERIC_ARGUMENTS);\n\n // https://docs.swift.org/swift-book/ReferenceManual/Expressions.html#ID552\n // Prevents element names from being highlighted as keywords.\n const TUPLE_ELEMENT_NAME = {\n match: concat(identifier, /\\s*:/),\n keywords: \"_|0\",\n relevance: 0\n };\n // Matches tuples as well as the parameter list of a function type.\n const TUPLE = {\n begin: /\\(/,\n end: /\\)/,\n relevance: 0,\n keywords: KEYWORDS,\n contains: [\n 'self',\n TUPLE_ELEMENT_NAME,\n ...COMMENTS,\n REGEXP,\n ...KEYWORD_MODES,\n ...BUILT_INS,\n ...OPERATORS,\n NUMBER,\n STRING,\n ...IDENTIFIERS,\n ...ATTRIBUTES,\n TYPE\n ]\n };\n\n const GENERIC_PARAMETERS = {\n begin: /</,\n end: />/,\n keywords: 'repeat each',\n contains: [\n ...COMMENTS,\n TYPE\n ]\n };\n const FUNCTION_PARAMETER_NAME = {\n begin: either(\n lookahead(concat(identifier, /\\s*:/)),\n lookahead(concat(identifier, /\\s+/, identifier, /\\s*:/))\n ),\n end: /:/,\n relevance: 0,\n contains: [\n {\n className: 'keyword',\n match: /\\b_\\b/\n },\n {\n className: 'params',\n match: identifier\n }\n ]\n };\n const FUNCTION_PARAMETERS = {\n begin: /\\(/,\n end: /\\)/,\n keywords: KEYWORDS,\n contains: [\n FUNCTION_PARAMETER_NAME,\n ...COMMENTS,\n ...KEYWORD_MODES,\n ...OPERATORS,\n NUMBER,\n STRING,\n ...ATTRIBUTES,\n TYPE,\n TUPLE\n ],\n endsParent: true,\n illegal: /[\"']/\n };\n // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID362\n // https://docs.swift.org/swift-book/documentation/the-swift-programming-language/declarations/#Macro-Declaration\n const FUNCTION_OR_MACRO = {\n match: [\n /(func|macro)/,\n /\\s+/,\n either(QUOTED_IDENTIFIER.match, identifier, operator)\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n GENERIC_PARAMETERS,\n FUNCTION_PARAMETERS,\n WHITESPACE\n ],\n illegal: [\n /\\[/,\n /%/\n ]\n };\n\n // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID375\n // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID379\n const INIT_SUBSCRIPT = {\n match: [\n /\\b(?:subscript|init[?!]?)/,\n /\\s*(?=[<(])/,\n ],\n className: { 1: \"keyword\" },\n contains: [\n GENERIC_PARAMETERS,\n FUNCTION_PARAMETERS,\n WHITESPACE\n ],\n illegal: /\\[|%/\n };\n // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID380\n const OPERATOR_DECLARATION = {\n match: [\n /operator/,\n /\\s+/,\n operator\n ],\n className: {\n 1: \"keyword\",\n 3: \"title\"\n }\n };\n\n // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID550\n const PRECEDENCEGROUP = {\n begin: [\n /precedencegroup/,\n /\\s+/,\n typeIdentifier\n ],\n className: {\n 1: \"keyword\",\n 3: \"title\"\n },\n contains: [ TYPE ],\n keywords: [\n ...precedencegroupKeywords,\n ...literals\n ],\n end: /}/\n };\n\n const TYPE_DECLARATION = {\n begin: [\n /(struct|protocol|class|extension|enum|actor)/,\n /\\s+/,\n identifier,\n /\\s*/,\n ],\n beginScope: {\n 1: \"keyword\",\n 3: \"title.class\"\n },\n keywords: KEYWORDS,\n contains: [\n GENERIC_PARAMETERS,\n ...KEYWORD_MODES,\n {\n begin: /:/,\n end: /\\{/,\n keywords: KEYWORDS,\n contains: [\n {\n scope: \"title.class.inherited\",\n match: typeIdentifier,\n },\n ...KEYWORD_MODES,\n ],\n relevance: 0,\n },\n ]\n };\n\n // Add supported submodes to string interpolation.\n for (const variant of STRING.variants) {\n const interpolation = variant.contains.find(mode => mode.label === \"interpol\");\n // TODO: Interpolation can contain any expression, so there's room for improvement here.\n interpolation.keywords = KEYWORDS;\n const submodes = [\n ...KEYWORD_MODES,\n ...BUILT_INS,\n ...OPERATORS,\n NUMBER,\n STRING,\n ...IDENTIFIERS\n ];\n interpolation.contains = [\n ...submodes,\n {\n begin: /\\(/,\n end: /\\)/,\n contains: [\n 'self',\n ...submodes\n ]\n }\n ];\n }\n\n return {\n name: 'Swift',\n keywords: KEYWORDS,\n contains: [\n ...COMMENTS,\n FUNCTION_OR_MACRO,\n INIT_SUBSCRIPT,\n TYPE_DECLARATION,\n OPERATOR_DECLARATION,\n PRECEDENCEGROUP,\n {\n beginKeywords: 'import',\n end: /$/,\n contains: [ ...COMMENTS ],\n relevance: 0\n },\n REGEXP,\n ...KEYWORD_MODES,\n ...BUILT_INS,\n ...OPERATORS,\n NUMBER,\n STRING,\n ...IDENTIFIERS,\n ...ATTRIBUTES,\n TYPE,\n TUPLE\n ]\n };\n}\n\nexport { swift as default };\n","/*\nLanguage: Rust\nAuthor: Andrey Vlasovskikh <andrey.vlasovskikh@gmail.com>\nContributors: Roman Shmatov <romanshmatov@gmail.com>, Kasper Andersen <kma_untrusted@protonmail.com>\nWebsite: https://www.rust-lang.org\nCategory: common, system\n*/\n\n/** @type LanguageFn */\n\nfunction rust(hljs) {\n const regex = hljs.regex;\n // ============================================\n // Added to support the r# keyword, which is a raw identifier in Rust.\n const RAW_IDENTIFIER = /(r#)?/;\n const UNDERSCORE_IDENT_RE = regex.concat(RAW_IDENTIFIER, hljs.UNDERSCORE_IDENT_RE);\n const IDENT_RE = regex.concat(RAW_IDENTIFIER, hljs.IDENT_RE);\n // ============================================\n const FUNCTION_INVOKE = {\n className: \"title.function.invoke\",\n relevance: 0,\n begin: regex.concat(\n /\\b/,\n /(?!let|for|while|if|else|match\\b)/,\n IDENT_RE,\n regex.lookahead(/\\s*\\(/))\n };\n const NUMBER_SUFFIX = '([ui](8|16|32|64|128|size)|f(32|64))\\?';\n const KEYWORDS = [\n \"abstract\",\n \"as\",\n \"async\",\n \"await\",\n \"become\",\n \"box\",\n \"break\",\n \"const\",\n \"continue\",\n \"crate\",\n \"do\",\n \"dyn\",\n \"else\",\n \"enum\",\n \"extern\",\n \"false\",\n \"final\",\n \"fn\",\n \"for\",\n \"if\",\n \"impl\",\n \"in\",\n \"let\",\n \"loop\",\n \"macro\",\n \"match\",\n \"mod\",\n \"move\",\n \"mut\",\n \"override\",\n \"priv\",\n \"pub\",\n \"ref\",\n \"return\",\n \"self\",\n \"Self\",\n \"static\",\n \"struct\",\n \"super\",\n \"trait\",\n \"true\",\n \"try\",\n \"type\",\n \"typeof\",\n \"union\",\n \"unsafe\",\n \"unsized\",\n \"use\",\n \"virtual\",\n \"where\",\n \"while\",\n \"yield\"\n ];\n const LITERALS = [\n \"true\",\n \"false\",\n \"Some\",\n \"None\",\n \"Ok\",\n \"Err\"\n ];\n const BUILTINS = [\n // functions\n 'drop ',\n // traits\n \"Copy\",\n \"Send\",\n \"Sized\",\n \"Sync\",\n \"Drop\",\n \"Fn\",\n \"FnMut\",\n \"FnOnce\",\n \"ToOwned\",\n \"Clone\",\n \"Debug\",\n \"PartialEq\",\n \"PartialOrd\",\n \"Eq\",\n \"Ord\",\n \"AsRef\",\n \"AsMut\",\n \"Into\",\n \"From\",\n \"Default\",\n \"Iterator\",\n \"Extend\",\n \"IntoIterator\",\n \"DoubleEndedIterator\",\n \"ExactSizeIterator\",\n \"SliceConcatExt\",\n \"ToString\",\n // macros\n \"assert!\",\n \"assert_eq!\",\n \"bitflags!\",\n \"bytes!\",\n \"cfg!\",\n \"col!\",\n \"concat!\",\n \"concat_idents!\",\n \"debug_assert!\",\n \"debug_assert_eq!\",\n \"env!\",\n \"eprintln!\",\n \"panic!\",\n \"file!\",\n \"format!\",\n \"format_args!\",\n \"include_bytes!\",\n \"include_str!\",\n \"line!\",\n \"local_data_key!\",\n \"module_path!\",\n \"option_env!\",\n \"print!\",\n \"println!\",\n \"select!\",\n \"stringify!\",\n \"try!\",\n \"unimplemented!\",\n \"unreachable!\",\n \"vec!\",\n \"write!\",\n \"writeln!\",\n \"macro_rules!\",\n \"assert_ne!\",\n \"debug_assert_ne!\"\n ];\n const TYPES = [\n \"i8\",\n \"i16\",\n \"i32\",\n \"i64\",\n \"i128\",\n \"isize\",\n \"u8\",\n \"u16\",\n \"u32\",\n \"u64\",\n \"u128\",\n \"usize\",\n \"f32\",\n \"f64\",\n \"str\",\n \"char\",\n \"bool\",\n \"Box\",\n \"Option\",\n \"Result\",\n \"String\",\n \"Vec\"\n ];\n return {\n name: 'Rust',\n aliases: [ 'rs' ],\n keywords: {\n $pattern: hljs.IDENT_RE + '!?',\n type: TYPES,\n keyword: KEYWORDS,\n literal: LITERALS,\n built_in: BUILTINS\n },\n illegal: '</',\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.COMMENT('/\\\\*', '\\\\*/', { contains: [ 'self' ] }),\n hljs.inherit(hljs.QUOTE_STRING_MODE, {\n begin: /b?\"/,\n illegal: null\n }),\n {\n className: 'string',\n variants: [\n { begin: /b?r(#*)\"(.|\\n)*?\"\\1(?!#)/ },\n { begin: /b?'\\\\?(x\\w{2}|u\\w{4}|U\\w{8}|.)'/ }\n ]\n },\n {\n className: 'symbol',\n begin: /'[a-zA-Z_][a-zA-Z0-9_]*/\n },\n {\n className: 'number',\n variants: [\n { begin: '\\\\b0b([01_]+)' + NUMBER_SUFFIX },\n { begin: '\\\\b0o([0-7_]+)' + NUMBER_SUFFIX },\n { begin: '\\\\b0x([A-Fa-f0-9_]+)' + NUMBER_SUFFIX },\n { begin: '\\\\b(\\\\d[\\\\d_]*(\\\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)'\n + NUMBER_SUFFIX }\n ],\n relevance: 0\n },\n {\n begin: [\n /fn/,\n /\\s+/,\n UNDERSCORE_IDENT_RE\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n }\n },\n {\n className: 'meta',\n begin: '#!?\\\\[',\n end: '\\\\]',\n contains: [\n {\n className: 'string',\n begin: /\"/,\n end: /\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE\n ]\n }\n ]\n },\n {\n begin: [\n /let/,\n /\\s+/,\n /(?:mut\\s+)?/,\n UNDERSCORE_IDENT_RE\n ],\n className: {\n 1: \"keyword\",\n 3: \"keyword\",\n 4: \"variable\"\n }\n },\n // must come before impl/for rule later\n {\n begin: [\n /for/,\n /\\s+/,\n UNDERSCORE_IDENT_RE,\n /\\s+/,\n /in/\n ],\n className: {\n 1: \"keyword\",\n 3: \"variable\",\n 5: \"keyword\"\n }\n },\n {\n begin: [\n /type/,\n /\\s+/,\n UNDERSCORE_IDENT_RE\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n {\n begin: [\n /(?:trait|enum|struct|union|impl|for)/,\n /\\s+/,\n UNDERSCORE_IDENT_RE\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n {\n begin: hljs.IDENT_RE + '::',\n keywords: {\n keyword: \"Self\",\n built_in: BUILTINS,\n type: TYPES\n }\n },\n {\n className: \"punctuation\",\n begin: '->'\n },\n FUNCTION_INVOKE\n ]\n };\n}\n\nexport { rust as default };\n","/*\nLanguage: JSON\nDescription: JSON (JavaScript Object Notation) is a lightweight data-interchange format.\nAuthor: Ivan Sagalaev <maniac@softwaremaniacs.org>\nWebsite: http://www.json.org\nCategory: common, protocols, web\n*/\n\nfunction json(hljs) {\n const ATTRIBUTE = {\n className: 'attr',\n begin: /\"(\\\\.|[^\\\\\"\\r\\n])*\"(?=\\s*:)/,\n relevance: 1.01\n };\n const PUNCTUATION = {\n match: /[{}[\\],:]/,\n className: \"punctuation\",\n relevance: 0\n };\n const LITERALS = [\n \"true\",\n \"false\",\n \"null\"\n ];\n // NOTE: normally we would rely on `keywords` for this but using a mode here allows us\n // - to use the very tight `illegal: \\S` rule later to flag any other character\n // - as illegal indicating that despite looking like JSON we do not truly have\n // - JSON and thus improve false-positively greatly since JSON will try and claim\n // - all sorts of JSON looking stuff\n const LITERALS_MODE = {\n scope: \"literal\",\n beginKeywords: LITERALS.join(\" \"),\n };\n\n return {\n name: 'JSON',\n aliases: ['jsonc'],\n keywords:{\n literal: LITERALS,\n },\n contains: [\n ATTRIBUTE,\n PUNCTUATION,\n hljs.QUOTE_STRING_MODE,\n LITERALS_MODE,\n hljs.C_NUMBER_MODE,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ],\n illegal: '\\\\S'\n };\n}\n\nexport { json as default };\n","import hljs from 'highlight.js/lib/core';\nimport * as curlTemplate from '@/assets/templates/curl.liquid?raw';\nimport shell from 'highlight.js/lib/languages/shell';\nimport * as csharpTemplate from '@/assets/templates/csharp.liquid?raw';\nimport csharp from 'highlight.js/lib/languages/csharp';\nimport * as httpTemplate from '@/assets/templates/http.liquid?raw';\nimport http from 'highlight.js/lib/languages/http';\nimport * as javaTemplate from '@/assets/templates/java.liquid?raw';\nimport java from 'highlight.js/lib/languages/java';\nimport * as javascriptTemplate from '@/assets/templates/javascript.liquid?raw';\nimport javascript from 'highlight.js/lib/languages/javascript';\nimport * as phpTemplate from '@/assets/templates/php.liquid?raw';\nimport php from 'highlight.js/lib/languages/php';\nimport * as pythonTemplate from '@/assets/templates/python.liquid?raw';\nimport python from 'highlight.js/lib/languages/python';\nimport * as rubyTemplate from '@/assets/templates/ruby.liquid?raw';\nimport ruby from 'highlight.js/lib/languages/ruby';\nimport * as swiftTemplate from '@/assets/templates/swift.liquid?raw';\nimport swift from 'highlight.js/lib/languages/swift';\nimport rust from 'highlight.js/lib/languages/rust'; // TODO\nimport json from 'highlight.js/lib/languages/json';\n\nexport const templates = {\n Curl: curlTemplate.default,\n 'C#': csharpTemplate.default,\n HTTP: httpTemplate.default,\n Java: javaTemplate.default,\n Javascript: javascriptTemplate.default,\n PHP: phpTemplate.default,\n Python: pythonTemplate.default,\n Ruby: rubyTemplate.default,\n Swift: swiftTemplate.default,\n};\n\nexport function registerLanguagesForHighlight() {\n hljs.registerLanguage('shell', shell);\n hljs.registerLanguage('csharp', csharp);\n hljs.registerLanguage('http', http);\n hljs.registerLanguage('java', java);\n hljs.registerLanguage('javascript', javascript);\n hljs.registerLanguage('php', php);\n hljs.registerLanguage('python', python);\n hljs.registerLanguage('ruby', ruby);\n hljs.registerLanguage('rust', rust);\n hljs.registerLanguage('swift', swift);\n hljs.registerLanguage('json', json);\n}\n","/*\n * liquidjs@10.17.0, https://github.com/harttle/liquidjs\n * (c) 2016-2024 harttle\n * Released under the MIT License.\n */\nclass Token {\r\n constructor(kind, input, begin, end, file) {\r\n this.kind = kind;\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n }\r\n getText() {\r\n return this.input.slice(this.begin, this.end);\r\n }\r\n getPosition() {\r\n let [row, col] = [1, 1];\r\n for (let i = 0; i < this.begin; i++) {\r\n if (this.input[i] === '\\n') {\r\n row++;\r\n col = 1;\r\n }\r\n else\r\n col++;\r\n }\r\n return [row, col];\r\n }\r\n size() {\r\n return this.end - this.begin;\r\n }\r\n}\n\nclass Drop {\r\n liquidMethodMissing(key) {\r\n return undefined;\r\n }\r\n}\n\nconst toString$1 = Object.prototype.toString;\r\nconst toLowerCase = String.prototype.toLowerCase;\r\nconst hasOwnProperty = Object.hasOwnProperty;\r\nfunction isString(value) {\r\n return typeof value === 'string';\r\n}\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nfunction isFunction(value) {\r\n return typeof value === 'function';\r\n}\r\nfunction isPromise(val) {\r\n return val && isFunction(val.then);\r\n}\r\nfunction isIterator(val) {\r\n return val && isFunction(val.next) && isFunction(val.throw) && isFunction(val.return);\r\n}\r\nfunction escapeRegex(str) {\r\n return str.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\r\n}\r\nfunction stringify(value) {\r\n value = toValue(value);\r\n if (isString(value))\r\n return value;\r\n if (isNil(value))\r\n return '';\r\n if (isArray(value))\r\n return value.map(x => stringify(x)).join('');\r\n return String(value);\r\n}\r\nfunction toEnumerable(val) {\r\n val = toValue(val);\r\n if (isArray(val))\r\n return val;\r\n if (isString(val) && val.length > 0)\r\n return [val];\r\n if (isIterable(val))\r\n return Array.from(val);\r\n if (isObject(val))\r\n return Object.keys(val).map((key) => [key, val[key]]);\r\n return [];\r\n}\r\nfunction toArray(val) {\r\n val = toValue(val);\r\n if (isNil(val))\r\n return [];\r\n if (isArray(val))\r\n return val;\r\n return [val];\r\n}\r\nfunction toValue(value) {\r\n return (value instanceof Drop && isFunction(value.valueOf)) ? value.valueOf() : value;\r\n}\r\nfunction toNumber(value) {\r\n value = Number(value);\r\n return isNaN(value) ? 0 : value;\r\n}\r\nfunction isNumber(value) {\r\n return typeof value === 'number';\r\n}\r\nfunction toLiquid(value) {\r\n if (value && isFunction(value.toLiquid))\r\n return toLiquid(value.toLiquid());\r\n return value;\r\n}\r\nfunction isNil(value) {\r\n return value == null;\r\n}\r\nfunction isUndefined(value) {\r\n return value === undefined;\r\n}\r\nfunction isArray(value) {\r\n // be compatible with IE 8\r\n return toString$1.call(value) === '[object Array]';\r\n}\r\nfunction isIterable(value) {\r\n return isObject(value) && Symbol.iterator in value;\r\n}\r\n/*\r\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\r\n * The iteratee is invoked with three arguments: (value, key, object).\r\n * Iteratee functions may exit iteration early by explicitly returning false.\r\n * @param {Object} object The object to iterate over.\r\n * @param {Function} iteratee The function invoked per iteration.\r\n * @return {Object} Returns object.\r\n */\r\nfunction forOwn(obj, iteratee) {\r\n obj = obj || {};\r\n for (const k in obj) {\r\n if (hasOwnProperty.call(obj, k)) {\r\n if (iteratee(obj[k], k, obj) === false)\r\n break;\r\n }\r\n }\r\n return obj;\r\n}\r\nfunction last(arr) {\r\n return arr[arr.length - 1];\r\n}\r\n/*\r\n * Checks if value is the language type of Object.\r\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\r\n * @param {any} value The value to check.\r\n * @return {Boolean} Returns true if value is an object, else false.\r\n */\r\nfunction isObject(value) {\r\n const type = typeof value;\r\n return value !== null && (type === 'object' || type === 'function');\r\n}\r\nfunction range(start, stop, step = 1) {\r\n const arr = [];\r\n for (let i = start; i < stop; i += step) {\r\n arr.push(i);\r\n }\r\n return arr;\r\n}\r\nfunction padStart(str, length, ch = ' ') {\r\n return pad(str, length, ch, (str, ch) => ch + str);\r\n}\r\nfunction padEnd(str, length, ch = ' ') {\r\n return pad(str, length, ch, (str, ch) => str + ch);\r\n}\r\nfunction pad(str, length, ch, add) {\r\n str = String(str);\r\n let n = length - str.length;\r\n while (n-- > 0)\r\n str = add(str, ch);\r\n return str;\r\n}\r\nfunction identify(val) {\r\n return val;\r\n}\r\nfunction changeCase(str) {\r\n const hasLowerCase = [...str].some(ch => ch >= 'a' && ch <= 'z');\r\n return hasLowerCase ? str.toUpperCase() : str.toLowerCase();\r\n}\r\nfunction ellipsis(str, N) {\r\n return str.length > N ? str.slice(0, N - 3) + '...' : str;\r\n}\r\n// compare string in case-insensitive way, undefined values to the tail\r\nfunction caseInsensitiveCompare(a, b) {\r\n if (a == null && b == null)\r\n return 0;\r\n if (a == null)\r\n return 1;\r\n if (b == null)\r\n return -1;\r\n a = toLowerCase.call(a);\r\n b = toLowerCase.call(b);\r\n if (a < b)\r\n return -1;\r\n if (a > b)\r\n return 1;\r\n return 0;\r\n}\r\nfunction argumentsToValue(fn) {\r\n return function (...args) { return fn.call(this, ...args.map(toValue)); };\r\n}\r\nfunction escapeRegExp(text) {\r\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\r\n}\n\n/**\r\n * targeting ES5, extends Error won't create a proper prototype chain, need a trait to keep track of classes\r\n */\r\nconst TRAIT = '__liquidClass__';\r\nclass LiquidError extends Error {\r\n constructor(err, token) {\r\n /**\r\n * note: for ES5 targeting, `this` will be replaced by return value of Error(),\r\n * thus everything on `this` will be lost, avoid calling `LiquidError` methods here\r\n */\r\n super(typeof err === 'string' ? err : err.message);\r\n this.context = '';\r\n if (typeof err !== 'string')\r\n Object.defineProperty(this, 'originalError', { value: err, enumerable: false });\r\n Object.defineProperty(this, 'token', { value: token, enumerable: false });\r\n Object.defineProperty(this, TRAIT, { value: 'LiquidError', enumerable: false });\r\n }\r\n update() {\r\n Object.defineProperty(this, 'context', { value: mkContext(this.token), enumerable: false });\r\n this.message = mkMessage(this.message, this.token);\r\n this.stack = this.message + '\\n' + this.context +\r\n '\\n' + this.stack;\r\n if (this.originalError)\r\n this.stack += '\\nFrom ' + this.originalError.stack;\r\n }\r\n static is(obj) {\r\n return (obj === null || obj === void 0 ? void 0 : obj[TRAIT]) === 'LiquidError';\r\n }\r\n}\r\nclass TokenizationError extends LiquidError {\r\n constructor(message, token) {\r\n super(message, token);\r\n this.name = 'TokenizationError';\r\n super.update();\r\n }\r\n}\r\nclass ParseError extends LiquidError {\r\n constructor(err, token) {\r\n super(err, token);\r\n this.name = 'ParseError';\r\n this.message = err.message;\r\n super.update();\r\n }\r\n}\r\nclass RenderError extends LiquidError {\r\n constructor(err, tpl) {\r\n super(err, tpl.token);\r\n this.name = 'RenderError';\r\n this.message = err.message;\r\n super.update();\r\n }\r\n static is(obj) {\r\n return obj.name === 'RenderError';\r\n }\r\n}\r\nclass LiquidErrors extends LiquidError {\r\n constructor(errors) {\r\n super(errors[0], errors[0].token);\r\n this.errors = errors;\r\n this.name = 'LiquidErrors';\r\n const s = errors.length > 1 ? 's' : '';\r\n this.message = `${errors.length} error${s} found`;\r\n super.update();\r\n }\r\n static is(obj) {\r\n return obj.name === 'LiquidErrors';\r\n }\r\n}\r\nclass UndefinedVariableError extends LiquidError {\r\n constructor(err, token) {\r\n super(err, token);\r\n this.name = 'UndefinedVariableError';\r\n this.message = err.message;\r\n super.update();\r\n }\r\n}\r\n// only used internally; raised where we don't have token information,\r\n// so it can't be an UndefinedVariableError.\r\nclass InternalUndefinedVariableError extends Error {\r\n constructor(variableName) {\r\n super(`undefined variable: ${variableName}`);\r\n this.name = 'InternalUndefinedVariableError';\r\n this.variableName = variableName;\r\n }\r\n}\r\nclass AssertionError extends Error {\r\n constructor(message) {\r\n super(message);\r\n this.name = 'AssertionError';\r\n this.message = message + '';\r\n }\r\n}\r\nfunction mkContext(token) {\r\n const [line, col] = token.getPosition();\r\n const lines = token.input.split('\\n');\r\n const begin = Math.max(line - 2, 1);\r\n const end = Math.min(line + 3, lines.length);\r\n const context = range(begin, end + 1)\r\n .map(lineNumber => {\r\n const rowIndicator = (lineNumber === line) ? '>> ' : ' ';\r\n const num = padStart(String(lineNumber), String(end).length);\r\n let text = `${rowIndicator}${num}| `;\r\n const colIndicator = lineNumber === line\r\n ? '\\n' + padStart('^', col + text.length)\r\n : '';\r\n text += lines[lineNumber - 1];\r\n text += colIndicator;\r\n return text;\r\n })\r\n .join('\\n');\r\n return context;\r\n}\r\nfunction mkMessage(msg, token) {\r\n if (token.file)\r\n msg += `, file:${token.file}`;\r\n const [line, col] = token.getPosition();\r\n msg += `, line:${line}, col:${col}`;\r\n return msg;\r\n}\n\n// **DO NOT CHANGE THIS FILE**\r\n//\r\n// This file is generated by bin/character-gen.js\r\n// bitmask character types to boost performance\r\nconst TYPES = [0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 4, 4, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 2, 8, 0, 0, 0, 0, 8, 0, 0, 0, 64, 0, 65, 0, 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 0, 0, 2, 2, 2, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0];\r\nconst WORD = 1;\r\nconst BLANK = 4;\r\nconst QUOTE = 8;\r\nconst INLINE_BLANK = 16;\r\nconst NUMBER = 32;\r\nconst SIGN = 64;\r\nconst PUNCTUATION = 128;\r\nfunction isWord(char) {\r\n const code = char.charCodeAt(0);\r\n return code >= 128 ? !TYPES[code] : !!(TYPES[code] & WORD);\r\n}\r\nTYPES[160] = TYPES[5760] = TYPES[6158] = TYPES[8192] = TYPES[8193] = TYPES[8194] = TYPES[8195] = TYPES[8196] = TYPES[8197] = TYPES[8198] = TYPES[8199] = TYPES[8200] = TYPES[8201] = TYPES[8202] = TYPES[8232] = TYPES[8233] = TYPES[8239] = TYPES[8287] = TYPES[12288] = BLANK;\r\nTYPES[8220] = TYPES[8221] = PUNCTUATION;\n\nfunction assert(predicate, message) {\r\n if (!predicate) {\r\n const msg = typeof message === 'function'\r\n ? message()\r\n : (message || `expect ${predicate} to be true`);\r\n throw new AssertionError(msg);\r\n }\r\n}\r\nfunction assertEmpty(predicate, message = `unexpected ${JSON.stringify(predicate)}`) {\r\n assert(!predicate, message);\r\n}\n\nclass NullDrop extends Drop {\r\n equals(value) {\r\n return isNil(toValue(value));\r\n }\r\n gt() {\r\n return false;\r\n }\r\n geq() {\r\n return false;\r\n }\r\n lt() {\r\n return false;\r\n }\r\n leq() {\r\n return false;\r\n }\r\n valueOf() {\r\n return null;\r\n }\r\n}\n\nclass EmptyDrop extends Drop {\r\n equals(value) {\r\n if (value instanceof EmptyDrop)\r\n return false;\r\n value = toValue(value);\r\n if (isString(value) || isArray(value))\r\n return value.length === 0;\r\n if (isObject(value))\r\n return Object.keys(value).length === 0;\r\n return false;\r\n }\r\n gt() {\r\n return false;\r\n }\r\n geq() {\r\n return false;\r\n }\r\n lt() {\r\n return false;\r\n }\r\n leq() {\r\n return false;\r\n }\r\n valueOf() {\r\n return '';\r\n }\r\n}\n\nclass BlankDrop extends EmptyDrop {\r\n equals(value) {\r\n if (value === false)\r\n return true;\r\n if (isNil(toValue(value)))\r\n return true;\r\n if (isString(value))\r\n return /^\\s*$/.test(value);\r\n return super.equals(value);\r\n }\r\n}\n\nclass ForloopDrop extends Drop {\r\n constructor(length, collection, variable) {\r\n super();\r\n this.i = 0;\r\n this.length = length;\r\n this.name = `${variable}-${collection}`;\r\n }\r\n next() {\r\n this.i++;\r\n }\r\n index0() {\r\n return this.i;\r\n }\r\n index() {\r\n return this.i + 1;\r\n }\r\n first() {\r\n return this.i === 0;\r\n }\r\n last() {\r\n return this.i === this.length - 1;\r\n }\r\n rindex() {\r\n return this.length - this.i;\r\n }\r\n rindex0() {\r\n return this.length - this.i - 1;\r\n }\r\n valueOf() {\r\n return JSON.stringify(this);\r\n }\r\n}\n\nclass BlockDrop extends Drop {\r\n constructor(\r\n // the block render from layout template\r\n superBlockRender = () => '') {\r\n super();\r\n this.superBlockRender = superBlockRender;\r\n }\r\n /**\r\n * Provide parent access in child block by\r\n * {{ block.super }}\r\n */\r\n super() {\r\n return this.superBlockRender();\r\n }\r\n}\n\nfunction isComparable(arg) {\r\n return (arg &&\r\n isFunction(arg.equals) &&\r\n isFunction(arg.gt) &&\r\n isFunction(arg.geq) &&\r\n isFunction(arg.lt) &&\r\n isFunction(arg.leq));\r\n}\n\nconst nil = new NullDrop();\r\nconst literalValues = {\r\n 'true': true,\r\n 'false': false,\r\n 'nil': nil,\r\n 'null': nil,\r\n 'empty': new EmptyDrop(),\r\n 'blank': new BlankDrop()\r\n};\n\nfunction createTrie(input) {\r\n const trie = {};\r\n for (const [name, data] of Object.entries(input)) {\r\n let node = trie;\r\n for (let i = 0; i < name.length; i++) {\r\n const c = name[i];\r\n node[c] = node[c] || {};\r\n if (i === name.length - 1 && isWord(name[i])) {\r\n node[c].needBoundary = true;\r\n }\r\n node = node[c];\r\n }\r\n node.data = data;\r\n node.end = true;\r\n }\r\n return trie;\r\n}\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\n\n// convert an async iterator to a Promise\r\nfunction toPromise(val) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n if (!isIterator(val))\r\n return val;\r\n let value;\r\n let done = false;\r\n let next = 'next';\r\n do {\r\n const state = val[next](value);\r\n done = state.done;\r\n value = state.value;\r\n next = 'next';\r\n try {\r\n if (isIterator(value))\r\n value = toPromise(value);\r\n if (isPromise(value))\r\n value = yield value;\r\n }\r\n catch (err) {\r\n next = 'throw';\r\n value = err;\r\n }\r\n } while (!done);\r\n return value;\r\n });\r\n}\r\n// convert an async iterator to a value in a synchronous manner\r\nfunction toValueSync(val) {\r\n if (!isIterator(val))\r\n return val;\r\n let value;\r\n let done = false;\r\n let next = 'next';\r\n do {\r\n const state = val[next](value);\r\n done = state.done;\r\n value = state.value;\r\n next = 'next';\r\n if (isIterator(value)) {\r\n try {\r\n value = toValueSync(value);\r\n }\r\n catch (err) {\r\n next = 'throw';\r\n value = err;\r\n }\r\n }\r\n } while (!done);\r\n return value;\r\n}\n\nconst rFormat = /%([-_0^#:]+)?(\\d+)?([EO])?(.)/;\r\n// prototype extensions\r\nfunction daysInMonth(d) {\r\n const feb = isLeapYear(d) ? 29 : 28;\r\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\r\n}\r\nfunction getDayOfYear(d) {\r\n let num = 0;\r\n for (let i = 0; i < d.getMonth(); ++i) {\r\n num += daysInMonth(d)[i];\r\n }\r\n return num + d.getDate();\r\n}\r\nfunction getWeekOfYear(d, startDay) {\r\n // Skip to startDay of this week\r\n const now = getDayOfYear(d) + (startDay - d.getDay());\r\n // Find the first startDay of the year\r\n const jan1 = new Date(d.getFullYear(), 0, 1);\r\n const then = (7 - jan1.getDay() + startDay);\r\n return String(Math.floor((now - then) / 7) + 1);\r\n}\r\nfunction isLeapYear(d) {\r\n const year = d.getFullYear();\r\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)));\r\n}\r\nfunction ordinal(d) {\r\n const date = d.getDate();\r\n if ([11, 12, 13].includes(date))\r\n return 'th';\r\n switch (date % 10) {\r\n case 1: return 'st';\r\n case 2: return 'nd';\r\n case 3: return 'rd';\r\n default: return 'th';\r\n }\r\n}\r\nfunction century(d) {\r\n return parseInt(d.getFullYear().toString().substring(0, 2), 10);\r\n}\r\n// default to 0\r\nconst padWidths = {\r\n d: 2,\r\n e: 2,\r\n H: 2,\r\n I: 2,\r\n j: 3,\r\n k: 2,\r\n l: 2,\r\n L: 3,\r\n m: 2,\r\n M: 2,\r\n S: 2,\r\n U: 2,\r\n W: 2\r\n};\r\nconst padSpaceChars = new Set('aAbBceklpP');\r\nfunction getTimezoneOffset(d, opts) {\r\n const nOffset = Math.abs(d.getTimezoneOffset());\r\n const h = Math.floor(nOffset / 60);\r\n const m = nOffset % 60;\r\n return (d.getTimezoneOffset() > 0 ? '-' : '+') +\r\n padStart(h, 2, '0') +\r\n (opts.flags[':'] ? ':' : '') +\r\n padStart(m, 2, '0');\r\n}\r\nconst formatCodes = {\r\n a: (d) => d.getShortWeekdayName(),\r\n A: (d) => d.getLongWeekdayName(),\r\n b: (d) => d.getShortMonthName(),\r\n B: (d) => d.getLongMonthName(),\r\n c: (d) => d.toLocaleString(),\r\n C: (d) => century(d),\r\n d: (d) => d.getDate(),\r\n e: (d) => d.getDate(),\r\n H: (d) => d.getHours(),\r\n I: (d) => String(d.getHours() % 12 || 12),\r\n j: (d) => getDayOfYear(d),\r\n k: (d) => d.getHours(),\r\n l: (d) => String(d.getHours() % 12 || 12),\r\n L: (d) => d.getMilliseconds(),\r\n m: (d) => d.getMonth() + 1,\r\n M: (d) => d.getMinutes(),\r\n N: (d, opts) => {\r\n const width = Number(opts.width) || 9;\r\n const str = String(d.getMilliseconds()).slice(0, width);\r\n return padEnd(str, width, '0');\r\n },\r\n p: (d) => (d.getHours() < 12 ? 'AM' : 'PM'),\r\n P: (d) => (d.getHours() < 12 ? 'am' : 'pm'),\r\n q: (d) => ordinal(d),\r\n s: (d) => Math.round(d.getTime() / 1000),\r\n S: (d) => d.getSeconds(),\r\n u: (d) => d.getDay() || 7,\r\n U: (d) => getWeekOfYear(d, 0),\r\n w: (d) => d.getDay(),\r\n W: (d) => getWeekOfYear(d, 1),\r\n x: (d) => d.toLocaleDateString(),\r\n X: (d) => d.toLocaleTimeString(),\r\n y: (d) => d.getFullYear().toString().slice(2, 4),\r\n Y: (d) => d.getFullYear(),\r\n z: getTimezoneOffset,\r\n Z: (d, opts) => d.getTimeZoneName() || getTimezoneOffset(d, opts),\r\n 't': () => '\\t',\r\n 'n': () => '\\n',\r\n '%': () => '%'\r\n};\r\nformatCodes.h = formatCodes.b;\r\nfunction strftime(d, formatStr) {\r\n let output = '';\r\n let remaining = formatStr;\r\n let match;\r\n while ((match = rFormat.exec(remaining))) {\r\n output += remaining.slice(0, match.index);\r\n remaining = remaining.slice(match.index + match[0].length);\r\n output += format(d, match);\r\n }\r\n return output + remaining;\r\n}\r\nfunction format(d, match) {\r\n const [input, flagStr = '', width, modifier, conversion] = match;\r\n const convert = formatCodes[conversion];\r\n if (!convert)\r\n return input;\r\n const flags = {};\r\n for (const flag of flagStr)\r\n flags[flag] = true;\r\n let ret = String(convert(d, { flags, width, modifier }));\r\n let padChar = padSpaceChars.has(conversion) ? ' ' : '0';\r\n let padWidth = width || padWidths[conversion] || 0;\r\n if (flags['^'])\r\n ret = ret.toUpperCase();\r\n else if (flags['#'])\r\n ret = changeCase(ret);\r\n if (flags['_'])\r\n padChar = ' ';\r\n else if (flags['0'])\r\n padChar = '0';\r\n if (flags['-'])\r\n padWidth = 0;\r\n return padStart(ret, padWidth, padChar);\r\n}\n\nfunction getDateTimeFormat() {\r\n return (typeof Intl !== 'undefined' ? Intl.DateTimeFormat : undefined);\r\n}\n\n// one minute in milliseconds\r\nconst OneMinute = 60000;\r\nconst ISO8601_TIMEZONE_PATTERN = /([zZ]|([+-])(\\d{2}):(\\d{2}))$/;\r\nconst monthNames = [\r\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\r\n 'September', 'October', 'November', 'December'\r\n];\r\nconst monthNamesShort = monthNames.map(name => name.slice(0, 3));\r\nconst dayNames = [\r\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\r\n];\r\nconst dayNamesShort = dayNames.map(name => name.slice(0, 3));\r\n/**\r\n * A date implementation with timezone info, just like Ruby date\r\n *\r\n * Implementation:\r\n * - create a Date offset by it's timezone difference, avoiding overriding a bunch of methods\r\n * - rewrite getTimezoneOffset() to trick strftime\r\n */\r\nclass LiquidDate {\r\n constructor(init, locale, timezone) {\r\n this.locale = locale;\r\n this.DateTimeFormat = getDateTimeFormat();\r\n this.date = new Date(init);\r\n this.timezoneFixed = timezone !== undefined;\r\n if (timezone === undefined) {\r\n timezone = this.date.getTimezoneOffset();\r\n }\r\n this.timezoneOffset = isString(timezone) ? LiquidDate.getTimezoneOffset(timezone, this.date) : timezone;\r\n this.timezoneName = isString(timezone) ? timezone : '';\r\n const diff = (this.date.getTimezoneOffset() - this.timezoneOffset) * OneMinute;\r\n const time = this.date.getTime() + diff;\r\n this.displayDate = new Date(time);\r\n }\r\n getTime() {\r\n return this.displayDate.getTime();\r\n }\r\n getMilliseconds() {\r\n return this.displayDate.getMilliseconds();\r\n }\r\n getSeconds() {\r\n return this.displayDate.getSeconds();\r\n }\r\n getMinutes() {\r\n return this.displayDate.getMinutes();\r\n }\r\n getHours() {\r\n return this.displayDate.getHours();\r\n }\r\n getDay() {\r\n return this.displayDate.getDay();\r\n }\r\n getDate() {\r\n return this.displayDate.getDate();\r\n }\r\n getMonth() {\r\n return this.displayDate.getMonth();\r\n }\r\n getFullYear() {\r\n return this.displayDate.getFullYear();\r\n }\r\n toLocaleString(locale, init) {\r\n if (init === null || init === void 0 ? void 0 : init.timeZone) {\r\n return this.date.toLocaleString(locale, init);\r\n }\r\n return this.displayDate.toLocaleString(locale, init);\r\n }\r\n toLocaleTimeString(locale) {\r\n return this.displayDate.toLocaleTimeString(locale);\r\n }\r\n toLocaleDateString(locale) {\r\n return this.displayDate.toLocaleDateString(locale);\r\n }\r\n getTimezoneOffset() {\r\n return this.timezoneOffset;\r\n }\r\n getTimeZoneName() {\r\n if (this.timezoneFixed)\r\n return this.timezoneName;\r\n if (!this.DateTimeFormat)\r\n return;\r\n return this.DateTimeFormat().resolvedOptions().timeZone;\r\n }\r\n getLongMonthName() {\r\n var _a;\r\n return (_a = this.format({ month: 'long' })) !== null && _a !== void 0 ? _a : monthNames[this.getMonth()];\r\n }\r\n getShortMonthName() {\r\n var _a;\r\n return (_a = this.format({ month: 'short' })) !== null && _a !== void 0 ? _a : monthNamesShort[this.getMonth()];\r\n }\r\n getLongWeekdayName() {\r\n var _a;\r\n return (_a = this.format({ weekday: 'long' })) !== null && _a !== void 0 ? _a : dayNames[this.displayDate.getDay()];\r\n }\r\n getShortWeekdayName() {\r\n var _a;\r\n return (_a = this.format({ weekday: 'short' })) !== null && _a !== void 0 ? _a : dayNamesShort[this.displayDate.getDay()];\r\n }\r\n valid() {\r\n return !isNaN(this.getTime());\r\n }\r\n format(options) {\r\n return this.DateTimeFormat && this.DateTimeFormat(this.locale, options).format(this.displayDate);\r\n }\r\n /**\r\n * Create a Date object fixed to it's declared Timezone. Both\r\n * - 2021-08-06T02:29:00.000Z and\r\n * - 2021-08-06T02:29:00.000+08:00\r\n * will always be displayed as\r\n * - 2021-08-06 02:29:00\r\n * regardless timezoneOffset in JavaScript realm\r\n *\r\n * The implementation hack:\r\n * Instead of calling `.getMonth()`/`.getUTCMonth()` respect to `preserveTimezones`,\r\n * we create a different Date to trick strftime, it's both simpler and more performant.\r\n * Given that a template is expected to be parsed fewer times than rendered.\r\n */\r\n static createDateFixedToTimezone(dateString, locale) {\r\n const m = dateString.match(ISO8601_TIMEZONE_PATTERN);\r\n // representing a UTC timestamp\r\n if (m && m[1] === 'Z') {\r\n return new LiquidDate(+new Date(dateString), locale, 0);\r\n }\r\n // has a timezone specified\r\n if (m && m[2] && m[3] && m[4]) {\r\n const [, , sign, hours, minutes] = m;\r\n const offset = (sign === '+' ? -1 : 1) * (parseInt(hours, 10) * 60 + parseInt(minutes, 10));\r\n return new LiquidDate(+new Date(dateString), locale, offset);\r\n }\r\n return new LiquidDate(dateString, locale);\r\n }\r\n static getTimezoneOffset(timezoneName, date) {\r\n const localDateString = date.toLocaleString('en-US', { timeZone: timezoneName });\r\n const utcDateString = date.toLocaleString('en-US', { timeZone: 'UTC' });\r\n const localDate = new Date(localDateString);\r\n const utcDate = new Date(utcDateString);\r\n return (+utcDate - +localDate) / (60 * 1000);\r\n }\r\n}\n\nclass Limiter {\r\n constructor(resource, limit) {\r\n this.base = 0;\r\n this.message = `${resource} limit exceeded`;\r\n this.limit = limit;\r\n }\r\n use(count) {\r\n count = toNumber(count);\r\n assert(this.base + count <= this.limit, this.message);\r\n this.base += count;\r\n }\r\n check(count) {\r\n count = toNumber(count);\r\n assert(count <= this.limit, this.message);\r\n }\r\n}\n\nclass DelimitedToken extends Token {\r\n constructor(kind, [contentBegin, contentEnd], input, begin, end, trimLeft, trimRight, file) {\r\n super(kind, input, begin, end, file);\r\n this.trimLeft = false;\r\n this.trimRight = false;\r\n const tl = input[contentBegin] === '-';\r\n const tr = input[contentEnd - 1] === '-';\r\n let l = tl ? contentBegin + 1 : contentBegin;\r\n let r = tr ? contentEnd - 1 : contentEnd;\r\n while (l < r && (TYPES[input.charCodeAt(l)] & BLANK))\r\n l++;\r\n while (r > l && (TYPES[input.charCodeAt(r - 1)] & BLANK))\r\n r--;\r\n this.contentRange = [l, r];\r\n this.trimLeft = tl || trimLeft;\r\n this.trimRight = tr || trimRight;\r\n }\r\n get content() {\r\n return this.input.slice(this.contentRange[0], this.contentRange[1]);\r\n }\r\n}\n\nclass TagToken extends DelimitedToken {\r\n constructor(input, begin, end, options, file) {\r\n const { trimTagLeft, trimTagRight, tagDelimiterLeft, tagDelimiterRight } = options;\r\n const [valueBegin, valueEnd] = [begin + tagDelimiterLeft.length, end - tagDelimiterRight.length];\r\n super(TokenKind.Tag, [valueBegin, valueEnd], input, begin, end, trimTagLeft, trimTagRight, file);\r\n this.tokenizer = new Tokenizer(input, options.operators, file, this.contentRange);\r\n this.name = this.tokenizer.readTagName();\r\n this.tokenizer.assert(this.name, `illegal tag syntax, tag name expected`);\r\n this.tokenizer.skipBlank();\r\n }\r\n get args() {\r\n return this.tokenizer.input.slice(this.tokenizer.p, this.contentRange[1]);\r\n }\r\n}\n\nclass OutputToken extends DelimitedToken {\r\n constructor(input, begin, end, options, file) {\r\n const { trimOutputLeft, trimOutputRight, outputDelimiterLeft, outputDelimiterRight } = options;\r\n const valueRange = [begin + outputDelimiterLeft.length, end - outputDelimiterRight.length];\r\n super(TokenKind.Output, valueRange, input, begin, end, trimOutputLeft, trimOutputRight, file);\r\n }\r\n}\n\nclass HTMLToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.HTML, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.trimLeft = 0;\r\n this.trimRight = 0;\r\n }\r\n getContent() {\r\n return this.input.slice(this.begin + this.trimLeft, this.end - this.trimRight);\r\n }\r\n}\n\nclass NumberToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.Number, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.content = Number(this.getText());\r\n }\r\n}\n\nclass IdentifierToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.Word, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.content = this.getText();\r\n }\r\n}\n\nclass LiteralToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.Literal, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.literal = this.getText();\r\n this.content = literalValues[this.literal];\r\n }\r\n}\n\nconst operatorPrecedences = {\r\n '==': 2,\r\n '!=': 2,\r\n '>': 2,\r\n '<': 2,\r\n '>=': 2,\r\n '<=': 2,\r\n 'contains': 2,\r\n 'not': 1,\r\n 'and': 0,\r\n 'or': 0\r\n};\r\nconst operatorTypes = {\r\n '==': 0 /* OperatorType.Binary */,\r\n '!=': 0 /* OperatorType.Binary */,\r\n '>': 0 /* OperatorType.Binary */,\r\n '<': 0 /* OperatorType.Binary */,\r\n '>=': 0 /* OperatorType.Binary */,\r\n '<=': 0 /* OperatorType.Binary */,\r\n 'contains': 0 /* OperatorType.Binary */,\r\n 'not': 1 /* OperatorType.Unary */,\r\n 'and': 0 /* OperatorType.Binary */,\r\n 'or': 0 /* OperatorType.Binary */\r\n};\r\nclass OperatorToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.Operator, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.operator = this.getText();\r\n }\r\n getPrecedence() {\r\n const key = this.getText();\r\n return key in operatorPrecedences ? operatorPrecedences[key] : 1;\r\n }\r\n}\n\nclass PropertyAccessToken extends Token {\r\n constructor(variable, props, input, begin, end, file) {\r\n super(TokenKind.PropertyAccess, input, begin, end, file);\r\n this.variable = variable;\r\n this.props = props;\r\n }\r\n}\n\nclass FilterToken extends Token {\r\n constructor(name, args, input, begin, end, file) {\r\n super(TokenKind.Filter, input, begin, end, file);\r\n this.name = name;\r\n this.args = args;\r\n }\r\n}\n\nclass HashToken extends Token {\r\n constructor(input, begin, end, name, value, file) {\r\n super(TokenKind.Hash, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.name = name;\r\n this.value = value;\r\n this.file = file;\r\n }\r\n}\n\nconst rHex = /[\\da-fA-F]/;\r\nconst rOct = /[0-7]/;\r\nconst escapeChar = {\r\n b: '\\b',\r\n f: '\\f',\r\n n: '\\n',\r\n r: '\\r',\r\n t: '\\t',\r\n v: '\\x0B'\r\n};\r\nfunction hexVal(c) {\r\n const code = c.charCodeAt(0);\r\n if (code >= 97)\r\n return code - 87;\r\n if (code >= 65)\r\n return code - 55;\r\n return code - 48;\r\n}\r\nfunction parseStringLiteral(str) {\r\n let ret = '';\r\n for (let i = 1; i < str.length - 1; i++) {\r\n if (str[i] !== '\\\\') {\r\n ret += str[i];\r\n continue;\r\n }\r\n if (escapeChar[str[i + 1]] !== undefined) {\r\n ret += escapeChar[str[++i]];\r\n }\r\n else if (str[i + 1] === 'u') {\r\n let val = 0;\r\n let j = i + 2;\r\n while (j <= i + 5 && rHex.test(str[j])) {\r\n val = val * 16 + hexVal(str[j++]);\r\n }\r\n i = j - 1;\r\n ret += String.fromCharCode(val);\r\n }\r\n else if (!rOct.test(str[i + 1])) {\r\n ret += str[++i];\r\n }\r\n else {\r\n let j = i + 1;\r\n let val = 0;\r\n while (j <= i + 3 && rOct.test(str[j])) {\r\n val = val * 8 + hexVal(str[j++]);\r\n }\r\n i = j - 1;\r\n ret += String.fromCharCode(val);\r\n }\r\n }\r\n return ret;\r\n}\n\nclass QuotedToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.Quoted, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.content = parseStringLiteral(this.getText());\r\n }\r\n}\n\nclass RangeToken extends Token {\r\n constructor(input, begin, end, lhs, rhs, file) {\r\n super(TokenKind.Range, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.lhs = lhs;\r\n this.rhs = rhs;\r\n this.file = file;\r\n }\r\n}\n\n/**\r\n * LiquidTagToken is different from TagToken by not having delimiters `{%` or `%}`\r\n */\r\nclass LiquidTagToken extends DelimitedToken {\r\n constructor(input, begin, end, options, file) {\r\n super(TokenKind.Tag, [begin, end], input, begin, end, false, false, file);\r\n this.tokenizer = new Tokenizer(input, options.operators, file, this.contentRange);\r\n this.name = this.tokenizer.readTagName();\r\n this.tokenizer.assert(this.name, 'illegal liquid tag syntax');\r\n this.tokenizer.skipBlank();\r\n this.args = this.tokenizer.remaining();\r\n }\r\n}\n\n/**\r\n * value expression with optional filters\r\n * e.g.\r\n * {% assign foo=\"bar\" | append: \"coo\" %}\r\n */\r\nclass FilteredValueToken extends Token {\r\n constructor(initial, filters, input, begin, end, file) {\r\n super(TokenKind.FilteredValue, input, begin, end, file);\r\n this.initial = initial;\r\n this.filters = filters;\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n }\r\n}\n\nconst polyfill = {\r\n now: () => Date.now()\r\n};\r\nfunction getPerformance() {\r\n return (typeof global === 'object' && global.performance) ||\r\n (typeof window === 'object' && window.performance) ||\r\n polyfill;\r\n}\n\nclass SimpleEmitter {\r\n constructor() {\r\n this.buffer = '';\r\n }\r\n write(html) {\r\n this.buffer += stringify(html);\r\n }\r\n}\n\nclass StreamedEmitter {\r\n constructor() {\r\n this.buffer = '';\r\n this.stream = null;\r\n throw new Error('streaming not supported in browser');\r\n }\r\n}\n\nclass KeepingTypeEmitter {\r\n constructor() {\r\n this.buffer = '';\r\n }\r\n write(html) {\r\n html = toValue(html);\r\n // This will only preserve the type if the value is isolated.\r\n // I.E:\r\n // {{ my-port }} -> 42\r\n // {{ my-host }}:{{ my-port }} -> 'host:42'\r\n if (typeof html !== 'string' && this.buffer === '') {\r\n this.buffer = html;\r\n }\r\n else {\r\n this.buffer = stringify(this.buffer) + stringify(html);\r\n }\r\n }\r\n}\n\nclass Render {\r\n renderTemplatesToNodeStream(templates, ctx) {\r\n const emitter = new StreamedEmitter();\r\n Promise.resolve().then(() => toPromise(this.renderTemplates(templates, ctx, emitter)))\r\n .then(() => emitter.end(), err => emitter.error(err));\r\n return emitter.stream;\r\n }\r\n *renderTemplates(templates, ctx, emitter) {\r\n if (!emitter) {\r\n emitter = ctx.opts.keepOutputType ? new KeepingTypeEmitter() : new SimpleEmitter();\r\n }\r\n const errors = [];\r\n for (const tpl of templates) {\r\n ctx.renderLimit.check(getPerformance().now());\r\n try {\r\n // if tpl.render supports emitter, it'll return empty `html`\r\n const html = yield tpl.render(ctx, emitter);\r\n // if not, it'll return an `html`, write to the emitter for it\r\n html && emitter.write(html);\r\n if (emitter['break'] || emitter['continue'])\r\n break;\r\n }\r\n catch (e) {\r\n const err = LiquidError.is(e) ? e : new RenderError(e, tpl);\r\n if (ctx.opts.catchAllErrors)\r\n errors.push(err);\r\n else\r\n throw err;\r\n }\r\n }\r\n if (errors.length) {\r\n throw new LiquidErrors(errors);\r\n }\r\n return emitter.buffer;\r\n }\r\n}\n\nclass Expression {\r\n constructor(tokens) {\r\n this.postfix = [...toPostfix(tokens)];\r\n }\r\n *evaluate(ctx, lenient) {\r\n assert(ctx, 'unable to evaluate: context not defined');\r\n const operands = [];\r\n for (const token of this.postfix) {\r\n if (isOperatorToken(token)) {\r\n const r = operands.pop();\r\n let result;\r\n if (operatorTypes[token.operator] === 1 /* OperatorType.Unary */) {\r\n result = yield ctx.opts.operators[token.operator](r, ctx);\r\n }\r\n else {\r\n const l = operands.pop();\r\n result = yield ctx.opts.operators[token.operator](l, r, ctx);\r\n }\r\n operands.push(result);\r\n }\r\n else {\r\n operands.push(yield evalToken(token, ctx, lenient));\r\n }\r\n }\r\n return operands[0];\r\n }\r\n valid() {\r\n return !!this.postfix.length;\r\n }\r\n}\r\nfunction* evalToken(token, ctx, lenient = false) {\r\n if (!token)\r\n return;\r\n if ('content' in token)\r\n return token.content;\r\n if (isPropertyAccessToken(token))\r\n return yield evalPropertyAccessToken(token, ctx, lenient);\r\n if (isRangeToken(token))\r\n return yield evalRangeToken(token, ctx);\r\n}\r\nfunction* evalPropertyAccessToken(token, ctx, lenient) {\r\n const props = [];\r\n for (const prop of token.props) {\r\n props.push((yield evalToken(prop, ctx, false)));\r\n }\r\n try {\r\n if (token.variable) {\r\n const variable = yield evalToken(token.variable, ctx, lenient);\r\n return yield ctx._getFromScope(variable, props);\r\n }\r\n else {\r\n return yield ctx._get(props);\r\n }\r\n }\r\n catch (e) {\r\n if (lenient && e.name === 'InternalUndefinedVariableError')\r\n return null;\r\n throw (new UndefinedVariableError(e, token));\r\n }\r\n}\r\nfunction evalQuotedToken(token) {\r\n return token.content;\r\n}\r\nfunction* evalRangeToken(token, ctx) {\r\n const low = yield evalToken(token.lhs, ctx);\r\n const high = yield evalToken(token.rhs, ctx);\r\n return range(+low, +high + 1);\r\n}\r\nfunction* toPostfix(tokens) {\r\n const ops = [];\r\n for (const token of tokens) {\r\n if (isOperatorToken(token)) {\r\n while (ops.length && ops[ops.length - 1].getPrecedence() > token.getPrecedence()) {\r\n yield ops.pop();\r\n }\r\n ops.push(token);\r\n }\r\n else\r\n yield token;\r\n }\r\n while (ops.length) {\r\n yield ops.pop();\r\n }\r\n}\n\nfunction isTruthy(val, ctx) {\r\n return !isFalsy(val, ctx);\r\n}\r\nfunction isFalsy(val, ctx) {\r\n val = toValue(val);\r\n if (ctx.opts.jsTruthy) {\r\n return !val;\r\n }\r\n else {\r\n return val === false || undefined === val || val === null;\r\n }\r\n}\n\nconst defaultOperators = {\r\n '==': equals,\r\n '!=': (l, r) => !equals(l, r),\r\n '>': (l, r) => {\r\n if (isComparable(l))\r\n return l.gt(r);\r\n if (isComparable(r))\r\n return r.lt(l);\r\n return toValue(l) > toValue(r);\r\n },\r\n '<': (l, r) => {\r\n if (isComparable(l))\r\n return l.lt(r);\r\n if (isComparable(r))\r\n return r.gt(l);\r\n return toValue(l) < toValue(r);\r\n },\r\n '>=': (l, r) => {\r\n if (isComparable(l))\r\n return l.geq(r);\r\n if (isComparable(r))\r\n return r.leq(l);\r\n return toValue(l) >= toValue(r);\r\n },\r\n '<=': (l, r) => {\r\n if (isComparable(l))\r\n return l.leq(r);\r\n if (isComparable(r))\r\n return r.geq(l);\r\n return toValue(l) <= toValue(r);\r\n },\r\n 'contains': (l, r) => {\r\n l = toValue(l);\r\n if (isArray(l))\r\n return l.some((i) => equals(i, r));\r\n if (isFunction(l === null || l === void 0 ? void 0 : l.indexOf))\r\n return l.indexOf(toValue(r)) > -1;\r\n return false;\r\n },\r\n 'not': (v, ctx) => isFalsy(toValue(v), ctx),\r\n 'and': (l, r, ctx) => isTruthy(toValue(l), ctx) && isTruthy(toValue(r), ctx),\r\n 'or': (l, r, ctx) => isTruthy(toValue(l), ctx) || isTruthy(toValue(r), ctx)\r\n};\r\nfunction equals(lhs, rhs) {\r\n if (isComparable(lhs))\r\n return lhs.equals(rhs);\r\n if (isComparable(rhs))\r\n return rhs.equals(lhs);\r\n lhs = toValue(lhs);\r\n rhs = toValue(rhs);\r\n if (isArray(lhs)) {\r\n return isArray(rhs) && arrayEquals(lhs, rhs);\r\n }\r\n return lhs === rhs;\r\n}\r\nfunction arrayEquals(lhs, rhs) {\r\n if (lhs.length !== rhs.length)\r\n return false;\r\n return !lhs.some((value, i) => !equals(value, rhs[i]));\r\n}\n\nclass Node {\r\n constructor(key, value, next, prev) {\r\n this.key = key;\r\n this.value = value;\r\n this.next = next;\r\n this.prev = prev;\r\n }\r\n}\r\nclass LRU {\r\n constructor(limit, size = 0) {\r\n this.limit = limit;\r\n this.size = size;\r\n this.cache = {};\r\n this.head = new Node('HEAD', null, null, null);\r\n this.tail = new Node('TAIL', null, null, null);\r\n this.head.next = this.tail;\r\n this.tail.prev = this.head;\r\n }\r\n write(key, value) {\r\n if (this.cache[key]) {\r\n this.cache[key].value = value;\r\n }\r\n else {\r\n const node = new Node(key, value, this.head.next, this.head);\r\n this.head.next.prev = node;\r\n this.head.next = node;\r\n this.cache[key] = node;\r\n this.size++;\r\n this.ensureLimit();\r\n }\r\n }\r\n read(key) {\r\n if (!this.cache[key])\r\n return;\r\n const { value } = this.cache[key];\r\n this.remove(key);\r\n this.write(key, value);\r\n return value;\r\n }\r\n remove(key) {\r\n const node = this.cache[key];\r\n node.prev.next = node.next;\r\n node.next.prev = node.prev;\r\n delete this.cache[key];\r\n this.size--;\r\n }\r\n clear() {\r\n this.head.next = this.tail;\r\n this.tail.prev = this.head;\r\n this.size = 0;\r\n this.cache = {};\r\n }\r\n ensureLimit() {\r\n if (this.size > this.limit)\r\n this.remove(this.tail.prev.key);\r\n }\r\n}\n\nfunction domResolve(root, path) {\r\n const base = document.createElement('base');\r\n base.href = root;\r\n const head = document.getElementsByTagName('head')[0];\r\n head.insertBefore(base, head.firstChild);\r\n const a = document.createElement('a');\r\n a.href = path;\r\n const resolved = a.href;\r\n head.removeChild(base);\r\n return resolved;\r\n}\r\nfunction resolve(root, filepath, ext) {\r\n if (root.length && last(root) !== '/')\r\n root += '/';\r\n const url = domResolve(root, filepath);\r\n return url.replace(/^(\\w+:\\/\\/[^/]+)(\\/[^?]+)/, (str, origin, path) => {\r\n const last = path.split('/').pop();\r\n if (/\\.\\w+$/.test(last))\r\n return str;\r\n return origin + path + ext;\r\n });\r\n}\r\nfunction readFile(url) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return new Promise((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n xhr.onload = () => {\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n resolve(xhr.responseText);\r\n }\r\n else {\r\n reject(new Error(xhr.statusText));\r\n }\r\n };\r\n xhr.onerror = () => {\r\n reject(new Error('An error occurred whilst receiving the response.'));\r\n };\r\n xhr.open('GET', url);\r\n xhr.send();\r\n });\r\n });\r\n}\r\nfunction readFileSync(url) {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, false);\r\n xhr.send();\r\n if (xhr.status < 200 || xhr.status >= 300) {\r\n throw new Error(xhr.statusText);\r\n }\r\n return xhr.responseText;\r\n}\r\nfunction exists(filepath) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return true;\r\n });\r\n}\r\nfunction existsSync(filepath) {\r\n return true;\r\n}\r\nfunction dirname(filepath) {\r\n return domResolve(filepath, '.');\r\n}\r\nconst sep = '/';\n\nvar fs = /*#__PURE__*/Object.freeze({\n __proto__: null,\n resolve: resolve,\n readFile: readFile,\n readFileSync: readFileSync,\n exists: exists,\n existsSync: existsSync,\n dirname: dirname,\n sep: sep\n});\n\nfunction defaultFilter(value, defaultValue, ...args) {\r\n value = toValue(value);\r\n if (isArray(value) || isString(value))\r\n return value.length ? value : defaultValue;\r\n if (value === false && (new Map(args)).get('allow_false'))\r\n return false;\r\n return isFalsy(value, this.context) ? defaultValue : value;\r\n}\r\nfunction json(value, space = 0) {\r\n return JSON.stringify(value, null, space);\r\n}\r\nfunction inspect(value, space = 0) {\r\n const ancestors = [];\r\n return JSON.stringify(value, function (_key, value) {\r\n if (typeof value !== 'object' || value === null)\r\n return value;\r\n // `this` is the object that value is contained in, i.e., its direct parent.\r\n while (ancestors.length > 0 && ancestors[ancestors.length - 1] !== this)\r\n ancestors.pop();\r\n if (ancestors.includes(value))\r\n return '[Circular]';\r\n ancestors.push(value);\r\n return value;\r\n }, space);\r\n}\r\nfunction to_integer(value) {\r\n return Number(value);\r\n}\r\nconst raw = {\r\n raw: true,\r\n handler: identify\r\n};\r\nvar misc = {\r\n default: defaultFilter,\r\n raw,\r\n jsonify: json,\r\n to_integer,\r\n json,\r\n inspect\r\n};\n\nconst escapeMap = {\r\n '&': '&',\r\n '<': '<',\r\n '>': '>',\r\n '\"': '"',\r\n \"'\": '''\r\n};\r\nconst unescapeMap = {\r\n '&': '&',\r\n '<': '<',\r\n '>': '>',\r\n '"': '\"',\r\n ''': \"'\"\r\n};\r\nfunction escape(str) {\r\n str = stringify(str);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(/&|<|>|\"|'/g, m => escapeMap[m]);\r\n}\r\nfunction xml_escape(str) {\r\n return escape.call(this, str);\r\n}\r\nfunction unescape(str) {\r\n str = stringify(str);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m]);\r\n}\r\nfunction escape_once(str) {\r\n return escape.call(this, unescape.call(this, str));\r\n}\r\nfunction newline_to_br(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(/\\r?\\n/gm, '<br />\\n');\r\n}\r\nfunction strip_html(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(/<script[\\s\\S]*?<\\/script>|<style[\\s\\S]*?<\\/style>|<.*?>|<!--[\\s\\S]*?-->/g, '');\r\n}\n\nvar htmlFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n escape: escape,\n xml_escape: xml_escape,\n escape_once: escape_once,\n newline_to_br: newline_to_br,\n strip_html: strip_html\n});\n\nclass MapFS {\r\n constructor(mapping) {\r\n this.mapping = mapping;\r\n this.sep = '/';\r\n }\r\n exists(filepath) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return this.existsSync(filepath);\r\n });\r\n }\r\n existsSync(filepath) {\r\n return !isNil(this.mapping[filepath]);\r\n }\r\n readFile(filepath) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return this.readFileSync(filepath);\r\n });\r\n }\r\n readFileSync(filepath) {\r\n const content = this.mapping[filepath];\r\n if (isNil(content))\r\n throw new Error(`ENOENT: ${filepath}`);\r\n return content;\r\n }\r\n dirname(filepath) {\r\n const segments = filepath.split(this.sep);\r\n segments.pop();\r\n return segments.join(this.sep);\r\n }\r\n resolve(dir, file, ext) {\r\n file += ext;\r\n if (dir === '.')\r\n return file;\r\n const segments = dir.split(/\\/+/);\r\n for (const segment of file.split(this.sep)) {\r\n if (segment === '.' || segment === '')\r\n continue;\r\n else if (segment === '..') {\r\n if (segments.length > 1 || segments[0] !== '')\r\n segments.pop();\r\n }\r\n else\r\n segments.push(segment);\r\n }\r\n return segments.join(this.sep);\r\n }\r\n}\n\nconst defaultOptions = {\r\n root: ['.'],\r\n layouts: ['.'],\r\n partials: ['.'],\r\n relativeReference: true,\r\n jekyllInclude: false,\r\n keyValueSeparator: ':',\r\n cache: undefined,\r\n extname: '',\r\n fs: fs,\r\n dynamicPartials: true,\r\n jsTruthy: false,\r\n dateFormat: '%A, %B %-e, %Y at %-l:%M %P %z',\r\n locale: '',\r\n trimTagRight: false,\r\n trimTagLeft: false,\r\n trimOutputRight: false,\r\n trimOutputLeft: false,\r\n greedy: true,\r\n tagDelimiterLeft: '{%',\r\n tagDelimiterRight: '%}',\r\n outputDelimiterLeft: '{{',\r\n outputDelimiterRight: '}}',\r\n preserveTimezones: false,\r\n strictFilters: false,\r\n strictVariables: false,\r\n ownPropertyOnly: true,\r\n lenientIf: false,\r\n globals: {},\r\n keepOutputType: false,\r\n operators: defaultOperators,\r\n memoryLimit: Infinity,\r\n parseLimit: Infinity,\r\n renderLimit: Infinity\r\n};\r\nfunction normalize(options) {\r\n var _a, _b;\r\n if (options.hasOwnProperty('root')) {\r\n if (!options.hasOwnProperty('partials'))\r\n options.partials = options.root;\r\n if (!options.hasOwnProperty('layouts'))\r\n options.layouts = options.root;\r\n }\r\n if (options.hasOwnProperty('cache')) {\r\n let cache;\r\n if (typeof options.cache === 'number')\r\n cache = options.cache > 0 ? new LRU(options.cache) : undefined;\r\n else if (typeof options.cache === 'object')\r\n cache = options.cache;\r\n else\r\n cache = options.cache ? new LRU(1024) : undefined;\r\n options.cache = cache;\r\n }\r\n options = Object.assign(Object.assign(Object.assign({}, defaultOptions), (options.jekyllInclude ? { dynamicPartials: false } : {})), options);\r\n if ((!options.fs.dirname || !options.fs.sep) && options.relativeReference) {\r\n console.warn('[LiquidJS] `fs.dirname` and `fs.sep` are required for relativeReference, set relativeReference to `false` to suppress this warning');\r\n options.relativeReference = false;\r\n }\r\n options.root = normalizeDirectoryList(options.root);\r\n options.partials = normalizeDirectoryList(options.partials);\r\n options.layouts = normalizeDirectoryList(options.layouts);\r\n options.outputEscape = options.outputEscape && getOutputEscapeFunction(options.outputEscape);\r\n if (!options.locale) {\r\n options.locale = (_b = (_a = getDateTimeFormat()) === null || _a === void 0 ? void 0 : _a().resolvedOptions().locale) !== null && _b !== void 0 ? _b : 'en-US';\r\n }\r\n if (options.templates) {\r\n options.fs = new MapFS(options.templates);\r\n options.relativeReference = true;\r\n options.root = options.partials = options.layouts = '.';\r\n }\r\n return options;\r\n}\r\nfunction getOutputEscapeFunction(nameOrFunction) {\r\n if (nameOrFunction === 'escape')\r\n return escape;\r\n if (nameOrFunction === 'json')\r\n return misc.json;\r\n assert(isFunction(nameOrFunction), '`outputEscape` need to be of type string or function');\r\n return nameOrFunction;\r\n}\r\nfunction normalizeDirectoryList(value) {\r\n let list = [];\r\n if (isArray(value))\r\n list = value;\r\n if (isString(value))\r\n list = [value];\r\n return list;\r\n}\n\nfunction whiteSpaceCtrl(tokens, options) {\r\n let inRaw = false;\r\n for (let i = 0; i < tokens.length; i++) {\r\n const token = tokens[i];\r\n if (!isDelimitedToken(token))\r\n continue;\r\n if (!inRaw && token.trimLeft) {\r\n trimLeft(tokens[i - 1], options.greedy);\r\n }\r\n if (isTagToken(token)) {\r\n if (token.name === 'raw')\r\n inRaw = true;\r\n else if (token.name === 'endraw')\r\n inRaw = false;\r\n }\r\n if (!inRaw && token.trimRight) {\r\n trimRight(tokens[i + 1], options.greedy);\r\n }\r\n }\r\n}\r\nfunction trimLeft(token, greedy) {\r\n if (!token || !isHTMLToken(token))\r\n return;\r\n const mask = greedy ? BLANK : INLINE_BLANK;\r\n while (TYPES[token.input.charCodeAt(token.end - 1 - token.trimRight)] & mask)\r\n token.trimRight++;\r\n}\r\nfunction trimRight(token, greedy) {\r\n if (!token || !isHTMLToken(token))\r\n return;\r\n const mask = greedy ? BLANK : INLINE_BLANK;\r\n while (TYPES[token.input.charCodeAt(token.begin + token.trimLeft)] & mask)\r\n token.trimLeft++;\r\n if (token.input.charAt(token.begin + token.trimLeft) === '\\n')\r\n token.trimLeft++;\r\n}\n\nclass Tokenizer {\r\n constructor(input, operators = defaultOptions.operators, file, range) {\r\n this.input = input;\r\n this.file = file;\r\n this.rawBeginAt = -1;\r\n this.p = range ? range[0] : 0;\r\n this.N = range ? range[1] : input.length;\r\n this.opTrie = createTrie(operators);\r\n this.literalTrie = createTrie(literalValues);\r\n }\r\n readExpression() {\r\n return new Expression(this.readExpressionTokens());\r\n }\r\n *readExpressionTokens() {\r\n while (this.p < this.N) {\r\n const operator = this.readOperator();\r\n if (operator) {\r\n yield operator;\r\n continue;\r\n }\r\n const operand = this.readValue();\r\n if (operand) {\r\n yield operand;\r\n continue;\r\n }\r\n return;\r\n }\r\n }\r\n readOperator() {\r\n this.skipBlank();\r\n const end = this.matchTrie(this.opTrie);\r\n if (end === -1)\r\n return;\r\n return new OperatorToken(this.input, this.p, (this.p = end), this.file);\r\n }\r\n matchTrie(trie) {\r\n let node = trie;\r\n let i = this.p;\r\n let info;\r\n while (node[this.input[i]] && i < this.N) {\r\n node = node[this.input[i++]];\r\n if (node['end'])\r\n info = node;\r\n }\r\n if (!info)\r\n return -1;\r\n if (info['needBoundary'] && isWord(this.peek(i - this.p)))\r\n return -1;\r\n return i;\r\n }\r\n readFilteredValue() {\r\n const begin = this.p;\r\n const initial = this.readExpression();\r\n this.assert(initial.valid(), `invalid value expression: ${this.snapshot()}`);\r\n const filters = this.readFilters();\r\n return new FilteredValueToken(initial, filters, this.input, begin, this.p, this.file);\r\n }\r\n readFilters() {\r\n const filters = [];\r\n while (true) {\r\n const filter = this.readFilter();\r\n if (!filter)\r\n return filters;\r\n filters.push(filter);\r\n }\r\n }\r\n readFilter() {\r\n this.skipBlank();\r\n if (this.end())\r\n return null;\r\n this.assert(this.peek() === '|', `expected \"|\" before filter`);\r\n this.p++;\r\n const begin = this.p;\r\n const name = this.readIdentifier();\r\n if (!name.size()) {\r\n this.assert(this.end(), `expected filter name`);\r\n return null;\r\n }\r\n const args = [];\r\n this.skipBlank();\r\n if (this.peek() === ':') {\r\n do {\r\n ++this.p;\r\n const arg = this.readFilterArg();\r\n arg && args.push(arg);\r\n this.skipBlank();\r\n this.assert(this.end() || this.peek() === ',' || this.peek() === '|', () => `unexpected character ${this.snapshot()}`);\r\n } while (this.peek() === ',');\r\n }\r\n else if (this.peek() === '|' || this.end()) ;\r\n else {\r\n throw this.error('expected \":\" after filter name');\r\n }\r\n return new FilterToken(name.getText(), args, this.input, begin, this.p, this.file);\r\n }\r\n readFilterArg() {\r\n const key = this.readValue();\r\n if (!key)\r\n return;\r\n this.skipBlank();\r\n if (this.peek() !== ':')\r\n return key;\r\n ++this.p;\r\n const value = this.readValue();\r\n return [key.getText(), value];\r\n }\r\n readTopLevelTokens(options = defaultOptions) {\r\n const tokens = [];\r\n while (this.p < this.N) {\r\n const token = this.readTopLevelToken(options);\r\n tokens.push(token);\r\n }\r\n whiteSpaceCtrl(tokens, options);\r\n return tokens;\r\n }\r\n readTopLevelToken(options) {\r\n const { tagDelimiterLeft, outputDelimiterLeft } = options;\r\n if (this.rawBeginAt > -1)\r\n return this.readEndrawOrRawContent(options);\r\n if (this.match(tagDelimiterLeft))\r\n return this.readTagToken(options);\r\n if (this.match(outputDelimiterLeft))\r\n return this.readOutputToken(options);\r\n return this.readHTMLToken([tagDelimiterLeft, outputDelimiterLeft]);\r\n }\r\n readHTMLToken(stopStrings) {\r\n const begin = this.p;\r\n while (this.p < this.N) {\r\n if (stopStrings.some(str => this.match(str)))\r\n break;\r\n ++this.p;\r\n }\r\n return new HTMLToken(this.input, begin, this.p, this.file);\r\n }\r\n readTagToken(options) {\r\n const { file, input } = this;\r\n const begin = this.p;\r\n if (this.readToDelimiter(options.tagDelimiterRight) === -1) {\r\n throw this.error(`tag ${this.snapshot(begin)} not closed`, begin);\r\n }\r\n const token = new TagToken(input, begin, this.p, options, file);\r\n if (token.name === 'raw')\r\n this.rawBeginAt = begin;\r\n return token;\r\n }\r\n readToDelimiter(delimiter, respectQuoted = false) {\r\n this.skipBlank();\r\n while (this.p < this.N) {\r\n if (respectQuoted && (this.peekType() & QUOTE)) {\r\n this.readQuoted();\r\n continue;\r\n }\r\n ++this.p;\r\n if (this.rmatch(delimiter))\r\n return this.p;\r\n }\r\n return -1;\r\n }\r\n readOutputToken(options = defaultOptions) {\r\n const { file, input } = this;\r\n const { outputDelimiterRight } = options;\r\n const begin = this.p;\r\n if (this.readToDelimiter(outputDelimiterRight, true) === -1) {\r\n throw this.error(`output ${this.snapshot(begin)} not closed`, begin);\r\n }\r\n return new OutputToken(input, begin, this.p, options, file);\r\n }\r\n readEndrawOrRawContent(options) {\r\n const { tagDelimiterLeft, tagDelimiterRight } = options;\r\n const begin = this.p;\r\n let leftPos = this.readTo(tagDelimiterLeft) - tagDelimiterLeft.length;\r\n while (this.p < this.N) {\r\n if (this.readIdentifier().getText() !== 'endraw') {\r\n leftPos = this.readTo(tagDelimiterLeft) - tagDelimiterLeft.length;\r\n continue;\r\n }\r\n while (this.p <= this.N) {\r\n if (this.rmatch(tagDelimiterRight)) {\r\n const end = this.p;\r\n if (begin === leftPos) {\r\n this.rawBeginAt = -1;\r\n return new TagToken(this.input, begin, end, options, this.file);\r\n }\r\n else {\r\n this.p = leftPos;\r\n return new HTMLToken(this.input, begin, leftPos, this.file);\r\n }\r\n }\r\n if (this.rmatch(tagDelimiterLeft))\r\n break;\r\n this.p++;\r\n }\r\n }\r\n throw this.error(`raw ${this.snapshot(this.rawBeginAt)} not closed`, begin);\r\n }\r\n readLiquidTagTokens(options = defaultOptions) {\r\n const tokens = [];\r\n while (this.p < this.N) {\r\n const token = this.readLiquidTagToken(options);\r\n token && tokens.push(token);\r\n }\r\n return tokens;\r\n }\r\n readLiquidTagToken(options) {\r\n this.skipBlank();\r\n if (this.end())\r\n return;\r\n const begin = this.p;\r\n this.readToDelimiter('\\n');\r\n const end = this.p;\r\n return new LiquidTagToken(this.input, begin, end, options, this.file);\r\n }\r\n error(msg, pos = this.p) {\r\n return new TokenizationError(msg, new IdentifierToken(this.input, pos, this.N, this.file));\r\n }\r\n assert(pred, msg, pos) {\r\n if (!pred)\r\n throw this.error(typeof msg === 'function' ? msg() : msg, pos);\r\n }\r\n snapshot(begin = this.p) {\r\n return JSON.stringify(ellipsis(this.input.slice(begin, this.N), 32));\r\n }\r\n /**\r\n * @deprecated use #readIdentifier instead\r\n */\r\n readWord() {\r\n return this.readIdentifier();\r\n }\r\n readIdentifier() {\r\n this.skipBlank();\r\n const begin = this.p;\r\n while (!this.end() && isWord(this.peek()))\r\n ++this.p;\r\n return new IdentifierToken(this.input, begin, this.p, this.file);\r\n }\r\n readNonEmptyIdentifier() {\r\n const id = this.readIdentifier();\r\n return id.size() ? id : undefined;\r\n }\r\n readTagName() {\r\n this.skipBlank();\r\n // Handle inline comment tags\r\n if (this.input[this.p] === '#')\r\n return this.input.slice(this.p, ++this.p);\r\n return this.readIdentifier().getText();\r\n }\r\n readHashes(jekyllStyle) {\r\n const hashes = [];\r\n while (true) {\r\n const hash = this.readHash(jekyllStyle);\r\n if (!hash)\r\n return hashes;\r\n hashes.push(hash);\r\n }\r\n }\r\n readHash(jekyllStyle) {\r\n this.skipBlank();\r\n if (this.peek() === ',')\r\n ++this.p;\r\n const begin = this.p;\r\n const name = this.readNonEmptyIdentifier();\r\n if (!name)\r\n return;\r\n let value;\r\n this.skipBlank();\r\n const sep = isString(jekyllStyle) ? jekyllStyle : (jekyllStyle ? '=' : ':');\r\n if (this.peek() === sep) {\r\n ++this.p;\r\n value = this.readValue();\r\n }\r\n return new HashToken(this.input, begin, this.p, name, value, this.file);\r\n }\r\n remaining() {\r\n return this.input.slice(this.p, this.N);\r\n }\r\n advance(step = 1) {\r\n this.p += step;\r\n }\r\n end() {\r\n return this.p >= this.N;\r\n }\r\n readTo(end) {\r\n while (this.p < this.N) {\r\n ++this.p;\r\n if (this.rmatch(end))\r\n return this.p;\r\n }\r\n return -1;\r\n }\r\n readValue() {\r\n this.skipBlank();\r\n const begin = this.p;\r\n const variable = this.readLiteral() || this.readQuoted() || this.readRange() || this.readNumber();\r\n const props = this.readProperties(!variable);\r\n if (!props.length)\r\n return variable;\r\n return new PropertyAccessToken(variable, props, this.input, begin, this.p);\r\n }\r\n readScopeValue() {\r\n this.skipBlank();\r\n const begin = this.p;\r\n const props = this.readProperties();\r\n if (!props.length)\r\n return undefined;\r\n return new PropertyAccessToken(undefined, props, this.input, begin, this.p);\r\n }\r\n readProperties(isBegin = true) {\r\n const props = [];\r\n while (true) {\r\n if (this.peek() === '[') {\r\n this.p++;\r\n const prop = this.readValue() || new IdentifierToken(this.input, this.p, this.p, this.file);\r\n this.assert(this.readTo(']') !== -1, '[ not closed');\r\n props.push(prop);\r\n continue;\r\n }\r\n if (isBegin && !props.length) {\r\n const prop = this.readNonEmptyIdentifier();\r\n if (prop) {\r\n props.push(prop);\r\n continue;\r\n }\r\n }\r\n if (this.peek() === '.' && this.peek(1) !== '.') { // skip range syntax\r\n this.p++;\r\n const prop = this.readNonEmptyIdentifier();\r\n if (!prop)\r\n break;\r\n props.push(prop);\r\n continue;\r\n }\r\n break;\r\n }\r\n return props;\r\n }\r\n readNumber() {\r\n this.skipBlank();\r\n let decimalFound = false;\r\n let digitFound = false;\r\n let n = 0;\r\n if (this.peekType() & SIGN)\r\n n++;\r\n while (this.p + n <= this.N) {\r\n if (this.peekType(n) & NUMBER) {\r\n digitFound = true;\r\n n++;\r\n }\r\n else if (this.peek(n) === '.' && this.peek(n + 1) !== '.') {\r\n if (decimalFound || !digitFound)\r\n return;\r\n decimalFound = true;\r\n n++;\r\n }\r\n else\r\n break;\r\n }\r\n if (digitFound && !isWord(this.peek(n))) {\r\n const num = new NumberToken(this.input, this.p, this.p + n, this.file);\r\n this.advance(n);\r\n return num;\r\n }\r\n }\r\n readLiteral() {\r\n this.skipBlank();\r\n const end = this.matchTrie(this.literalTrie);\r\n if (end === -1)\r\n return;\r\n const literal = new LiteralToken(this.input, this.p, end, this.file);\r\n this.p = end;\r\n return literal;\r\n }\r\n readRange() {\r\n this.skipBlank();\r\n const begin = this.p;\r\n if (this.peek() !== '(')\r\n return;\r\n ++this.p;\r\n const lhs = this.readValueOrThrow();\r\n this.p += 2;\r\n const rhs = this.readValueOrThrow();\r\n ++this.p;\r\n return new RangeToken(this.input, begin, this.p, lhs, rhs, this.file);\r\n }\r\n readValueOrThrow() {\r\n const value = this.readValue();\r\n this.assert(value, () => `unexpected token ${this.snapshot()}, value expected`);\r\n return value;\r\n }\r\n readQuoted() {\r\n this.skipBlank();\r\n const begin = this.p;\r\n if (!(this.peekType() & QUOTE))\r\n return;\r\n ++this.p;\r\n let escaped = false;\r\n while (this.p < this.N) {\r\n ++this.p;\r\n if (this.input[this.p - 1] === this.input[begin] && !escaped)\r\n break;\r\n if (escaped)\r\n escaped = false;\r\n else if (this.input[this.p - 1] === '\\\\')\r\n escaped = true;\r\n }\r\n return new QuotedToken(this.input, begin, this.p, this.file);\r\n }\r\n *readFileNameTemplate(options) {\r\n const { outputDelimiterLeft } = options;\r\n const htmlStopStrings = [',', ' ', outputDelimiterLeft];\r\n const htmlStopStringSet = new Set(htmlStopStrings);\r\n // break on ',' and ' ', outputDelimiterLeft only stops HTML token\r\n while (this.p < this.N && !htmlStopStringSet.has(this.peek())) {\r\n yield this.match(outputDelimiterLeft)\r\n ? this.readOutputToken(options)\r\n : this.readHTMLToken(htmlStopStrings);\r\n }\r\n }\r\n match(word) {\r\n for (let i = 0; i < word.length; i++) {\r\n if (word[i] !== this.input[this.p + i])\r\n return false;\r\n }\r\n return true;\r\n }\r\n rmatch(pattern) {\r\n for (let i = 0; i < pattern.length; i++) {\r\n if (pattern[pattern.length - 1 - i] !== this.input[this.p - 1 - i])\r\n return false;\r\n }\r\n return true;\r\n }\r\n peekType(n = 0) {\r\n return this.p + n >= this.N ? 0 : TYPES[this.input.charCodeAt(this.p + n)];\r\n }\r\n peek(n = 0) {\r\n return this.p + n >= this.N ? '' : this.input[this.p + n];\r\n }\r\n skipBlank() {\r\n while (this.peekType() & BLANK)\r\n ++this.p;\r\n }\r\n}\n\nclass ParseStream {\r\n constructor(tokens, parseToken) {\r\n this.handlers = {};\r\n this.stopRequested = false;\r\n this.tokens = tokens;\r\n this.parseToken = parseToken;\r\n }\r\n on(name, cb) {\r\n this.handlers[name] = cb;\r\n return this;\r\n }\r\n trigger(event, arg) {\r\n const h = this.handlers[event];\r\n return h ? (h.call(this, arg), true) : false;\r\n }\r\n start() {\r\n this.trigger('start');\r\n let token;\r\n while (!this.stopRequested && (token = this.tokens.shift())) {\r\n if (this.trigger('token', token))\r\n continue;\r\n if (isTagToken(token) && this.trigger(`tag:${token.name}`, token)) {\r\n continue;\r\n }\r\n const template = this.parseToken(token, this.tokens);\r\n this.trigger('template', template);\r\n }\r\n if (!this.stopRequested)\r\n this.trigger('end');\r\n return this;\r\n }\r\n stop() {\r\n this.stopRequested = true;\r\n return this;\r\n }\r\n}\n\nclass TemplateImpl {\r\n constructor(token) {\r\n this.token = token;\r\n }\r\n}\n\nclass Tag extends TemplateImpl {\r\n constructor(token, remainTokens, liquid) {\r\n super(token);\r\n this.name = token.name;\r\n this.liquid = liquid;\r\n this.tokenizer = token.tokenizer;\r\n }\r\n}\n\n/**\r\n * Key-Value Pairs Representing Tag Arguments\r\n * Example:\r\n * For the markup `, foo:'bar', coo:2 reversed %}`,\r\n * hash['foo'] === 'bar'\r\n * hash['coo'] === 2\r\n * hash['reversed'] === undefined\r\n */\r\nclass Hash {\r\n constructor(markup, jekyllStyle) {\r\n this.hash = {};\r\n const tokenizer = new Tokenizer(markup, {});\r\n for (const hash of tokenizer.readHashes(jekyllStyle)) {\r\n this.hash[hash.name.content] = hash.value;\r\n }\r\n }\r\n *render(ctx) {\r\n const hash = {};\r\n for (const key of Object.keys(this.hash)) {\r\n hash[key] = this.hash[key] === undefined ? true : yield evalToken(this.hash[key], ctx);\r\n }\r\n return hash;\r\n }\r\n}\n\nfunction createTagClass(options) {\r\n return class extends Tag {\r\n constructor(token, tokens, liquid) {\r\n super(token, tokens, liquid);\r\n if (isFunction(options.parse)) {\r\n options.parse.call(this, token, tokens);\r\n }\r\n }\r\n *render(ctx, emitter) {\r\n const hash = (yield new Hash(this.token.args, ctx.opts.keyValueSeparator).render(ctx));\r\n return yield options.render.call(this, ctx, emitter, hash);\r\n }\r\n };\r\n}\n\nfunction isKeyValuePair(arr) {\r\n return isArray(arr);\r\n}\n\nclass Filter {\r\n constructor(name, options, args, liquid) {\r\n this.name = name;\r\n this.handler = isFunction(options)\r\n ? options\r\n : (isFunction(options === null || options === void 0 ? void 0 : options.handler) ? options.handler : identify);\r\n this.raw = !isFunction(options) && !!(options === null || options === void 0 ? void 0 : options.raw);\r\n this.args = args;\r\n this.liquid = liquid;\r\n }\r\n *render(value, context) {\r\n const argv = [];\r\n for (const arg of this.args) {\r\n if (isKeyValuePair(arg))\r\n argv.push([arg[0], yield evalToken(arg[1], context)]);\r\n else\r\n argv.push(yield evalToken(arg, context));\r\n }\r\n return yield this.handler.apply({ context, liquid: this.liquid }, [value, ...argv]);\r\n }\r\n}\n\nclass Value {\r\n /**\r\n * @param str the value to be valuated, eg.: \"foobar\" | truncate: 3\r\n */\r\n constructor(input, liquid) {\r\n this.filters = [];\r\n const token = typeof input === 'string'\r\n ? new Tokenizer(input, liquid.options.operators).readFilteredValue()\r\n : input;\r\n this.initial = token.initial;\r\n this.filters = token.filters.map(({ name, args }) => new Filter(name, this.getFilter(liquid, name), args, liquid));\r\n }\r\n *value(ctx, lenient) {\r\n lenient = lenient || (ctx.opts.lenientIf && this.filters.length > 0 && this.filters[0].name === 'default');\r\n let val = yield this.initial.evaluate(ctx, lenient);\r\n for (const filter of this.filters) {\r\n val = yield filter.render(val, ctx);\r\n }\r\n return val;\r\n }\r\n getFilter(liquid, name) {\r\n const impl = liquid.filters[name];\r\n assert(impl || !liquid.options.strictFilters, () => `undefined filter: ${name}`);\r\n return impl;\r\n }\r\n}\n\nclass Output extends TemplateImpl {\r\n constructor(token, liquid) {\r\n var _a;\r\n super(token);\r\n const tokenizer = new Tokenizer(token.input, liquid.options.operators, token.file, token.contentRange);\r\n this.value = new Value(tokenizer.readFilteredValue(), liquid);\r\n const filters = this.value.filters;\r\n const outputEscape = liquid.options.outputEscape;\r\n if (!((_a = filters[filters.length - 1]) === null || _a === void 0 ? void 0 : _a.raw) && outputEscape) {\r\n filters.push(new Filter(toString.call(outputEscape), outputEscape, [], liquid));\r\n }\r\n }\r\n *render(ctx, emitter) {\r\n const val = yield this.value.value(ctx, false);\r\n emitter.write(val);\r\n }\r\n}\n\nclass HTML extends TemplateImpl {\r\n constructor(token) {\r\n super(token);\r\n this.str = token.getContent();\r\n }\r\n *render(ctx, emitter) {\r\n emitter.write(this.str);\r\n }\r\n}\n\nvar LookupType;\r\n(function (LookupType) {\r\n LookupType[\"Partials\"] = \"partials\";\r\n LookupType[\"Layouts\"] = \"layouts\";\r\n LookupType[\"Root\"] = \"root\";\r\n})(LookupType || (LookupType = {}));\r\nclass Loader {\r\n constructor(options) {\r\n this.options = options;\r\n if (options.relativeReference) {\r\n const sep = options.fs.sep;\r\n assert(sep, '`fs.sep` is required for relative reference');\r\n const rRelativePath = new RegExp(['.' + sep, '..' + sep, './', '../'].map(prefix => escapeRegex(prefix)).join('|'));\r\n this.shouldLoadRelative = (referencedFile) => rRelativePath.test(referencedFile);\r\n }\r\n else {\r\n this.shouldLoadRelative = (_referencedFile) => false;\r\n }\r\n this.contains = this.options.fs.contains || (() => true);\r\n }\r\n *lookup(file, type, sync, currentFile) {\r\n const { fs } = this.options;\r\n const dirs = this.options[type];\r\n for (const filepath of this.candidates(file, dirs, currentFile, type !== LookupType.Root)) {\r\n if (sync ? fs.existsSync(filepath) : yield fs.exists(filepath))\r\n return filepath;\r\n }\r\n throw this.lookupError(file, dirs);\r\n }\r\n *candidates(file, dirs, currentFile, enforceRoot) {\r\n const { fs, extname } = this.options;\r\n if (this.shouldLoadRelative(file) && currentFile) {\r\n const referenced = fs.resolve(this.dirname(currentFile), file, extname);\r\n for (const dir of dirs) {\r\n if (!enforceRoot || this.contains(dir, referenced)) {\r\n // the relatively referenced file is within one of root dirs\r\n yield referenced;\r\n break;\r\n }\r\n }\r\n }\r\n for (const dir of dirs) {\r\n const referenced = fs.resolve(dir, file, extname);\r\n if (!enforceRoot || this.contains(dir, referenced)) {\r\n yield referenced;\r\n }\r\n }\r\n if (fs.fallback !== undefined) {\r\n const filepath = fs.fallback(file);\r\n if (filepath !== undefined)\r\n yield filepath;\r\n }\r\n }\r\n dirname(path) {\r\n const fs = this.options.fs;\r\n assert(fs.dirname, '`fs.dirname` is required for relative reference');\r\n return fs.dirname(path);\r\n }\r\n lookupError(file, roots) {\r\n const err = new Error('ENOENT');\r\n err.message = `ENOENT: Failed to lookup \"${file}\" in \"${roots}\"`;\r\n err.code = 'ENOENT';\r\n return err;\r\n }\r\n}\n\nclass Parser {\r\n constructor(liquid) {\r\n this.liquid = liquid;\r\n this.cache = this.liquid.options.cache;\r\n this.fs = this.liquid.options.fs;\r\n this.parseFile = this.cache ? this._parseFileCached : this._parseFile;\r\n this.loader = new Loader(this.liquid.options);\r\n this.parseLimit = new Limiter('parse length', liquid.options.parseLimit);\r\n }\r\n parse(html, filepath) {\r\n html = String(html);\r\n this.parseLimit.use(html.length);\r\n const tokenizer = new Tokenizer(html, this.liquid.options.operators, filepath);\r\n const tokens = tokenizer.readTopLevelTokens(this.liquid.options);\r\n return this.parseTokens(tokens);\r\n }\r\n parseTokens(tokens) {\r\n let token;\r\n const templates = [];\r\n const errors = [];\r\n while ((token = tokens.shift())) {\r\n try {\r\n templates.push(this.parseToken(token, tokens));\r\n }\r\n catch (err) {\r\n if (this.liquid.options.catchAllErrors)\r\n errors.push(err);\r\n else\r\n throw err;\r\n }\r\n }\r\n if (errors.length)\r\n throw new LiquidErrors(errors);\r\n return templates;\r\n }\r\n parseToken(token, remainTokens) {\r\n try {\r\n if (isTagToken(token)) {\r\n const TagClass = this.liquid.tags[token.name];\r\n assert(TagClass, `tag \"${token.name}\" not found`);\r\n return new TagClass(token, remainTokens, this.liquid, this);\r\n }\r\n if (isOutputToken(token)) {\r\n return new Output(token, this.liquid);\r\n }\r\n return new HTML(token);\r\n }\r\n catch (e) {\r\n if (LiquidError.is(e))\r\n throw e;\r\n throw new ParseError(e, token);\r\n }\r\n }\r\n parseStream(tokens) {\r\n return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens));\r\n }\r\n *_parseFileCached(file, sync, type = LookupType.Root, currentFile) {\r\n const cache = this.cache;\r\n const key = this.loader.shouldLoadRelative(file) ? currentFile + ',' + file : type + ':' + file;\r\n const tpls = yield cache.read(key);\r\n if (tpls)\r\n return tpls;\r\n const task = this._parseFile(file, sync, type, currentFile);\r\n // sync mode: exec the task and cache the result\r\n // async mode: cache the task before exec\r\n const taskOrTpl = sync ? yield task : toPromise(task);\r\n cache.write(key, taskOrTpl);\r\n // note: concurrent tasks will be reused, cache for failed task is removed until its end\r\n try {\r\n return yield taskOrTpl;\r\n }\r\n catch (err) {\r\n cache.remove(key);\r\n throw err;\r\n }\r\n }\r\n *_parseFile(file, sync, type = LookupType.Root, currentFile) {\r\n const filepath = yield this.loader.lookup(file, type, sync, currentFile);\r\n return this.parse(sync ? this.fs.readFileSync(filepath) : yield this.fs.readFile(filepath), filepath);\r\n }\r\n}\n\nvar TokenKind;\r\n(function (TokenKind) {\r\n TokenKind[TokenKind[\"Number\"] = 1] = \"Number\";\r\n TokenKind[TokenKind[\"Literal\"] = 2] = \"Literal\";\r\n TokenKind[TokenKind[\"Tag\"] = 4] = \"Tag\";\r\n TokenKind[TokenKind[\"Output\"] = 8] = \"Output\";\r\n TokenKind[TokenKind[\"HTML\"] = 16] = \"HTML\";\r\n TokenKind[TokenKind[\"Filter\"] = 32] = \"Filter\";\r\n TokenKind[TokenKind[\"Hash\"] = 64] = \"Hash\";\r\n TokenKind[TokenKind[\"PropertyAccess\"] = 128] = \"PropertyAccess\";\r\n TokenKind[TokenKind[\"Word\"] = 256] = \"Word\";\r\n TokenKind[TokenKind[\"Range\"] = 512] = \"Range\";\r\n TokenKind[TokenKind[\"Quoted\"] = 1024] = \"Quoted\";\r\n TokenKind[TokenKind[\"Operator\"] = 2048] = \"Operator\";\r\n TokenKind[TokenKind[\"FilteredValue\"] = 4096] = \"FilteredValue\";\r\n TokenKind[TokenKind[\"Delimited\"] = 12] = \"Delimited\";\r\n})(TokenKind || (TokenKind = {}));\n\nfunction isDelimitedToken(val) {\r\n return !!(getKind(val) & TokenKind.Delimited);\r\n}\r\nfunction isOperatorToken(val) {\r\n return getKind(val) === TokenKind.Operator;\r\n}\r\nfunction isHTMLToken(val) {\r\n return getKind(val) === TokenKind.HTML;\r\n}\r\nfunction isOutputToken(val) {\r\n return getKind(val) === TokenKind.Output;\r\n}\r\nfunction isTagToken(val) {\r\n return getKind(val) === TokenKind.Tag;\r\n}\r\nfunction isQuotedToken(val) {\r\n return getKind(val) === TokenKind.Quoted;\r\n}\r\nfunction isLiteralToken(val) {\r\n return getKind(val) === TokenKind.Literal;\r\n}\r\nfunction isNumberToken(val) {\r\n return getKind(val) === TokenKind.Number;\r\n}\r\nfunction isPropertyAccessToken(val) {\r\n return getKind(val) === TokenKind.PropertyAccess;\r\n}\r\nfunction isWordToken(val) {\r\n return getKind(val) === TokenKind.Word;\r\n}\r\nfunction isRangeToken(val) {\r\n return getKind(val) === TokenKind.Range;\r\n}\r\nfunction getKind(val) {\r\n return val ? val.kind : -1;\r\n}\n\nvar typeGuards = /*#__PURE__*/Object.freeze({\n __proto__: null,\n isDelimitedToken: isDelimitedToken,\n isOperatorToken: isOperatorToken,\n isHTMLToken: isHTMLToken,\n isOutputToken: isOutputToken,\n isTagToken: isTagToken,\n isQuotedToken: isQuotedToken,\n isLiteralToken: isLiteralToken,\n isNumberToken: isNumberToken,\n isPropertyAccessToken: isPropertyAccessToken,\n isWordToken: isWordToken,\n isRangeToken: isRangeToken\n});\n\nclass Context {\r\n constructor(env = {}, opts = defaultOptions, renderOptions = {}, { memoryLimit, renderLimit } = {}) {\r\n var _a, _b, _c, _d, _e;\r\n /**\r\n * insert a Context-level empty scope,\r\n * for tags like `{% capture %}` `{% assign %}` to operate\r\n */\r\n this.scopes = [{}];\r\n this.registers = {};\r\n this.sync = !!renderOptions.sync;\r\n this.opts = opts;\r\n this.globals = (_a = renderOptions.globals) !== null && _a !== void 0 ? _a : opts.globals;\r\n this.environments = isObject(env) ? env : Object(env);\r\n this.strictVariables = (_b = renderOptions.strictVariables) !== null && _b !== void 0 ? _b : this.opts.strictVariables;\r\n this.ownPropertyOnly = (_c = renderOptions.ownPropertyOnly) !== null && _c !== void 0 ? _c : opts.ownPropertyOnly;\r\n this.memoryLimit = memoryLimit !== null && memoryLimit !== void 0 ? memoryLimit : new Limiter('memory alloc', (_d = renderOptions.memoryLimit) !== null && _d !== void 0 ? _d : opts.memoryLimit);\r\n this.renderLimit = renderLimit !== null && renderLimit !== void 0 ? renderLimit : new Limiter('template render', getPerformance().now() + ((_e = renderOptions.renderLimit) !== null && _e !== void 0 ? _e : opts.renderLimit));\r\n }\r\n getRegister(key) {\r\n return (this.registers[key] = this.registers[key] || {});\r\n }\r\n setRegister(key, value) {\r\n return (this.registers[key] = value);\r\n }\r\n saveRegister(...keys) {\r\n return keys.map(key => [key, this.getRegister(key)]);\r\n }\r\n restoreRegister(keyValues) {\r\n return keyValues.forEach(([key, value]) => this.setRegister(key, value));\r\n }\r\n getAll() {\r\n return [this.globals, this.environments, ...this.scopes]\r\n .reduce((ctx, val) => __assign(ctx, val), {});\r\n }\r\n /**\r\n * @deprecated use `_get()` or `getSync()` instead\r\n */\r\n get(paths) {\r\n return this.getSync(paths);\r\n }\r\n getSync(paths) {\r\n return toValueSync(this._get(paths));\r\n }\r\n *_get(paths) {\r\n const scope = this.findScope(paths[0]);\r\n return yield this._getFromScope(scope, paths);\r\n }\r\n /**\r\n * @deprecated use `_get()` instead\r\n */\r\n getFromScope(scope, paths) {\r\n return toValueSync(this._getFromScope(scope, paths));\r\n }\r\n *_getFromScope(scope, paths, strictVariables = this.strictVariables) {\r\n if (isString(paths))\r\n paths = paths.split('.');\r\n for (let i = 0; i < paths.length; i++) {\r\n scope = yield readProperty(scope, paths[i], this.ownPropertyOnly);\r\n if (strictVariables && isUndefined(scope)) {\r\n throw new InternalUndefinedVariableError(paths.slice(0, i + 1).join('.'));\r\n }\r\n }\r\n return scope;\r\n }\r\n push(ctx) {\r\n return this.scopes.push(ctx);\r\n }\r\n pop() {\r\n return this.scopes.pop();\r\n }\r\n bottom() {\r\n return this.scopes[0];\r\n }\r\n spawn(scope = {}) {\r\n return new Context(scope, this.opts, {\r\n sync: this.sync,\r\n globals: this.globals,\r\n strictVariables: this.strictVariables\r\n }, {\r\n renderLimit: this.renderLimit,\r\n memoryLimit: this.memoryLimit\r\n });\r\n }\r\n findScope(key) {\r\n for (let i = this.scopes.length - 1; i >= 0; i--) {\r\n const candidate = this.scopes[i];\r\n if (key in candidate)\r\n return candidate;\r\n }\r\n if (key in this.environments)\r\n return this.environments;\r\n return this.globals;\r\n }\r\n}\r\nfunction readProperty(obj, key, ownPropertyOnly) {\r\n obj = toLiquid(obj);\r\n if (isNil(obj))\r\n return obj;\r\n if (isArray(obj) && key < 0)\r\n return obj[obj.length + +key];\r\n const value = readJSProperty(obj, key, ownPropertyOnly);\r\n if (value === undefined && obj instanceof Drop)\r\n return obj.liquidMethodMissing(key);\r\n if (isFunction(value))\r\n return value.call(obj);\r\n if (key === 'size')\r\n return readSize(obj);\r\n else if (key === 'first')\r\n return readFirst(obj);\r\n else if (key === 'last')\r\n return readLast(obj);\r\n return value;\r\n}\r\nfunction readJSProperty(obj, key, ownPropertyOnly) {\r\n if (ownPropertyOnly && !hasOwnProperty.call(obj, key) && !(obj instanceof Drop))\r\n return undefined;\r\n return obj[key];\r\n}\r\nfunction readFirst(obj) {\r\n if (isArray(obj))\r\n return obj[0];\r\n return obj['first'];\r\n}\r\nfunction readLast(obj) {\r\n if (isArray(obj))\r\n return obj[obj.length - 1];\r\n return obj['last'];\r\n}\r\nfunction readSize(obj) {\r\n if (hasOwnProperty.call(obj, 'size') || obj['size'] !== undefined)\r\n return obj['size'];\r\n if (isArray(obj) || isString(obj))\r\n return obj.length;\r\n if (typeof obj === 'object')\r\n return Object.keys(obj).length;\r\n}\n\nvar BlockMode;\r\n(function (BlockMode) {\r\n /* store rendered html into blocks */\r\n BlockMode[BlockMode[\"OUTPUT\"] = 0] = \"OUTPUT\";\r\n /* output rendered html directly */\r\n BlockMode[BlockMode[\"STORE\"] = 1] = \"STORE\";\r\n})(BlockMode || (BlockMode = {}));\n\nconst abs = argumentsToValue(Math.abs);\r\nconst at_least = argumentsToValue(Math.max);\r\nconst at_most = argumentsToValue(Math.min);\r\nconst ceil = argumentsToValue(Math.ceil);\r\nconst divided_by = argumentsToValue((dividend, divisor, integerArithmetic = false) => integerArithmetic ? Math.floor(dividend / divisor) : dividend / divisor);\r\nconst floor = argumentsToValue(Math.floor);\r\nconst minus = argumentsToValue((v, arg) => v - arg);\r\nconst modulo = argumentsToValue((v, arg) => v % arg);\r\nconst times = argumentsToValue((v, arg) => v * arg);\r\nfunction round(v, arg = 0) {\r\n v = toValue(v);\r\n arg = toValue(arg);\r\n const amp = Math.pow(10, arg);\r\n return Math.round(v * amp) / amp;\r\n}\r\nfunction plus(v, arg) {\r\n v = toValue(v);\r\n arg = toValue(arg);\r\n return Number(v) + Number(arg);\r\n}\n\nvar mathFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n abs: abs,\n at_least: at_least,\n at_most: at_most,\n ceil: ceil,\n divided_by: divided_by,\n floor: floor,\n minus: minus,\n modulo: modulo,\n times: times,\n round: round,\n plus: plus\n});\n\nconst url_decode = (x) => decodeURIComponent(stringify(x)).replace(/\\+/g, ' ');\r\nconst url_encode = (x) => encodeURIComponent(stringify(x)).replace(/%20/g, '+');\r\nconst cgi_escape = (x) => encodeURIComponent(stringify(x))\r\n .replace(/%20/g, '+')\r\n .replace(/[!'()*]/g, c => '%' + c.charCodeAt(0).toString(16).toUpperCase());\r\nconst uri_escape = (x) => encodeURI(stringify(x))\r\n .replace(/%5B/g, '[')\r\n .replace(/%5D/g, ']');\r\nconst rSlugifyDefault = /[^\\p{M}\\p{L}\\p{Nd}]+/ug;\r\nconst rSlugifyReplacers = {\r\n 'raw': /\\s+/g,\r\n 'default': rSlugifyDefault,\r\n 'pretty': /[^\\p{M}\\p{L}\\p{Nd}._~!$&'()+,;=@]+/ug,\r\n 'ascii': /[^A-Za-z0-9]+/g,\r\n 'latin': rSlugifyDefault,\r\n 'none': null\r\n};\r\nfunction slugify(str, mode = 'default', cased = false) {\r\n str = stringify(str);\r\n const replacer = rSlugifyReplacers[mode];\r\n if (replacer) {\r\n if (mode === 'latin')\r\n str = removeAccents(str);\r\n str = str.replace(replacer, '-').replace(/^-|-$/g, '');\r\n }\r\n return cased ? str : str.toLowerCase();\r\n}\r\nfunction removeAccents(str) {\r\n return str.replace(/[àáâãäå]/g, 'a')\r\n .replace(/[æ]/g, 'ae')\r\n .replace(/[ç]/g, 'c')\r\n .replace(/[èéêë]/g, 'e')\r\n .replace(/[ìíîï]/g, 'i')\r\n .replace(/[ð]/g, 'd')\r\n .replace(/[ñ]/g, 'n')\r\n .replace(/[òóôõöø]/g, 'o')\r\n .replace(/[ùúûü]/g, 'u')\r\n .replace(/[ýÿ]/g, 'y')\r\n .replace(/[ß]/g, 'ss')\r\n .replace(/[œ]/g, 'oe')\r\n .replace(/[þ]/g, 'th')\r\n .replace(/[ẞ]/g, 'SS')\r\n .replace(/[Œ]/g, 'OE')\r\n .replace(/[Þ]/g, 'TH');\r\n}\n\nvar urlFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n url_decode: url_decode,\n url_encode: url_encode,\n cgi_escape: cgi_escape,\n uri_escape: uri_escape,\n slugify: slugify\n});\n\nconst join = argumentsToValue(function (v, arg) {\r\n const array = toArray(v);\r\n const sep = isNil(arg) ? ' ' : stringify(arg);\r\n const complexity = array.length * (1 + sep.length);\r\n this.context.memoryLimit.use(complexity);\r\n return array.join(sep);\r\n});\r\nconst last$1 = argumentsToValue((v) => isArray(v) ? last(v) : '');\r\nconst first = argumentsToValue((v) => isArray(v) ? v[0] : '');\r\nconst reverse = argumentsToValue(function (v) {\r\n const array = toArray(v);\r\n this.context.memoryLimit.use(array.length);\r\n return [...array].reverse();\r\n});\r\nfunction* sort(arr, property) {\r\n const values = [];\r\n const array = toArray(arr);\r\n this.context.memoryLimit.use(array.length);\r\n for (const item of array) {\r\n values.push([\r\n item,\r\n property ? yield this.context._getFromScope(item, stringify(property).split('.'), false) : item\r\n ]);\r\n }\r\n return values.sort((lhs, rhs) => {\r\n const lvalue = lhs[1];\r\n const rvalue = rhs[1];\r\n return lvalue < rvalue ? -1 : (lvalue > rvalue ? 1 : 0);\r\n }).map(tuple => tuple[0]);\r\n}\r\nfunction sort_natural(input, property) {\r\n const propertyString = stringify(property);\r\n const compare = property === undefined\r\n ? caseInsensitiveCompare\r\n : (lhs, rhs) => caseInsensitiveCompare(lhs[propertyString], rhs[propertyString]);\r\n const array = toArray(input);\r\n this.context.memoryLimit.use(array.length);\r\n return [...array].sort(compare);\r\n}\r\nconst size = (v) => (v && v.length) || 0;\r\nfunction* map(arr, property) {\r\n const results = [];\r\n const array = toArray(arr);\r\n this.context.memoryLimit.use(array.length);\r\n for (const item of array) {\r\n results.push(yield this.context._getFromScope(item, stringify(property), false));\r\n }\r\n return results;\r\n}\r\nfunction* sum(arr, property) {\r\n let sum = 0;\r\n const array = toArray(arr);\r\n for (const item of array) {\r\n const data = Number(property ? yield this.context._getFromScope(item, stringify(property), false) : item);\r\n sum += Number.isNaN(data) ? 0 : data;\r\n }\r\n return sum;\r\n}\r\nfunction compact(arr) {\r\n const array = toArray(arr);\r\n this.context.memoryLimit.use(array.length);\r\n return array.filter(x => !isNil(toValue(x)));\r\n}\r\nfunction concat(v, arg = []) {\r\n const lhs = toArray(v);\r\n const rhs = toArray(arg);\r\n this.context.memoryLimit.use(lhs.length + rhs.length);\r\n return lhs.concat(rhs);\r\n}\r\nfunction push(v, arg) {\r\n return concat.call(this, v, [arg]);\r\n}\r\nfunction unshift(v, arg) {\r\n const array = toArray(v);\r\n this.context.memoryLimit.use(array.length);\r\n const clone = [...array];\r\n clone.unshift(arg);\r\n return clone;\r\n}\r\nfunction pop(v) {\r\n const clone = [...toArray(v)];\r\n clone.pop();\r\n return clone;\r\n}\r\nfunction shift(v) {\r\n const array = toArray(v);\r\n this.context.memoryLimit.use(array.length);\r\n const clone = [...array];\r\n clone.shift();\r\n return clone;\r\n}\r\nfunction slice(v, begin, length = 1) {\r\n v = toValue(v);\r\n if (isNil(v))\r\n return [];\r\n if (!isArray(v))\r\n v = stringify(v);\r\n begin = begin < 0 ? v.length + begin : begin;\r\n this.context.memoryLimit.use(length);\r\n return v.slice(begin, begin + length);\r\n}\r\nfunction* where(arr, property, expected) {\r\n const values = [];\r\n arr = toArray(arr);\r\n this.context.memoryLimit.use(arr.length);\r\n const token = new Tokenizer(stringify(property)).readScopeValue();\r\n for (const item of arr) {\r\n values.push(yield evalToken(token, this.context.spawn(item)));\r\n }\r\n return arr.filter((_, i) => {\r\n if (expected === undefined)\r\n return isTruthy(values[i], this.context);\r\n return equals(values[i], expected);\r\n });\r\n}\r\nfunction* where_exp(arr, itemName, exp) {\r\n const filtered = [];\r\n const keyTemplate = new Value(stringify(exp), this.liquid);\r\n const array = toArray(arr);\r\n this.context.memoryLimit.use(array.length);\r\n for (const item of array) {\r\n const value = yield keyTemplate.value(this.context.spawn({ [itemName]: item }));\r\n if (value)\r\n filtered.push(item);\r\n }\r\n return filtered;\r\n}\r\nfunction* group_by(arr, property) {\r\n const map = new Map();\r\n arr = toArray(arr);\r\n const token = new Tokenizer(stringify(property)).readScopeValue();\r\n this.context.memoryLimit.use(arr.length);\r\n for (const item of arr) {\r\n const key = yield evalToken(token, this.context.spawn(item));\r\n if (!map.has(key))\r\n map.set(key, []);\r\n map.get(key).push(item);\r\n }\r\n return [...map.entries()].map(([name, items]) => ({ name, items }));\r\n}\r\nfunction* group_by_exp(arr, itemName, exp) {\r\n const map = new Map();\r\n const keyTemplate = new Value(stringify(exp), this.liquid);\r\n arr = toArray(arr);\r\n this.context.memoryLimit.use(arr.length);\r\n for (const item of arr) {\r\n const key = yield keyTemplate.value(this.context.spawn({ [itemName]: item }));\r\n if (!map.has(key))\r\n map.set(key, []);\r\n map.get(key).push(item);\r\n }\r\n return [...map.entries()].map(([name, items]) => ({ name, items }));\r\n}\r\nfunction* find(arr, property, expected) {\r\n const token = new Tokenizer(stringify(property)).readScopeValue();\r\n const array = toArray(arr);\r\n for (const item of array) {\r\n const value = yield evalToken(token, this.context.spawn(item));\r\n if (equals(value, expected))\r\n return item;\r\n }\r\n}\r\nfunction* find_exp(arr, itemName, exp) {\r\n const predicate = new Value(stringify(exp), this.liquid);\r\n const array = toArray(arr);\r\n for (const item of array) {\r\n const value = yield predicate.value(this.context.spawn({ [itemName]: item }));\r\n if (value)\r\n return item;\r\n }\r\n}\r\nfunction uniq(arr) {\r\n arr = toArray(arr);\r\n this.context.memoryLimit.use(arr.length);\r\n return [...new Set(arr)];\r\n}\r\nfunction sample(v, count = 1) {\r\n v = toValue(v);\r\n if (isNil(v))\r\n return [];\r\n if (!isArray(v))\r\n v = stringify(v);\r\n this.context.memoryLimit.use(count);\r\n const shuffled = [...v].sort(() => Math.random() - 0.5);\r\n if (count === 1)\r\n return shuffled[0];\r\n return shuffled.slice(0, count);\r\n}\n\nvar arrayFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n join: join,\n last: last$1,\n first: first,\n reverse: reverse,\n sort: sort,\n sort_natural: sort_natural,\n size: size,\n map: map,\n sum: sum,\n compact: compact,\n concat: concat,\n push: push,\n unshift: unshift,\n pop: pop,\n shift: shift,\n slice: slice,\n where: where,\n where_exp: where_exp,\n group_by: group_by,\n group_by_exp: group_by_exp,\n find: find,\n find_exp: find_exp,\n uniq: uniq,\n sample: sample\n});\n\nfunction date(v, format, timezoneOffset) {\r\n var _a, _b, _c;\r\n const size = ((_a = v === null || v === void 0 ? void 0 : v.length) !== null && _a !== void 0 ? _a : 0) + ((_b = format === null || format === void 0 ? void 0 : format.length) !== null && _b !== void 0 ? _b : 0) + ((_c = timezoneOffset === null || timezoneOffset === void 0 ? void 0 : timezoneOffset.length) !== null && _c !== void 0 ? _c : 0);\r\n this.context.memoryLimit.use(size);\r\n const date = parseDate(v, this.context.opts, timezoneOffset);\r\n if (!date)\r\n return v;\r\n format = toValue(format);\r\n format = isNil(format) ? this.context.opts.dateFormat : stringify(format);\r\n return strftime(date, format);\r\n}\r\nfunction date_to_xmlschema(v) {\r\n return date.call(this, v, '%Y-%m-%dT%H:%M:%S%:z');\r\n}\r\nfunction date_to_rfc822(v) {\r\n return date.call(this, v, '%a, %d %b %Y %H:%M:%S %z');\r\n}\r\nfunction date_to_string(v, type, style) {\r\n return stringify_date.call(this, v, '%b', type, style);\r\n}\r\nfunction date_to_long_string(v, type, style) {\r\n return stringify_date.call(this, v, '%B', type, style);\r\n}\r\nfunction stringify_date(v, month_type, type, style) {\r\n const date = parseDate(v, this.context.opts);\r\n if (!date)\r\n return v;\r\n if (type === 'ordinal') {\r\n const d = date.getDate();\r\n return style === 'US'\r\n ? strftime(date, `${month_type} ${d}%q, %Y`)\r\n : strftime(date, `${d}%q ${month_type} %Y`);\r\n }\r\n return strftime(date, `%d ${month_type} %Y`);\r\n}\r\nfunction parseDate(v, opts, timezoneOffset) {\r\n let date;\r\n const defaultTimezoneOffset = timezoneOffset !== null && timezoneOffset !== void 0 ? timezoneOffset : opts.timezoneOffset;\r\n const locale = opts.locale;\r\n v = toValue(v);\r\n if (v === 'now' || v === 'today') {\r\n date = new LiquidDate(Date.now(), locale, defaultTimezoneOffset);\r\n }\r\n else if (isNumber(v)) {\r\n date = new LiquidDate(v * 1000, locale, defaultTimezoneOffset);\r\n }\r\n else if (isString(v)) {\r\n if (/^\\d+$/.test(v)) {\r\n date = new LiquidDate(+v * 1000, locale, defaultTimezoneOffset);\r\n }\r\n else if (opts.preserveTimezones && timezoneOffset === undefined) {\r\n date = LiquidDate.createDateFixedToTimezone(v, locale);\r\n }\r\n else {\r\n date = new LiquidDate(v, locale, defaultTimezoneOffset);\r\n }\r\n }\r\n else {\r\n date = new LiquidDate(v, locale, defaultTimezoneOffset);\r\n }\r\n return date.valid() ? date : undefined;\r\n}\n\nvar dateFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n date: date,\n date_to_xmlschema: date_to_xmlschema,\n date_to_rfc822: date_to_rfc822,\n date_to_string: date_to_string,\n date_to_long_string: date_to_long_string\n});\n\n/**\r\n * String related filters\r\n *\r\n * * prefer stringify() to String() since `undefined`, `null` should eval ''\r\n */\r\nconst rCJKWord = /[\\u4E00-\\u9FFF\\uF900-\\uFAFF\\u3400-\\u4DBF\\u3040-\\u309F\\u30A0-\\u30FF\\uAC00-\\uD7AF]/gu;\r\n// Word boundary followed by word characters (for detecting words)\r\nconst rNonCJKWord = /[^\\u4E00-\\u9FFF\\uF900-\\uFAFF\\u3400-\\u4DBF\\u3040-\\u309F\\u30A0-\\u30FF\\uAC00-\\uD7AF\\s]+/gu;\r\nfunction append(v, arg) {\r\n assert(arguments.length === 2, 'append expect 2 arguments');\r\n const lhs = stringify(v);\r\n const rhs = stringify(arg);\r\n this.context.memoryLimit.use(lhs.length + rhs.length);\r\n return lhs + rhs;\r\n}\r\nfunction prepend(v, arg) {\r\n assert(arguments.length === 2, 'prepend expect 2 arguments');\r\n const lhs = stringify(v);\r\n const rhs = stringify(arg);\r\n this.context.memoryLimit.use(lhs.length + rhs.length);\r\n return rhs + lhs;\r\n}\r\nfunction lstrip(v, chars) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n if (chars) {\r\n chars = escapeRegExp(stringify(chars));\r\n return str.replace(new RegExp(`^[${chars}]+`, 'g'), '');\r\n }\r\n return str.replace(/^\\s+/, '');\r\n}\r\nfunction downcase(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.toLowerCase();\r\n}\r\nfunction upcase(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return stringify(str).toUpperCase();\r\n}\r\nfunction remove(v, arg) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.split(stringify(arg)).join('');\r\n}\r\nfunction remove_first(v, l) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(stringify(l), '');\r\n}\r\nfunction remove_last(v, l) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n const pattern = stringify(l);\r\n const index = str.lastIndexOf(pattern);\r\n if (index === -1)\r\n return str;\r\n return str.substring(0, index) + str.substring(index + pattern.length);\r\n}\r\nfunction rstrip(str, chars) {\r\n str = stringify(str);\r\n this.context.memoryLimit.use(str.length);\r\n if (chars) {\r\n chars = escapeRegExp(stringify(chars));\r\n return str.replace(new RegExp(`[${chars}]+$`, 'g'), '');\r\n }\r\n return str.replace(/\\s+$/, '');\r\n}\r\nfunction split(v, arg) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n const arr = str.split(stringify(arg));\r\n // align to ruby split, which is the behavior of shopify/liquid\r\n // see: https://ruby-doc.org/core-2.4.0/String.html#method-i-split\r\n while (arr.length && arr[arr.length - 1] === '')\r\n arr.pop();\r\n return arr;\r\n}\r\nfunction strip(v, chars) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n if (chars) {\r\n chars = escapeRegExp(stringify(chars));\r\n return str\r\n .replace(new RegExp(`^[${chars}]+`, 'g'), '')\r\n .replace(new RegExp(`[${chars}]+$`, 'g'), '');\r\n }\r\n return str.trim();\r\n}\r\nfunction strip_newlines(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(/\\r?\\n/gm, '');\r\n}\r\nfunction capitalize(str) {\r\n str = stringify(str);\r\n this.context.memoryLimit.use(str.length);\r\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();\r\n}\r\nfunction replace(v, pattern, replacement) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.split(stringify(pattern)).join(replacement);\r\n}\r\nfunction replace_first(v, arg1, arg2) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(stringify(arg1), arg2);\r\n}\r\nfunction replace_last(v, arg1, arg2) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n const pattern = stringify(arg1);\r\n const index = str.lastIndexOf(pattern);\r\n if (index === -1)\r\n return str;\r\n const replacement = stringify(arg2);\r\n return str.substring(0, index) + replacement + str.substring(index + pattern.length);\r\n}\r\nfunction truncate(v, l = 50, o = '...') {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n if (str.length <= l)\r\n return v;\r\n return str.substring(0, l - o.length) + o;\r\n}\r\nfunction truncatewords(v, words = 15, o = '...') {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n const arr = str.split(/\\s+/);\r\n if (words <= 0)\r\n words = 1;\r\n let ret = arr.slice(0, words).join(' ');\r\n if (arr.length >= words)\r\n ret += o;\r\n return ret;\r\n}\r\nfunction normalize_whitespace(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(/\\s+/g, ' ');\r\n}\r\nfunction number_of_words(input, mode) {\r\n const str = stringify(input);\r\n this.context.memoryLimit.use(str.length);\r\n input = str.trim();\r\n if (!input)\r\n return 0;\r\n switch (mode) {\r\n case 'cjk':\r\n // Count CJK characters and words\r\n return (input.match(rCJKWord) || []).length + (input.match(rNonCJKWord) || []).length;\r\n case 'auto':\r\n // Count CJK characters, if none, count words\r\n return rCJKWord.test(input)\r\n ? input.match(rCJKWord).length + (input.match(rNonCJKWord) || []).length\r\n : input.split(/\\s+/).length;\r\n default:\r\n // Count words only\r\n return input.split(/\\s+/).length;\r\n }\r\n}\r\nfunction array_to_sentence_string(array, connector = 'and') {\r\n this.context.memoryLimit.use(array.length);\r\n switch (array.length) {\r\n case 0:\r\n return '';\r\n case 1:\r\n return array[0];\r\n case 2:\r\n return `${array[0]} ${connector} ${array[1]}`;\r\n default:\r\n return `${array.slice(0, -1).join(', ')}, ${connector} ${array[array.length - 1]}`;\r\n }\r\n}\n\nvar stringFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n append: append,\n prepend: prepend,\n lstrip: lstrip,\n downcase: downcase,\n upcase: upcase,\n remove: remove,\n remove_first: remove_first,\n remove_last: remove_last,\n rstrip: rstrip,\n split: split,\n strip: strip,\n strip_newlines: strip_newlines,\n capitalize: capitalize,\n replace: replace,\n replace_first: replace_first,\n replace_last: replace_last,\n truncate: truncate,\n truncatewords: truncatewords,\n normalize_whitespace: normalize_whitespace,\n number_of_words: number_of_words,\n array_to_sentence_string: array_to_sentence_string\n});\n\nconst filters = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, htmlFilters), mathFilters), urlFilters), arrayFilters), dateFilters), stringFilters), misc);\n\nclass AssignTag extends Tag {\r\n constructor(token, remainTokens, liquid) {\r\n super(token, remainTokens, liquid);\r\n this.key = this.tokenizer.readIdentifier().content;\r\n this.tokenizer.assert(this.key, 'expected variable name');\r\n this.tokenizer.skipBlank();\r\n this.tokenizer.assert(this.tokenizer.peek() === '=', 'expected \"=\"');\r\n this.tokenizer.advance();\r\n this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid);\r\n }\r\n *render(ctx) {\r\n ctx.bottom()[this.key] = yield this.value.value(ctx, this.liquid.options.lenientIf);\r\n }\r\n}\n\nconst MODIFIERS = ['offset', 'limit', 'reversed'];\r\nclass ForTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n const variable = this.tokenizer.readIdentifier();\r\n const inStr = this.tokenizer.readIdentifier();\r\n const collection = this.tokenizer.readValue();\r\n if (!variable.size() || inStr.content !== 'in' || !collection) {\r\n throw new Error(`illegal tag: ${token.getText()}`);\r\n }\r\n this.variable = variable.content;\r\n this.collection = collection;\r\n this.hash = new Hash(this.tokenizer.remaining(), liquid.options.keyValueSeparator);\r\n this.templates = [];\r\n this.elseTemplates = [];\r\n let p;\r\n const stream = parser.parseStream(remainTokens)\r\n .on('start', () => (p = this.templates))\r\n .on('tag:else', tag => { assertEmpty(tag.args); p = this.elseTemplates; })\r\n .on('tag:endfor', tag => { assertEmpty(tag.args); stream.stop(); })\r\n .on('template', (tpl) => p.push(tpl))\r\n .on('end', () => { throw new Error(`tag ${token.getText()} not closed`); });\r\n stream.start();\r\n }\r\n *render(ctx, emitter) {\r\n const r = this.liquid.renderer;\r\n let collection = toEnumerable(yield evalToken(this.collection, ctx));\r\n if (!collection.length) {\r\n yield r.renderTemplates(this.elseTemplates, ctx, emitter);\r\n return;\r\n }\r\n const continueKey = 'continue-' + this.variable + '-' + this.collection.getText();\r\n ctx.push({ continue: ctx.getRegister(continueKey) });\r\n const hash = yield this.hash.render(ctx);\r\n ctx.pop();\r\n const modifiers = this.liquid.options.orderedFilterParameters\r\n ? Object.keys(hash).filter(x => MODIFIERS.includes(x))\r\n : MODIFIERS.filter(x => hash[x] !== undefined);\r\n collection = modifiers.reduce((collection, modifier) => {\r\n if (modifier === 'offset')\r\n return offset(collection, hash['offset']);\r\n if (modifier === 'limit')\r\n return limit(collection, hash['limit']);\r\n return reversed(collection);\r\n }, collection);\r\n ctx.setRegister(continueKey, (hash['offset'] || 0) + collection.length);\r\n const scope = { forloop: new ForloopDrop(collection.length, this.collection.getText(), this.variable) };\r\n ctx.push(scope);\r\n for (const item of collection) {\r\n scope[this.variable] = item;\r\n yield r.renderTemplates(this.templates, ctx, emitter);\r\n if (emitter['break']) {\r\n emitter['break'] = false;\r\n break;\r\n }\r\n emitter['continue'] = false;\r\n scope.forloop.next();\r\n }\r\n ctx.pop();\r\n }\r\n}\r\nfunction reversed(arr) {\r\n return [...arr].reverse();\r\n}\r\nfunction offset(arr, count) {\r\n return arr.slice(count);\r\n}\r\nfunction limit(arr, count) {\r\n return arr.slice(0, count);\r\n}\n\nclass CaptureTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid, parser) {\r\n super(tagToken, remainTokens, liquid);\r\n this.templates = [];\r\n this.variable = this.readVariableName();\r\n while (remainTokens.length) {\r\n const token = remainTokens.shift();\r\n if (isTagToken(token) && token.name === 'endcapture')\r\n return;\r\n this.templates.push(parser.parseToken(token, remainTokens));\r\n }\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n }\r\n *render(ctx) {\r\n const r = this.liquid.renderer;\r\n const html = yield r.renderTemplates(this.templates, ctx);\r\n ctx.bottom()[this.variable] = html;\r\n }\r\n readVariableName() {\r\n const word = this.tokenizer.readIdentifier().content;\r\n if (word)\r\n return word;\r\n const quoted = this.tokenizer.readQuoted();\r\n if (quoted)\r\n return evalQuotedToken(quoted);\r\n throw this.tokenizer.error('invalid capture name');\r\n }\r\n}\n\nclass CaseTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid, parser) {\r\n super(tagToken, remainTokens, liquid);\r\n this.branches = [];\r\n this.elseTemplates = [];\r\n this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid);\r\n this.elseTemplates = [];\r\n let p = [];\r\n let elseCount = 0;\r\n const stream = parser.parseStream(remainTokens)\r\n .on('tag:when', (token) => {\r\n if (elseCount > 0) {\r\n return;\r\n }\r\n p = [];\r\n const values = [];\r\n while (!token.tokenizer.end()) {\r\n values.push(token.tokenizer.readValueOrThrow());\r\n token.tokenizer.skipBlank();\r\n if (token.tokenizer.peek() === ',') {\r\n token.tokenizer.readTo(',');\r\n }\r\n else {\r\n token.tokenizer.readTo('or');\r\n }\r\n }\r\n this.branches.push({\r\n values,\r\n templates: p\r\n });\r\n })\r\n .on('tag:else', () => {\r\n elseCount++;\r\n p = this.elseTemplates;\r\n })\r\n .on('tag:endcase', () => stream.stop())\r\n .on('template', (tpl) => {\r\n if (p !== this.elseTemplates || elseCount === 1) {\r\n p.push(tpl);\r\n }\r\n })\r\n .on('end', () => {\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n });\r\n stream.start();\r\n }\r\n *render(ctx, emitter) {\r\n const r = this.liquid.renderer;\r\n const target = toValue(yield this.value.value(ctx, ctx.opts.lenientIf));\r\n let branchHit = false;\r\n for (const branch of this.branches) {\r\n for (const valueToken of branch.values) {\r\n const value = yield evalToken(valueToken, ctx, ctx.opts.lenientIf);\r\n if (equals(target, value)) {\r\n yield r.renderTemplates(branch.templates, ctx, emitter);\r\n branchHit = true;\r\n break;\r\n }\r\n }\r\n }\r\n if (!branchHit) {\r\n yield r.renderTemplates(this.elseTemplates, ctx, emitter);\r\n }\r\n }\r\n}\n\nclass CommentTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid) {\r\n super(tagToken, remainTokens, liquid);\r\n while (remainTokens.length) {\r\n const token = remainTokens.shift();\r\n if (isTagToken(token) && token.name === 'endcomment')\r\n return;\r\n }\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n }\r\n render() { }\r\n}\n\nclass RenderTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n const tokenizer = this.tokenizer;\r\n this.file = parseFilePath(tokenizer, this.liquid, parser);\r\n this.currentFile = token.file;\r\n while (!tokenizer.end()) {\r\n tokenizer.skipBlank();\r\n const begin = tokenizer.p;\r\n const keyword = tokenizer.readIdentifier();\r\n if (keyword.content === 'with' || keyword.content === 'for') {\r\n tokenizer.skipBlank();\r\n // can be normal key/value pair, like \"with: true\"\r\n if (tokenizer.peek() !== ':') {\r\n const value = tokenizer.readValue();\r\n // can be normal key, like \"with,\"\r\n if (value) {\r\n const beforeAs = tokenizer.p;\r\n const asStr = tokenizer.readIdentifier();\r\n let alias;\r\n if (asStr.content === 'as')\r\n alias = tokenizer.readIdentifier();\r\n else\r\n tokenizer.p = beforeAs;\r\n this[keyword.content] = { value, alias: alias && alias.content };\r\n tokenizer.skipBlank();\r\n if (tokenizer.peek() === ',')\r\n tokenizer.advance();\r\n continue; // matched!\r\n }\r\n }\r\n }\r\n /**\r\n * restore cursor if with/for not matched\r\n */\r\n tokenizer.p = begin;\r\n break;\r\n }\r\n this.hash = new Hash(tokenizer.remaining(), liquid.options.keyValueSeparator);\r\n }\r\n *render(ctx, emitter) {\r\n const { liquid, hash } = this;\r\n const filepath = (yield renderFilePath(this['file'], ctx, liquid));\r\n assert(filepath, () => `illegal file path \"${filepath}\"`);\r\n const childCtx = ctx.spawn();\r\n const scope = childCtx.bottom();\r\n __assign(scope, yield hash.render(ctx));\r\n if (this['with']) {\r\n const { value, alias } = this['with'];\r\n scope[alias || filepath] = yield evalToken(value, ctx);\r\n }\r\n if (this['for']) {\r\n const { value, alias } = this['for'];\r\n const collection = toEnumerable(yield evalToken(value, ctx));\r\n scope['forloop'] = new ForloopDrop(collection.length, value.getText(), alias);\r\n for (const item of collection) {\r\n scope[alias] = item;\r\n const templates = (yield liquid._parsePartialFile(filepath, childCtx.sync, this['currentFile']));\r\n yield liquid.renderer.renderTemplates(templates, childCtx, emitter);\r\n scope['forloop'].next();\r\n }\r\n }\r\n else {\r\n const templates = (yield liquid._parsePartialFile(filepath, childCtx.sync, this['currentFile']));\r\n yield liquid.renderer.renderTemplates(templates, childCtx, emitter);\r\n }\r\n }\r\n}\r\n/**\r\n * @return null for \"none\",\r\n * @return Template[] for quoted with tags and/or filters\r\n * @return Token for expression (not quoted)\r\n * @throws TypeError if cannot read next token\r\n */\r\nfunction parseFilePath(tokenizer, liquid, parser) {\r\n if (liquid.options.dynamicPartials) {\r\n const file = tokenizer.readValue();\r\n tokenizer.assert(file, 'illegal file path');\r\n if (file.getText() === 'none')\r\n return;\r\n if (isQuotedToken(file)) {\r\n // for filenames like \"files/{{file}}\", eval as liquid template\r\n const templates = parser.parse(evalQuotedToken(file));\r\n return optimize(templates);\r\n }\r\n return file;\r\n }\r\n const tokens = [...tokenizer.readFileNameTemplate(liquid.options)];\r\n const templates = optimize(parser.parseTokens(tokens));\r\n return templates === 'none' ? undefined : templates;\r\n}\r\nfunction optimize(templates) {\r\n // for filenames like \"files/file.liquid\", extract the string directly\r\n if (templates.length === 1 && isHTMLToken(templates[0].token))\r\n return templates[0].token.getContent();\r\n return templates;\r\n}\r\nfunction* renderFilePath(file, ctx, liquid) {\r\n if (typeof file === 'string')\r\n return file;\r\n if (Array.isArray(file))\r\n return liquid.renderer.renderTemplates(file, ctx);\r\n return yield evalToken(file, ctx);\r\n}\n\nclass IncludeTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n const { tokenizer } = token;\r\n this['file'] = parseFilePath(tokenizer, this.liquid, parser);\r\n this['currentFile'] = token.file;\r\n const begin = tokenizer.p;\r\n const withStr = tokenizer.readIdentifier();\r\n if (withStr.content === 'with') {\r\n tokenizer.skipBlank();\r\n if (tokenizer.peek() !== ':') {\r\n this.withVar = tokenizer.readValue();\r\n }\r\n else\r\n tokenizer.p = begin;\r\n }\r\n else\r\n tokenizer.p = begin;\r\n this.hash = new Hash(tokenizer.remaining(), liquid.options.jekyllInclude || liquid.options.keyValueSeparator);\r\n }\r\n *render(ctx, emitter) {\r\n const { liquid, hash, withVar } = this;\r\n const { renderer } = liquid;\r\n const filepath = (yield renderFilePath(this['file'], ctx, liquid));\r\n assert(filepath, () => `illegal file path \"${filepath}\"`);\r\n const saved = ctx.saveRegister('blocks', 'blockMode');\r\n ctx.setRegister('blocks', {});\r\n ctx.setRegister('blockMode', BlockMode.OUTPUT);\r\n const scope = (yield hash.render(ctx));\r\n if (withVar)\r\n scope[filepath] = yield evalToken(withVar, ctx);\r\n const templates = (yield liquid._parsePartialFile(filepath, ctx.sync, this['currentFile']));\r\n ctx.push(ctx.opts.jekyllInclude ? { include: scope } : scope);\r\n yield renderer.renderTemplates(templates, ctx, emitter);\r\n ctx.pop();\r\n ctx.restoreRegister(saved);\r\n }\r\n}\n\nclass DecrementTag extends Tag {\r\n constructor(token, remainTokens, liquid) {\r\n super(token, remainTokens, liquid);\r\n this.variable = this.tokenizer.readIdentifier().content;\r\n }\r\n render(context, emitter) {\r\n const scope = context.environments;\r\n if (!isNumber(scope[this.variable])) {\r\n scope[this.variable] = 0;\r\n }\r\n emitter.write(stringify(--scope[this.variable]));\r\n }\r\n}\n\nclass CycleTag extends Tag {\r\n constructor(token, remainTokens, liquid) {\r\n super(token, remainTokens, liquid);\r\n this.candidates = [];\r\n const group = this.tokenizer.readValue();\r\n this.tokenizer.skipBlank();\r\n if (group) {\r\n if (this.tokenizer.peek() === ':') {\r\n this.group = group;\r\n this.tokenizer.advance();\r\n }\r\n else\r\n this.candidates.push(group);\r\n }\r\n while (!this.tokenizer.end()) {\r\n const value = this.tokenizer.readValue();\r\n if (value)\r\n this.candidates.push(value);\r\n this.tokenizer.readTo(',');\r\n }\r\n this.tokenizer.assert(this.candidates.length, () => `empty candidates: \"${token.getText()}\"`);\r\n }\r\n *render(ctx, emitter) {\r\n const group = (yield evalToken(this.group, ctx));\r\n const fingerprint = `cycle:${group}:` + this.candidates.join(',');\r\n const groups = ctx.getRegister('cycle');\r\n let idx = groups[fingerprint];\r\n if (idx === undefined) {\r\n idx = groups[fingerprint] = 0;\r\n }\r\n const candidate = this.candidates[idx];\r\n idx = (idx + 1) % this.candidates.length;\r\n groups[fingerprint] = idx;\r\n return yield evalToken(candidate, ctx);\r\n }\r\n}\n\nclass IfTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid, parser) {\r\n super(tagToken, remainTokens, liquid);\r\n this.branches = [];\r\n let p = [];\r\n parser.parseStream(remainTokens)\r\n .on('start', () => this.branches.push({\r\n value: new Value(tagToken.args, this.liquid),\r\n templates: (p = [])\r\n }))\r\n .on('tag:elsif', (token) => {\r\n assert(!this.elseTemplates, 'unexpected elsif after else');\r\n this.branches.push({\r\n value: new Value(token.args, this.liquid),\r\n templates: (p = [])\r\n });\r\n })\r\n .on('tag:else', tag => {\r\n assertEmpty(tag.args);\r\n assert(!this.elseTemplates, 'duplicated else');\r\n p = this.elseTemplates = [];\r\n })\r\n .on('tag:endif', function (tag) { assertEmpty(tag.args); this.stop(); })\r\n .on('template', (tpl) => p.push(tpl))\r\n .on('end', () => { throw new Error(`tag ${tagToken.getText()} not closed`); })\r\n .start();\r\n }\r\n *render(ctx, emitter) {\r\n const r = this.liquid.renderer;\r\n for (const { value, templates } of this.branches) {\r\n const v = yield value.value(ctx, ctx.opts.lenientIf);\r\n if (isTruthy(v, ctx)) {\r\n yield r.renderTemplates(templates, ctx, emitter);\r\n return;\r\n }\r\n }\r\n yield r.renderTemplates(this.elseTemplates || [], ctx, emitter);\r\n }\r\n}\n\nclass IncrementTag extends Tag {\r\n constructor(token, remainTokens, liquid) {\r\n super(token, remainTokens, liquid);\r\n this.variable = this.tokenizer.readIdentifier().content;\r\n }\r\n render(context, emitter) {\r\n const scope = context.environments;\r\n if (!isNumber(scope[this.variable])) {\r\n scope[this.variable] = 0;\r\n }\r\n const val = scope[this.variable];\r\n scope[this.variable]++;\r\n emitter.write(stringify(val));\r\n }\r\n}\n\nclass LayoutTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n this.file = parseFilePath(this.tokenizer, this.liquid, parser);\r\n this['currentFile'] = token.file;\r\n this.args = new Hash(this.tokenizer.remaining(), liquid.options.keyValueSeparator);\r\n this.templates = parser.parseTokens(remainTokens);\r\n }\r\n *render(ctx, emitter) {\r\n const { liquid, args, file } = this;\r\n const { renderer } = liquid;\r\n if (file === undefined) {\r\n ctx.setRegister('blockMode', BlockMode.OUTPUT);\r\n yield renderer.renderTemplates(this.templates, ctx, emitter);\r\n return;\r\n }\r\n const filepath = (yield renderFilePath(this.file, ctx, liquid));\r\n assert(filepath, () => `illegal file path \"${filepath}\"`);\r\n const templates = (yield liquid._parseLayoutFile(filepath, ctx.sync, this['currentFile']));\r\n // render remaining contents and store rendered results\r\n ctx.setRegister('blockMode', BlockMode.STORE);\r\n const html = yield renderer.renderTemplates(this.templates, ctx);\r\n const blocks = ctx.getRegister('blocks');\r\n // set whole content to anonymous block if anonymous doesn't specified\r\n if (blocks[''] === undefined)\r\n blocks[''] = (parent, emitter) => emitter.write(html);\r\n ctx.setRegister('blockMode', BlockMode.OUTPUT);\r\n // render the layout file use stored blocks\r\n ctx.push((yield args.render(ctx)));\r\n yield renderer.renderTemplates(templates, ctx, emitter);\r\n ctx.pop();\r\n }\r\n}\n\nclass BlockTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n this.templates = [];\r\n const match = /\\w+/.exec(token.args);\r\n this.block = match ? match[0] : '';\r\n while (remainTokens.length) {\r\n const token = remainTokens.shift();\r\n if (isTagToken(token) && token.name === 'endblock')\r\n return;\r\n const template = parser.parseToken(token, remainTokens);\r\n this.templates.push(template);\r\n }\r\n throw new Error(`tag ${token.getText()} not closed`);\r\n }\r\n *render(ctx, emitter) {\r\n const blockRender = this.getBlockRender(ctx);\r\n if (ctx.getRegister('blockMode') === BlockMode.STORE) {\r\n ctx.getRegister('blocks')[this.block] = blockRender;\r\n }\r\n else {\r\n yield blockRender(new BlockDrop(), emitter);\r\n }\r\n }\r\n getBlockRender(ctx) {\r\n const { liquid, templates } = this;\r\n const renderChild = ctx.getRegister('blocks')[this.block];\r\n const renderCurrent = function* (superBlock, emitter) {\r\n // add {{ block.super }} support when rendering\r\n ctx.push({ block: superBlock });\r\n yield liquid.renderer.renderTemplates(templates, ctx, emitter);\r\n ctx.pop();\r\n };\r\n return renderChild\r\n ? (superBlock, emitter) => renderChild(new BlockDrop(() => renderCurrent(superBlock, emitter)), emitter)\r\n : renderCurrent;\r\n }\r\n}\n\nclass RawTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid) {\r\n super(tagToken, remainTokens, liquid);\r\n this.tokens = [];\r\n while (remainTokens.length) {\r\n const token = remainTokens.shift();\r\n if (isTagToken(token) && token.name === 'endraw')\r\n return;\r\n this.tokens.push(token);\r\n }\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n }\r\n render() {\r\n return this.tokens.map((token) => token.getText()).join('');\r\n }\r\n}\n\nclass TablerowloopDrop extends ForloopDrop {\r\n constructor(length, cols, collection, variable) {\r\n super(length, collection, variable);\r\n this.length = length;\r\n this.cols = cols;\r\n }\r\n row() {\r\n return Math.floor(this.i / this.cols) + 1;\r\n }\r\n col0() {\r\n return (this.i % this.cols);\r\n }\r\n col() {\r\n return this.col0() + 1;\r\n }\r\n col_first() {\r\n return this.col0() === 0;\r\n }\r\n col_last() {\r\n return this.col() === this.cols;\r\n }\r\n}\n\nclass TablerowTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid, parser) {\r\n super(tagToken, remainTokens, liquid);\r\n const variable = this.tokenizer.readIdentifier();\r\n this.tokenizer.skipBlank();\r\n const predicate = this.tokenizer.readIdentifier();\r\n const collectionToken = this.tokenizer.readValue();\r\n if (predicate.content !== 'in' || !collectionToken) {\r\n throw new Error(`illegal tag: ${tagToken.getText()}`);\r\n }\r\n this.variable = variable.content;\r\n this.collection = collectionToken;\r\n this.args = new Hash(this.tokenizer.remaining(), liquid.options.keyValueSeparator);\r\n this.templates = [];\r\n let p;\r\n const stream = parser.parseStream(remainTokens)\r\n .on('start', () => (p = this.templates))\r\n .on('tag:endtablerow', () => stream.stop())\r\n .on('template', (tpl) => p.push(tpl))\r\n .on('end', () => {\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n });\r\n stream.start();\r\n }\r\n *render(ctx, emitter) {\r\n let collection = toEnumerable(yield evalToken(this.collection, ctx));\r\n const args = (yield this.args.render(ctx));\r\n const offset = args.offset || 0;\r\n const limit = (args.limit === undefined) ? collection.length : args.limit;\r\n collection = collection.slice(offset, offset + limit);\r\n const cols = args.cols || collection.length;\r\n const r = this.liquid.renderer;\r\n const tablerowloop = new TablerowloopDrop(collection.length, cols, this.collection.getText(), this.variable);\r\n const scope = { tablerowloop };\r\n ctx.push(scope);\r\n for (let idx = 0; idx < collection.length; idx++, tablerowloop.next()) {\r\n scope[this.variable] = collection[idx];\r\n if (tablerowloop.col0() === 0) {\r\n if (tablerowloop.row() !== 1)\r\n emitter.write('</tr>');\r\n emitter.write(`<tr class=\"row${tablerowloop.row()}\">`);\r\n }\r\n emitter.write(`<td class=\"col${tablerowloop.col()}\">`);\r\n yield r.renderTemplates(this.templates, ctx, emitter);\r\n emitter.write('</td>');\r\n }\r\n if (collection.length)\r\n emitter.write('</tr>');\r\n ctx.pop();\r\n }\r\n}\n\nclass UnlessTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid, parser) {\r\n super(tagToken, remainTokens, liquid);\r\n this.branches = [];\r\n this.elseTemplates = [];\r\n let p = [];\r\n let elseCount = 0;\r\n parser.parseStream(remainTokens)\r\n .on('start', () => this.branches.push({\r\n value: new Value(tagToken.args, this.liquid),\r\n test: isFalsy,\r\n templates: (p = [])\r\n }))\r\n .on('tag:elsif', (token) => {\r\n if (elseCount > 0) {\r\n p = [];\r\n return;\r\n }\r\n this.branches.push({\r\n value: new Value(token.args, this.liquid),\r\n test: isTruthy,\r\n templates: (p = [])\r\n });\r\n })\r\n .on('tag:else', () => {\r\n elseCount++;\r\n p = this.elseTemplates;\r\n })\r\n .on('tag:endunless', function () { this.stop(); })\r\n .on('template', (tpl) => {\r\n if (p !== this.elseTemplates || elseCount === 1) {\r\n p.push(tpl);\r\n }\r\n })\r\n .on('end', () => { throw new Error(`tag ${tagToken.getText()} not closed`); })\r\n .start();\r\n }\r\n *render(ctx, emitter) {\r\n const r = this.liquid.renderer;\r\n for (const { value, test, templates } of this.branches) {\r\n const v = yield value.value(ctx, ctx.opts.lenientIf);\r\n if (test(v, ctx)) {\r\n yield r.renderTemplates(templates, ctx, emitter);\r\n return;\r\n }\r\n }\r\n yield r.renderTemplates(this.elseTemplates, ctx, emitter);\r\n }\r\n}\n\nclass BreakTag extends Tag {\r\n render(ctx, emitter) {\r\n emitter['break'] = true;\r\n }\r\n}\n\nclass ContinueTag extends Tag {\r\n render(ctx, emitter) {\r\n emitter['continue'] = true;\r\n }\r\n}\n\nclass EchoTag extends Tag {\r\n constructor(token, remainTokens, liquid) {\r\n super(token, remainTokens, liquid);\r\n this.tokenizer.skipBlank();\r\n if (!this.tokenizer.end()) {\r\n this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid);\r\n }\r\n }\r\n *render(ctx, emitter) {\r\n if (!this.value)\r\n return;\r\n const val = yield this.value.value(ctx, false);\r\n emitter.write(val);\r\n }\r\n}\n\nclass LiquidTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n const tokens = this.tokenizer.readLiquidTagTokens(this.liquid.options);\r\n this.templates = parser.parseTokens(tokens);\r\n }\r\n *render(ctx, emitter) {\r\n yield this.liquid.renderer.renderTemplates(this.templates, ctx, emitter);\r\n }\r\n}\n\nclass InlineCommentTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid) {\r\n super(tagToken, remainTokens, liquid);\r\n if (tagToken.args.search(/\\n\\s*[^#\\s]/g) !== -1) {\r\n throw new Error('every line of an inline comment must start with a \\'#\\' character');\r\n }\r\n }\r\n render() { }\r\n}\n\nconst tags = {\r\n assign: AssignTag,\r\n 'for': ForTag,\r\n capture: CaptureTag,\r\n 'case': CaseTag,\r\n comment: CommentTag,\r\n include: IncludeTag,\r\n render: RenderTag,\r\n decrement: DecrementTag,\r\n increment: IncrementTag,\r\n cycle: CycleTag,\r\n 'if': IfTag,\r\n layout: LayoutTag,\r\n block: BlockTag,\r\n raw: RawTag,\r\n tablerow: TablerowTag,\r\n unless: UnlessTag,\r\n 'break': BreakTag,\r\n 'continue': ContinueTag,\r\n echo: EchoTag,\r\n liquid: LiquidTag,\r\n '#': InlineCommentTag\r\n};\n\nclass Liquid {\r\n constructor(opts = {}) {\r\n this.renderer = new Render();\r\n this.filters = {};\r\n this.tags = {};\r\n this.options = normalize(opts);\r\n // eslint-disable-next-line deprecation/deprecation\r\n this.parser = new Parser(this);\r\n forOwn(tags, (conf, name) => this.registerTag(name, conf));\r\n forOwn(filters, (handler, name) => this.registerFilter(name, handler));\r\n }\r\n parse(html, filepath) {\r\n const parser = new Parser(this);\r\n return parser.parse(html, filepath);\r\n }\r\n _render(tpl, scope, renderOptions) {\r\n const ctx = scope instanceof Context ? scope : new Context(scope, this.options, renderOptions);\r\n return this.renderer.renderTemplates(tpl, ctx);\r\n }\r\n render(tpl, scope, renderOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return toPromise(this._render(tpl, scope, Object.assign(Object.assign({}, renderOptions), { sync: false })));\r\n });\r\n }\r\n renderSync(tpl, scope, renderOptions) {\r\n return toValueSync(this._render(tpl, scope, Object.assign(Object.assign({}, renderOptions), { sync: true })));\r\n }\r\n renderToNodeStream(tpl, scope, renderOptions = {}) {\r\n const ctx = new Context(scope, this.options, renderOptions);\r\n return this.renderer.renderTemplatesToNodeStream(tpl, ctx);\r\n }\r\n _parseAndRender(html, scope, renderOptions) {\r\n const tpl = this.parse(html);\r\n return this._render(tpl, scope, renderOptions);\r\n }\r\n parseAndRender(html, scope, renderOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return toPromise(this._parseAndRender(html, scope, Object.assign(Object.assign({}, renderOptions), { sync: false })));\r\n });\r\n }\r\n parseAndRenderSync(html, scope, renderOptions) {\r\n return toValueSync(this._parseAndRender(html, scope, Object.assign(Object.assign({}, renderOptions), { sync: true })));\r\n }\r\n _parsePartialFile(file, sync, currentFile) {\r\n return new Parser(this).parseFile(file, sync, LookupType.Partials, currentFile);\r\n }\r\n _parseLayoutFile(file, sync, currentFile) {\r\n return new Parser(this).parseFile(file, sync, LookupType.Layouts, currentFile);\r\n }\r\n _parseFile(file, sync, lookupType, currentFile) {\r\n return new Parser(this).parseFile(file, sync, lookupType, currentFile);\r\n }\r\n parseFile(file, lookupType) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return toPromise(new Parser(this).parseFile(file, false, lookupType));\r\n });\r\n }\r\n parseFileSync(file, lookupType) {\r\n return toValueSync(new Parser(this).parseFile(file, true, lookupType));\r\n }\r\n *_renderFile(file, ctx, renderFileOptions) {\r\n const templates = (yield this._parseFile(file, renderFileOptions.sync, renderFileOptions.lookupType));\r\n return yield this._render(templates, ctx, renderFileOptions);\r\n }\r\n renderFile(file, ctx, renderFileOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return toPromise(this._renderFile(file, ctx, Object.assign(Object.assign({}, renderFileOptions), { sync: false })));\r\n });\r\n }\r\n renderFileSync(file, ctx, renderFileOptions) {\r\n return toValueSync(this._renderFile(file, ctx, Object.assign(Object.assign({}, renderFileOptions), { sync: true })));\r\n }\r\n renderFileToNodeStream(file, scope, renderOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const templates = yield this.parseFile(file);\r\n return this.renderToNodeStream(templates, scope, renderOptions);\r\n });\r\n }\r\n _evalValue(str, scope) {\r\n const value = new Value(str, this);\r\n const ctx = scope instanceof Context ? scope : new Context(scope, this.options);\r\n return value.value(ctx);\r\n }\r\n evalValue(str, scope) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return toPromise(this._evalValue(str, scope));\r\n });\r\n }\r\n evalValueSync(str, scope) {\r\n return toValueSync(this._evalValue(str, scope));\r\n }\r\n registerFilter(name, filter) {\r\n this.filters[name] = filter;\r\n }\r\n registerTag(name, tag) {\r\n this.tags[name] = isFunction(tag) ? tag : createTagClass(tag);\r\n }\r\n plugin(plugin) {\r\n return plugin.call(this, Liquid);\r\n }\r\n express() {\r\n const self = this; // eslint-disable-line\r\n let firstCall = true;\r\n return function (filePath, ctx, callback) {\r\n if (firstCall) {\r\n firstCall = false;\r\n const dirs = normalizeDirectoryList(this.root);\r\n self.options.root.unshift(...dirs);\r\n self.options.layouts.unshift(...dirs);\r\n self.options.partials.unshift(...dirs);\r\n }\r\n self.renderFile(filePath, ctx).then(html => callback(null, html), callback);\r\n };\r\n }\r\n}\n\n/* istanbul ignore file */\r\nconst version = '[VI]{version}[/VI]';\n\nexport { AssertionError, AssignTag, BlockTag, BreakTag, CaptureTag, CaseTag, CommentTag, Context, ContinueTag, CycleTag, DecrementTag, Drop, EchoTag, Expression, Filter, ForTag, Hash, IfTag, IncludeTag, IncrementTag, InlineCommentTag, LayoutTag, Liquid, LiquidError, LiquidTag, Output, ParseError, ParseStream, RawTag, RenderError, RenderTag, TablerowTag, Tag, TagToken, Token, TokenKind, TokenizationError, Tokenizer, typeGuards as TypeGuards, UndefinedVariableError, UnlessTag, Value, assert, createTrie, defaultOperators, defaultOptions, evalQuotedToken, evalToken, filters, isFalsy, isTruthy, tags, toPromise, toValue, toValueSync, version };\n","var nargs = /\\{([0-9a-zA-Z_]+)\\}/g\n\nmodule.exports = template\n\nfunction template(string) {\n var args\n\n if (arguments.length === 2 && typeof arguments[1] === \"object\") {\n args = arguments[1]\n } else {\n args = new Array(arguments.length - 1)\n for (var i = 1; i < arguments.length; ++i) {\n args[i - 1] = arguments[i]\n }\n }\n\n if (!args || !args.hasOwnProperty) {\n args = {}\n }\n\n return string.replace(nargs, function replaceArg(match, i, index) {\n var result\n\n if (string[index - 1] === \"{\" &&\n string[index + match.length] === \"}\") {\n return i\n } else {\n result = args.hasOwnProperty(i) ? args[i] : null\n if (result === null || result === undefined) {\n return \"\"\n }\n\n return result\n }\n })\n}\n","import{defineComponent as e,ref as l,watch as a,computed as t,h as n}from\"vue\";import u from\"highlight.js/lib/core\";var r=e({props:{code:{type:String,required:!0},language:{type:String,default:\"\"},autodetect:{type:Boolean,default:!0},ignoreIllegals:{type:Boolean,default:!0}},setup:function(e){var n=l(e.language);a((function(){return e.language}),(function(e){n.value=e}));var r=t((function(){return e.autodetect||!n.value})),o=t((function(){return!r.value&&!u.getLanguage(n.value)}));return{className:t((function(){return o.value?\"\":\"hljs \"+n.value})),highlightedCode:t((function(){var l;if(o.value)return console.warn('The language \"'+n.value+'\" you specified could not be found.'),e.code.replace(/&/g,\"&\").replace(/</g,\"<\").replace(/>/g,\">\").replace(/\"/g,\""\").replace(/'/g,\"'\");if(r.value){var a=u.highlightAuto(e.code);return n.value=null!==(l=a.language)&&void 0!==l?l:\"\",a.value}return(a=u.highlight(e.code,{language:n.value,ignoreIllegals:e.ignoreIllegals})).value}))}},render:function(){return n(\"pre\",{},[n(\"code\",{class:this.className,innerHTML:this.highlightedCode})])}}),o={install:function(e){e.component(\"highlightjs\",r)},component:r};export default o;\n","<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nconst props = defineProps<{\n label: string;\n text: string;\n}>();\n\nconst { t } = useI18n();\nconst copied = ref(false);\n\nconst copyToClipboard = () => {\n copied.value = true;\n navigator.clipboard.writeText(props.text);\n setTimeout(() => {\n copied.value = false;\n }, 2000);\n};\n</script>\n\n<template>\n <a\n class=\"mr-2 inline-flex cursor-pointer items-center text-sm text-gnist-white\"\n role=\"button\"\n @click=\"copyToClipboard\"\n >\n {{ t(label) }}\n <Transition>\n <span\n v-if=\"!copied\"\n role=\"img\"\n aria-hidden=\"true\"\n class=\"material-symbols-rounded ml-1 text-xl text-gnist-white\"\n >\n content_copy\n </span>\n </Transition>\n <Transition>\n <span\n v-if=\"copied\"\n role=\"img\"\n aria-hidden=\"true\"\n class=\"material-symbols-rounded ml-1 text-xl text-gnist-green\"\n >\n done\n </span>\n </Transition>\n </a>\n</template>\n","<script lang=\"ts\">\nexport function getEndPointWithParams(\n endPoint: string,\n pathParams: Record<string, string>,\n queryParams: Record<string, string>,\n) {\n let queryString = Object.entries(queryParams)\n .filter(([, value]) => !!value)\n .map(\n ([key, value]) =>\n `${encodeURIComponent(key)}=${encodeURIComponent(value)}`,\n )\n .join('&');\n if (queryString) {\n queryString = '?' + queryString;\n }\n return format(endPoint, pathParams) + queryString;\n}\n</script>\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { templates } from '@/utilities/templates';\nimport { Liquid } from 'liquidjs';\nimport type {\n ApiDTO,\n ConsoleOperation,\n ConsoleHeader,\n RequestHeader,\n} from '@/api/types';\nimport format from 'string-template';\nimport { useI18n } from 'vue-i18n';\nimport hljsVuePlugin from '@highlightjs/vue-plugin';\nimport { useCssReorder } from '@/utilities/useCssReorder';\nimport CopyButton from './CopyButton.vue';\n\nimport('highlight.js/styles/stackoverflow-dark.css');\n\nconst HighlightJs = hljsVuePlugin.component;\nuseCssReorder('stackoverflow-dark');\n\nconst { t } = useI18n();\n\nconst props = defineProps<{\n method: string | undefined;\n headers: RequestHeader[] | undefined;\n apiData: ApiDTO | null;\n apiKey: string | null;\n endPoint: string;\n pathParams: Record<string, string>;\n queryParams: Record<string, string>;\n body: string;\n token: string | undefined;\n}>();\n\nconst selectedLanguage = ref<keyof typeof templates>('HTTP');\nconst showSecrets = ref(false);\nconst languages = Object.keys(templates);\nconst engine = new Liquid();\n\nconst endPointWithParams = computed(() =>\n getEndPointWithParams(props.endPoint, props.pathParams, props.queryParams),\n);\n\nfunction getCodeSample(showKeys: boolean) {\n if (!props.headers || !props.apiData) return '';\n\n const authHeader = {\n name: props.apiData.subscriptionKeyHeader,\n value: props.apiKey,\n hiddenValue: props.apiKey\n ? '•••••••••••••••••••'\n : t('console.orderAccess'),\n secret: true,\n } as ConsoleHeader;\n\n const bearerHeader = {\n name: 'Authorization',\n value: 'Bearer ' + props.token,\n hiddenValue: 'Bearer •••••••••••••••••••',\n secret: true,\n } as ConsoleHeader;\n\n const requestHeaders = props.headers.map((h) => {\n return {\n name: h.name,\n value: h.parameterContractType,\n } as ConsoleHeader;\n });\n\n const headers = props.token\n ? [authHeader, bearerHeader, ...(requestHeaders ?? [])]\n : [authHeader, ...(requestHeaders ?? [])];\n\n const consoleOperation = {\n method: props.method,\n requestUrl: endPointWithParams.value,\n request: {\n meaningfulHeaders: headers,\n bodyFormat: 'raw',\n body: props.body,\n },\n } as ConsoleOperation;\n\n const languageKey: string = selectedLanguage.value;\n const template = templates[languageKey as keyof typeof templates];\n\n const sample = engine.parseAndRenderSync(template, {\n console: consoleOperation,\n showSecrets: showKeys,\n });\n\n return sample;\n}\n\nconst codeSample = computed(() => getCodeSample(showSecrets.value));\nconst codeSampleWithKeys = computed(() => getCodeSample(true));\n</script>\n\n<template>\n <section class=\"rounded-t-2xl bg-gnist-gray-dark p-8\">\n <div>\n <h2 class=\"mb-6 text-gnist-white\">\n {{ t('console.httpRequest') }}\n </h2>\n <select\n v-model=\"selectedLanguage\"\n class=\"mt-2 h-8 w-full rounded border text-gnist-black\"\n >\n <option\n v-for=\"(language, index) in languages\"\n :key=\"index\"\n :value=\"language\"\n >\n {{ language }}\n </option>\n </select>\n\n <div class=\"mb-10 mt-2 flex flex-col flex-wrap sm:flex-row\">\n <a\n class=\"inline-flex w-32 cursor-pointer items-center text-sm text-gnist-white\"\n role=\"button\"\n @click=\"showSecrets = !showSecrets\"\n >{{ showSecrets ? t('console.hideKeys') : t('console.showKeys') }}\n <span\n role=\"img\"\n aria-hidden=\"true\"\n class=\"material-symbols-rounded ml-1 mr-5 text-xl text-gnist-white\"\n >\n key\n </span>\n </a>\n\n <CopyButton :text=\"codeSampleWithKeys\" label=\"console.copy\" />\n <CopyButton\n v-if=\"apiKey != undefined\"\n :text=\"apiKey\"\n label=\"console.copyKey\"\n />\n <CopyButton\n v-if=\"token != undefined\"\n :text=\"token\"\n label=\"console.copyToken\"\n />\n </div>\n </div>\n <div class=\"code-sample break-words text-sm\">\n <HighlightJs autodetect :code=\"codeSample\" />\n </div>\n </section>\n</template>\n\n<style>\n.v-enter-active {\n transition: opacity 0.5s ease;\n}\n\n.v-enter-from {\n opacity: 0;\n}\n\n.code-sample pre code.hljs {\n overflow: hidden;\n white-space: pre-wrap;\n background-color: inherit;\n padding: 0;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { useI18n } from 'vue-i18n';\nimport LoadingSpinner from './LoadingSpinner.vue';\n\nconst { t } = useI18n();\n\ndefineProps<{\n responseData: string | undefined;\n showSpinner: boolean;\n}>();\n</script>\n\n<template>\n <section\n class=\"rounded-b-2xl border border-t-0 border-gnist-gray-dark bg-gnist-gray-light-light p-8 shadow-md\"\n >\n <h2 class=\"mb-6\">\n {{ t('console.httpResponse') }}\n </h2>\n <div v-if=\"showSpinner\" class=\"flex justify-center\">\n <LoadingSpinner class=\"h-16 w-16\" />\n </div>\n <div v-else>\n <p\n class=\"whitespace-pre-wrap break-words font-mono text-sm text-gnist-black\"\n >\n {{ responseData }}\n </p>\n </div>\n </section>\n</template>\n","<script setup lang=\"ts\">\nimport MarkdownRenderer from '@/components/block/MarkdownRenderer.vue';\nimport type { ApiOperation, Guid } from '@/api/types';\nimport { useRoute } from 'vue-router';\nimport idEncode from '@/utilities/idEncode';\nimport { getBlocksRouteLink } from '@/utilities/routeUtils';\nimport { useI18n } from 'vue-i18n';\n\nconst { t } = useI18n();\n\nconst route = useRoute();\n\ndefineProps<{\n operation: Pick<ApiOperation, 'name' | 'method' | 'description'>;\n endPoint: string;\n}>();\n</script>\n\n<template>\n <section class=\"text-gnist-black\">\n <table class=\"text-left\">\n <tbody>\n <tr>\n <th class=\"pr-4 font-semibold\">\n {{ t('console.documentation') }}\n </th>\n <td>\n <RouterLink\n class=\"underline\"\n :to=\"\n getBlocksRouteLink(\n route.params.blockId as Guid,\n undefined,\n `#${idEncode(operation.name)}`,\n )\n \"\n >\n {{ operation.name ?? '' }}\n </RouterLink>\n </td>\n </tr>\n <tr>\n <th class=\"font-semibold\">{{ t('console.endpoint') }}:</th>\n <td>{{ endPoint }}</td>\n </tr>\n <tr>\n <th class=\"font-semibold\">{{ t('console.method') }}:</th>\n <td>{{ operation?.method ?? '' }}</td>\n </tr>\n </tbody>\n </table>\n <MarkdownRenderer\n v-if=\"operation?.description\"\n :value=\"operation.description\"\n blob-location=\"public\"\n class=\"mt-6\"\n />\n </section>\n</template>\n","<script lang=\"ts\">\nimport type { PathParameter, PartialSome } from '@/api/types';\nexport type OperationParam = PartialSome<PathParameter, 'isRequired'>;\n</script>\n\n<script setup lang=\"ts\">\nimport { watch } from 'vue';\nimport TextInput from '@/components/forms/InputText.vue';\nimport Dropdown, {\n stringToDropdownItems,\n} from '@/components/forms/InputDropdown.vue';\nimport { useNestedMV } from '@/utilities/useInternalState';\nimport { useI18n } from 'vue-i18n';\n\nconst props = defineProps<{\n label: string;\n params: OperationParam[];\n modelValue: Record<string, string>;\n}>();\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: typeof props.modelValue): void;\n}>();\n\nconst { t } = useI18n();\n\nconst value = useNestedMV(props, (val) => emit('update:modelValue', val));\n\n/** This requires the description to contain this specific text, so it might not be a good permanent solution. However, it might work sometimes. */\nfunction getExample(param: OperationParam): string | undefined {\n if (!param.description) return undefined;\n return param.description.match(/Example:\\s*(`|'|\")(?<example>.*)(`|'|\")/)\n ?.groups?.['example'];\n}\nwatch(\n props.params,\n () => {\n props.params\n .filter((p) => p.isRequired && (p.values?.length ?? 0) > 0)\n .forEach((p) => {\n value.value[p.name] = p.values![0]!;\n });\n },\n { once: true, immediate: true },\n);\n</script>\n\n<template>\n <h3 v-if=\"params.length > 0\">{{ t(label) }}</h3>\n <template v-for=\"param in params\" :key=\"param.name\">\n <TextInput\n v-if=\"(param.values?.length ?? 0) === 0\"\n v-model=\"value[param.name]\"\n :for-name=\"`param_${param.name}`\"\n :label=\"param.name\"\n :tooltip=\"param.description\"\n :required=\"param.isRequired\"\n :placeholder=\"getExample(param)\"\n description-style=\"inline\"\n />\n <Dropdown\n v-else\n v-model=\"value[param.name]\"\n :for-name=\"`param_${param.name}`\"\n :label=\"param.name\"\n :tooltip=\"param.description\"\n :required=\"param.isRequired\"\n :placeholder=\"getExample(param)\"\n description-style=\"inline\"\n :options=\"stringToDropdownItems(param.values, !param.isRequired)\"\n :getkey=\"(val) => val ?? 'empty'\"\n />\n </template>\n</template>\n","/** Clamps a middle value within a range of values between a defined minimum bound and a maximum bound.\n The function takes three parameters: a minimum value, a preferred value, and a maximum allowed value. */\nexport function clamp(\n min: number,\n val: number | undefined | null,\n max: number,\n) {\n return Math.max(Math.min(val ?? 0, max), min);\n}\n","<script lang=\"ts\" setup>\nimport { useRoute } from 'vue-router';\nimport { computed, onBeforeUnmount, onMounted, ref, watchEffect } from 'vue';\nimport { getBlock } from '@/api/blocks';\nimport { callApi, getApiSubscriptions, getApiData } from '@/api/apiM';\nimport ContentPage from '@/components/ContentPage.vue';\nimport Dropdown, {\n toDropdownItems,\n} from '@/components/forms/InputDropdown.vue';\nimport TextInput from '@/components/forms/InputText.vue';\nimport MaterialIcon from '@/components/MaterialIcon.vue';\nimport HttpRequest, {\n getEndPointWithParams,\n} from '@/components/HttpRequest.vue';\nimport HttpResponse from '@/components/HttpResponse.vue';\nimport ApiOperationsHeader from '@/components/ApiOperationsHeader.vue';\nimport {\n type Block,\n type ApiOperation,\n type ApiDTO,\n type ApiMSubscriptionDTO,\n type Guid,\n getApimDetails,\n type RequestHeader,\n} from '@/api/types';\nimport { firstParam } from '@/utilities/firstParam';\nimport { computeEndpoint } from '@/utilities/computeEndpoint';\nimport { useI18n } from 'vue-i18n';\nimport ButtonComponent from '@/components/ButtonComponent.vue';\nimport { ParagraphShimmer } from 'vue3-shimmer';\nimport { apiUrl } from '@/config';\nimport { useCurrentUser } from '@/api/auth';\nimport ApiParameterInput, {\n type OperationParam,\n} from '@/components/ApiParameterInput.vue';\nimport { apimproductsRouteId } from '@/config';\nimport { clamp } from '@/utilities/clamp';\n\nconst { t } = useI18n();\n\nconst route = useRoute();\nconst authUrl = `${apiUrl}/apim/auth`;\nconst userInfo = useCurrentUser();\nconst pathParams = ref<Record<string, string>>({});\nconst queryParams = ref<Record<string, string>>({});\nconst body = ref('');\nconst validBody = ref(true);\nconst responseData = ref<string>();\nconst token = ref<string | undefined>(undefined);\n\nconst block = ref<Block | null>(null);\nconst apiData = ref<(ApiDTO & { useAuth: boolean }) | null>(null);\nconst operation = ref<\n | (Pick<ApiOperation, 'name' | 'method' | 'description' | 'templateUrl'> & {\n headers: RequestHeader[];\n pathParams: OperationParam[];\n queryParams: OperationParam[];\n bodyExamples:\n | {\n /** Not used for now, but we could add a representation selector later if there are multiple representations available. */\n id: string;\n value: string;\n }[]\n | undefined;\n })\n | null\n>(null);\nconst selectedOperation = firstParam(route.params.selectedOperation) || '';\nconst subscriptions = ref<ApiMSubscriptionDTO[] | null>(null);\nconst selectedKey = ref<string | null>(null);\n\nconst title = ref(t('header.items.console', 'API-konsoll'));\nconst subTitle = ref<string>();\n\nfunction validateBody() {\n try {\n body.value = JSON.stringify(JSON.parse(body.value), null, 2);\n validBody.value = true;\n } catch {\n validBody.value = false;\n }\n}\n\nwatchEffect(async () => {\n if (route?.name !== 'console') return;\n\n const blockId = route.params.blockId as Guid;\n const queryVersionNumber = firstParam(route.query['version']);\n block.value = await getBlock(blockId, queryVersionNumber ?? undefined);\n const apimConfig = getApimDetails(block.value.content);\n\n if (!apimConfig?.apimId) throw new Error('error.missing_api_param');\n\n title.value = apimConfig?.apimId;\n const data = await getApiData(apimConfig?.apimId);\n apiData.value = { ...data, useAuth: !!apimConfig.useAuthentication };\n title.value = apiData.value.displayName;\n const op = apiData.value.operations.find(\n (op) => op.name == selectedOperation,\n );\n if (!op) operation.value = null;\n else {\n operation.value = {\n ...op,\n headers: op.request?.headers ?? [],\n pathParams: op.templateParameters ?? [],\n queryParams: op.request?.queryParameters ?? [],\n bodyExamples: op.request?.representations?.map((r) => ({\n id: r.typeName,\n value: r.examples?.default?.value,\n })),\n };\n if (operation.value?.bodyExamples?.length === 0) {\n operation.value.bodyExamples = undefined;\n }\n if (operation.value?.bodyExamples) {\n body.value = operation.value.bodyExamples[0]?.value ?? body.value;\n validateBody();\n }\n }\n if (!operation.value) throw new Error('error.unknown_operation');\n subTitle.value = operation.value.name;\n if (userInfo.value) {\n subscriptions.value = await getApiSubscriptions(apimConfig.apimId);\n selectedKey.value = subscriptions.value?.[0]?.primaryKey ?? null;\n }\n});\n\nconst keyOptions = computed(() =>\n toDropdownItems(\n subscriptions.value\n ?.map((s) => [\n [s.primaryKey, `${s.displayName}: ${t('console.primarySecurityKey')}`],\n [\n s.secondaryKey,\n `${s.displayName}: ${t('console.secondarySecurityKey')}`,\n ],\n ])\n .flat(1),\n ([key, text]) => [key, text],\n ),\n);\n\nconst endPoint = computed(() =>\n computeEndpoint(apiData.value, operation.value),\n);\n\nconst callingApi = ref(false);\nconst onSubmit = async () => {\n if (!selectedKey.value) {\n console.warn('Could not get selected key');\n return;\n }\n if (!apiData.value || !operation.value) return;\n\n const url = getEndPointWithParams(\n endPoint.value,\n pathParams.value,\n queryParams.value,\n );\n try {\n callingApi.value = true;\n const { data, resp, dataErr } = await callApi(\n url,\n operation.value.method,\n selectedKey.value,\n body.value,\n token.value,\n );\n responseData.value = `Status: ${resp.status}\\n\\n`;\n if (data) {\n responseData.value +=\n typeof data === 'string' ? data : JSON.stringify(data, null, 2);\n return;\n }\n if (dataErr) {\n responseData.value +=\n t('error.missing_data_from_api') + '\\nError: ' + dataErr;\n } else {\n responseData.value += t('error.missing_data_from_api');\n }\n callingApi.value = false;\n } catch (e) {\n if (`${e}`.toLowerCase().includes('failed to fetch')) {\n responseData.value = t('error.api_failed_to_fetch') + '\\nError: ' + e;\n } else {\n responseData.value = t('error.unknown_error_from_api') + '\\nError: ' + e;\n }\n callingApi.value = false;\n }\n};\n\nconst receiveMessage = async (event: MessageEvent): Promise<void> => {\n if (event.data['token']) {\n token.value = event.data['token'];\n }\n};\n\nonMounted(() => {\n window.addEventListener('message', receiveMessage, false);\n});\n\nonBeforeUnmount(() => {\n window.removeEventListener('message', receiveMessage);\n});\n\nfunction openLoginWindow() {\n window.open(authUrl, '_blank', 'width=400,height=500');\n}\n</script>\n\n<template>\n <ContentPage :title=\"title\" :sub-title=\"subTitle ?? selectedOperation\">\n <template #banner>\n <ApiOperationsHeader\n v-if=\"operation\"\n :operation=\"operation\"\n :end-point=\"endPoint\"\n />\n </template>\n\n <template #default>\n <ParagraphShimmer\n v-if=\"operation === null\"\n :lines=\"10\"\n :random-size=\"true\"\n class=\"mx-auto w-full max-w-5xl py-8\"\n />\n <section\n v-if=\"operation != null\"\n class=\"mb-16 mt-8 grid grid-cols-1 gap-6 lg:grid-cols-2\"\n >\n <section class=\"html-render rounded-2xl bg-gnist-white p-8\">\n <h2 class=\"mb-4\">{{ t('console.testYourself') }}</h2>\n <form @submit.prevent=\"onSubmit\">\n <div class=\"mt-2 flex flex-col py-4\">\n <Dropdown\n v-model=\"selectedKey\"\n label=\"console.chooseSecurityKey\"\n for-name=\"select-key\"\n :options=\"keyOptions\"\n :getkey=\"(val) => val\"\n />\n </div>\n <div v-if=\"apiData?.useAuth\" class=\"mt-3\">\n <ButtonComponent\n :text=\"\n token\n ? t('console.reAuthenticate')\n : t('console.authenticate')\n \"\n @click=\"openLoginWindow\"\n />\n </div>\n <div class=\"mb-8 flex gap-12\">\n <input\n class=\"gnist-button gnist-button-primary mt-8 min-w-[8rem]\"\n type=\"submit\"\n :value=\"t('console.tryItOut')\"\n :disabled=\"!selectedKey || callingApi\"\n />\n <div\n v-if=\"subscriptions && subscriptions.length === 0\"\n class=\"flex flex-col justify-between\"\n >\n <span class=\"italic\">\n {{ t('console.orderAccess') }}\n </span>\n <RouterLink :to=\"{ name: apimproductsRouteId }\">\n <ButtonComponent\n class=\"self-center\"\n type=\"primary\"\n :text=\"t('block.requestApiMAccess')\"\n />\n </RouterLink>\n </div>\n </div>\n <ApiParameterInput\n v-model=\"pathParams\"\n label=\"console.pathParams\"\n :params=\"operation.pathParams\"\n />\n <ApiParameterInput\n v-model=\"queryParams\"\n label=\"console.queryParams\"\n :params=\"operation.queryParams\"\n />\n <!-- TORGST, 11.3.24: Not sure if body should be visible always, but I believe this makes more sense. Might need to change it later. -->\n <div v-if=\"operation.bodyExamples\">\n <MaterialIcon\n v-if=\"!validBody\"\n class=\"absolute right-6 z-10 w-6 bg-gnist-red text-center text-gnist-white\"\n :title=\"t('console.invalidBody')\"\n >\n report\n </MaterialIcon>\n <button\n class=\"absolute right-0 z-10\"\n :title=\"t('console.validateBody')\"\n @click.prevent=\"validateBody\"\n >\n <MaterialIcon> published_with_changes </MaterialIcon>\n </button>\n <TextInput\n v-model=\"body\"\n for-name=\"request_body\"\n label=\"console.requestBody\"\n description-style=\"inline\"\n multiline\n :rows=\"\n clamp(\n 5,\n operation.bodyExamples[0]?.value.split('\\n').length,\n 10,\n )\n \"\n />\n </div>\n </form>\n </section>\n\n <div>\n <HttpRequest\n :api-operation=\"operation\"\n :method=\"operation?.method\"\n :headers=\"operation?.headers\"\n :api-data=\"apiData\"\n :api-key=\"selectedKey\"\n :end-point=\"endPoint\"\n :path-params=\"pathParams\"\n :query-params=\"queryParams\"\n :body=\"body\"\n :token=\"token\"\n />\n\n <HttpResponse\n :response-data=\"responseData\"\n :show-spinner=\"callingApi\"\n />\n </div>\n </section>\n </template>\n </ContentPage>\n</template>\n","import type { ApiMAnalyticsDTO, ContentAnalyticsDTO } from '@/api/types';\n\nconst dateOptions: Intl.DateTimeFormatOptions = {\n weekday: 'short',\n month: '2-digit',\n day: '2-digit',\n};\n\nfunction distinct<T>(array: T[]) {\n return [...new Set(array)];\n}\n\nfunction removePathPrefix(name: string) {\n return name.split('/').at(-1);\n}\n\nexport function getTotalApiCalls(\n apiMAnalytics: ApiMAnalyticsDTO,\n label: string,\n) {\n const apiReports = apiMAnalytics.apiMReportByOperation;\n const apiSet = distinct(apiReports.map((report) => report.apiId));\n\n const apiData = apiSet.map((apiId) => {\n const totalCalls = apiReports\n .filter((report) => report.apiId === apiId)\n .reduce((total, report) => total + report.callCountTotal, 0);\n return { apiId, totalCalls };\n });\n\n apiData.sort((a, b) => b.totalCalls - a.totalCalls);\n\n return {\n labels: apiData.map((data) => removePathPrefix(data.apiId)),\n datasets: [\n {\n label: label,\n data: apiData.map((data) => data.totalCalls),\n },\n ],\n };\n}\n\nexport function getCallsByTimestamp(\n apiMAnalytics: ApiMAnalyticsDTO,\n label: string,\n) {\n const labels = apiMAnalytics.apiMReportByTimestamp\n .map((report) => report.timestamp)\n .map((date) =>\n new Date(date)\n .toLocaleDateString(undefined, dateOptions)\n .replace(/\\.$/, ''),\n );\n const values = apiMAnalytics.apiMReportByTimestamp.map(\n (report) => report.callCountTotal,\n );\n return {\n labels: labels,\n datasets: [\n {\n label: label,\n data: values,\n },\n ],\n };\n}\n\nexport function getCallsByOperation(\n apiMAnalytics: ApiMAnalyticsDTO,\n label: string,\n) {\n const apiIds = distinct(\n apiMAnalytics.apiMReportByOperation.map((report) => report.apiId),\n );\n return apiIds.map((id) => {\n const data = apiMAnalytics.apiMReportByOperation\n .filter((report) => report.apiId === id)\n .map((report) => ({\n label: report.apiOperation,\n value: report.callCountTotal,\n }));\n return {\n key: id,\n hasNonZeroEntries: data.some((v) => v.value !== 0),\n data: {\n labels: data.map((v) => removePathPrefix(v.label)),\n datasets: [\n {\n label: label + ' ' + removePathPrefix(id),\n data: data.map((v) => v.value),\n },\n ],\n },\n };\n });\n}\n\nexport function getSubscriptionCounts(\n apiMAnalytics: ApiMAnalyticsDTO,\n label: string,\n) {\n const apiIds = apiMAnalytics.subscriptionCounts.map((report) => report.apiId);\n const counts = apiMAnalytics.subscriptionCounts.map((report) => report.count);\n return {\n labels: apiIds,\n datasets: [\n {\n label: label,\n data: counts,\n },\n ],\n };\n}\n\nexport function getBlocksCategoryGraph(\n analytics: ContentAnalyticsDTO,\n label: string,\n) {\n const blockNames = Object.keys(analytics.blockAnalytics.categoryCounts);\n const counts = Object.values(analytics.blockAnalytics.categoryCounts);\n\n return {\n labels: blockNames,\n datasets: [\n {\n label: label,\n data: counts,\n },\n ],\n };\n}\n\nexport function getBlocksFavoriteGraph(\n analytics: ContentAnalyticsDTO,\n label: string,\n) {\n const blockNames = Object.keys(analytics.blockAnalytics.favoriteCounts);\n const counts = Object.values(analytics.blockAnalytics.favoriteCounts);\n\n return {\n labels: blockNames,\n datasets: [\n {\n label: label,\n data: counts,\n },\n ],\n };\n}\n\nexport function getPageCommentsGraph(\n analytics: ContentAnalyticsDTO,\n label: string,\n) {\n const blockNames = Object.keys(analytics.commentsAnalytics.commentsCounts);\n const counts = Object.values(analytics.commentsAnalytics.commentsCounts);\n\n return {\n labels: blockNames,\n datasets: [\n {\n label: label,\n data: counts,\n },\n ],\n };\n}\n","/*!\n * @kurkle/color v0.3.2\n * https://github.com/kurkle/color#readme\n * (c) 2023 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n var len = str.length;\n var ret;\n if (str[0] === '#') {\n if (len === 4 || len === 5) {\n ret = {\n r: 255 & map$1[str[1]] * 17,\n g: 255 & map$1[str[2]] * 17,\n b: 255 & map$1[str[3]] * 17,\n a: len === 5 ? map$1[str[4]] * 17 : 255\n };\n } else if (len === 7 || len === 9) {\n ret = {\n r: map$1[str[1]] << 4 | map$1[str[2]],\n g: map$1[str[3]] << 4 | map$1[str[4]],\n b: map$1[str[5]] << 4 | map$1[str[6]],\n a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n };\n }\n }\n return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n var f = isShort(v) ? h1 : h2;\n return v\n ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n const rgb = hsl2rgbn(h, 1, 0.5);\n let i;\n if (w + b > 1) {\n i = 1 / (w + b);\n w *= i;\n b *= i;\n }\n for (i = 0; i < 3; i++) {\n rgb[i] *= 1 - w - b;\n rgb[i] += w;\n }\n return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n if (r === max) {\n return ((g - b) / d) + (g < b ? 6 : 0);\n }\n if (g === max) {\n return (b - r) / d + 2;\n }\n return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n const range = 255;\n const r = v.r / range;\n const g = v.g / range;\n const b = v.b / range;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h, s, d;\n if (max !== min) {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = hueValue(r, g, b, d, max);\n h = h * 60 + 0.5;\n }\n return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n return (\n Array.isArray(a)\n ? f(a[0], a[1], a[2])\n : f(a, b, c)\n ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n const m = HUE_RE.exec(str);\n let a = 255;\n let v;\n if (!m) {\n return;\n }\n if (m[5] !== v) {\n a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n }\n const h = hue(+m[2]);\n const p1 = +m[3] / 100;\n const p2 = +m[4] / 100;\n if (m[1] === 'hwb') {\n v = hwb2rgb(h, p1, p2);\n } else if (m[1] === 'hsv') {\n v = hsv2rgb(h, p1, p2);\n } else {\n v = hsl2rgb(h, p1, p2);\n }\n return {\n r: v[0],\n g: v[1],\n b: v[2],\n a: a\n };\n}\nfunction rotate(v, deg) {\n var h = rgb2hsl(v);\n h[0] = hue(h[0] + deg);\n h = hsl2rgb(h);\n v.r = h[0];\n v.g = h[1];\n v.b = h[2];\n}\nfunction hslString(v) {\n if (!v) {\n return;\n }\n const a = rgb2hsl(v);\n const h = a[0];\n const s = n2p(a[1]);\n const l = n2p(a[2]);\n return v.a < 255\n ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n x: 'dark',\n Z: 'light',\n Y: 're',\n X: 'blu',\n W: 'gr',\n V: 'medium',\n U: 'slate',\n A: 'ee',\n T: 'ol',\n S: 'or',\n B: 'ra',\n C: 'lateg',\n D: 'ights',\n R: 'in',\n Q: 'turquois',\n E: 'hi',\n P: 'ro',\n O: 'al',\n N: 'le',\n M: 'de',\n L: 'yello',\n F: 'en',\n K: 'ch',\n G: 'arks',\n H: 'ea',\n I: 'ightg',\n J: 'wh'\n};\nconst names$1 = {\n OiceXe: 'f0f8ff',\n antiquewEte: 'faebd7',\n aqua: 'ffff',\n aquamarRe: '7fffd4',\n azuY: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '0',\n blanKedOmond: 'ffebcd',\n Xe: 'ff',\n XeviTet: '8a2be2',\n bPwn: 'a52a2a',\n burlywood: 'deb887',\n caMtXe: '5f9ea0',\n KartYuse: '7fff00',\n KocTate: 'd2691e',\n cSO: 'ff7f50',\n cSnflowerXe: '6495ed',\n cSnsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: 'ffff',\n xXe: '8b',\n xcyan: '8b8b',\n xgTMnPd: 'b8860b',\n xWay: 'a9a9a9',\n xgYF: '6400',\n xgYy: 'a9a9a9',\n xkhaki: 'bdb76b',\n xmagFta: '8b008b',\n xTivegYF: '556b2f',\n xSange: 'ff8c00',\n xScEd: '9932cc',\n xYd: '8b0000',\n xsOmon: 'e9967a',\n xsHgYF: '8fbc8f',\n xUXe: '483d8b',\n xUWay: '2f4f4f',\n xUgYy: '2f4f4f',\n xQe: 'ced1',\n xviTet: '9400d3',\n dAppRk: 'ff1493',\n dApskyXe: 'bfff',\n dimWay: '696969',\n dimgYy: '696969',\n dodgerXe: '1e90ff',\n fiYbrick: 'b22222',\n flSOwEte: 'fffaf0',\n foYstWAn: '228b22',\n fuKsia: 'ff00ff',\n gaRsbSo: 'dcdcdc',\n ghostwEte: 'f8f8ff',\n gTd: 'ffd700',\n gTMnPd: 'daa520',\n Way: '808080',\n gYF: '8000',\n gYFLw: 'adff2f',\n gYy: '808080',\n honeyMw: 'f0fff0',\n hotpRk: 'ff69b4',\n RdianYd: 'cd5c5c',\n Rdigo: '4b0082',\n ivSy: 'fffff0',\n khaki: 'f0e68c',\n lavFMr: 'e6e6fa',\n lavFMrXsh: 'fff0f5',\n lawngYF: '7cfc00',\n NmoncEffon: 'fffacd',\n ZXe: 'add8e6',\n ZcSO: 'f08080',\n Zcyan: 'e0ffff',\n ZgTMnPdLw: 'fafad2',\n ZWay: 'd3d3d3',\n ZgYF: '90ee90',\n ZgYy: 'd3d3d3',\n ZpRk: 'ffb6c1',\n ZsOmon: 'ffa07a',\n ZsHgYF: '20b2aa',\n ZskyXe: '87cefa',\n ZUWay: '778899',\n ZUgYy: '778899',\n ZstAlXe: 'b0c4de',\n ZLw: 'ffffe0',\n lime: 'ff00',\n limegYF: '32cd32',\n lRF: 'faf0e6',\n magFta: 'ff00ff',\n maPon: '800000',\n VaquamarRe: '66cdaa',\n VXe: 'cd',\n VScEd: 'ba55d3',\n VpurpN: '9370db',\n VsHgYF: '3cb371',\n VUXe: '7b68ee',\n VsprRggYF: 'fa9a',\n VQe: '48d1cc',\n VviTetYd: 'c71585',\n midnightXe: '191970',\n mRtcYam: 'f5fffa',\n mistyPse: 'ffe4e1',\n moccasR: 'ffe4b5',\n navajowEte: 'ffdead',\n navy: '80',\n Tdlace: 'fdf5e6',\n Tive: '808000',\n TivedBb: '6b8e23',\n Sange: 'ffa500',\n SangeYd: 'ff4500',\n ScEd: 'da70d6',\n pOegTMnPd: 'eee8aa',\n pOegYF: '98fb98',\n pOeQe: 'afeeee',\n pOeviTetYd: 'db7093',\n papayawEp: 'ffefd5',\n pHKpuff: 'ffdab9',\n peru: 'cd853f',\n pRk: 'ffc0cb',\n plum: 'dda0dd',\n powMrXe: 'b0e0e6',\n purpN: '800080',\n YbeccapurpN: '663399',\n Yd: 'ff0000',\n Psybrown: 'bc8f8f',\n PyOXe: '4169e1',\n saddNbPwn: '8b4513',\n sOmon: 'fa8072',\n sandybPwn: 'f4a460',\n sHgYF: '2e8b57',\n sHshell: 'fff5ee',\n siFna: 'a0522d',\n silver: 'c0c0c0',\n skyXe: '87ceeb',\n UXe: '6a5acd',\n UWay: '708090',\n UgYy: '708090',\n snow: 'fffafa',\n sprRggYF: 'ff7f',\n stAlXe: '4682b4',\n tan: 'd2b48c',\n teO: '8080',\n tEstN: 'd8bfd8',\n tomato: 'ff6347',\n Qe: '40e0d0',\n viTet: 'ee82ee',\n JHt: 'f5deb3',\n wEte: 'ffffff',\n wEtesmoke: 'f5f5f5',\n Lw: 'ffff00',\n LwgYF: '9acd32'\n};\nfunction unpack() {\n const unpacked = {};\n const keys = Object.keys(names$1);\n const tkeys = Object.keys(map);\n let i, j, k, ok, nk;\n for (i = 0; i < keys.length; i++) {\n ok = nk = keys[i];\n for (j = 0; j < tkeys.length; j++) {\n k = tkeys[j];\n nk = nk.replace(k, map[k]);\n }\n k = parseInt(names$1[ok], 16);\n unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n }\n return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n if (!names) {\n names = unpack();\n names.transparent = [0, 0, 0, 0];\n }\n const a = names[str.toLowerCase()];\n return a && {\n r: a[0],\n g: a[1],\n b: a[2],\n a: a.length === 4 ? a[3] : 255\n };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n const m = RGB_RE.exec(str);\n let a = 255;\n let r, g, b;\n if (!m) {\n return;\n }\n if (m[7] !== r) {\n const v = +m[7];\n a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n }\n r = +m[1];\n g = +m[3];\n b = +m[5];\n r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n return {\n r: r,\n g: g,\n b: b,\n a: a\n };\n}\nfunction rgbString(v) {\n return v && (\n v.a < 255\n ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n : `rgb(${v.r}, ${v.g}, ${v.b})`\n );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n const r = from(b2n(rgb1.r));\n const g = from(b2n(rgb1.g));\n const b = from(b2n(rgb1.b));\n return {\n r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n a: rgb1.a + t * (rgb2.a - rgb1.a)\n };\n}\n\nfunction modHSL(v, i, ratio) {\n if (v) {\n let tmp = rgb2hsl(v);\n tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n tmp = hsl2rgb(tmp);\n v.r = tmp[0];\n v.g = tmp[1];\n v.b = tmp[2];\n }\n}\nfunction clone(v, proto) {\n return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n var v = {r: 0, g: 0, b: 0, a: 255};\n if (Array.isArray(input)) {\n if (input.length >= 3) {\n v = {r: input[0], g: input[1], b: input[2], a: 255};\n if (input.length > 3) {\n v.a = n2b(input[3]);\n }\n }\n } else {\n v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n v.a = n2b(v.a);\n }\n return v;\n}\nfunction functionParse(str) {\n if (str.charAt(0) === 'r') {\n return rgbParse(str);\n }\n return hueParse(str);\n}\nclass Color {\n constructor(input) {\n if (input instanceof Color) {\n return input;\n }\n const type = typeof input;\n let v;\n if (type === 'object') {\n v = fromObject(input);\n } else if (type === 'string') {\n v = hexParse(input) || nameParse(input) || functionParse(input);\n }\n this._rgb = v;\n this._valid = !!v;\n }\n get valid() {\n return this._valid;\n }\n get rgb() {\n var v = clone(this._rgb);\n if (v) {\n v.a = b2n(v.a);\n }\n return v;\n }\n set rgb(obj) {\n this._rgb = fromObject(obj);\n }\n rgbString() {\n return this._valid ? rgbString(this._rgb) : undefined;\n }\n hexString() {\n return this._valid ? hexString(this._rgb) : undefined;\n }\n hslString() {\n return this._valid ? hslString(this._rgb) : undefined;\n }\n mix(color, weight) {\n if (color) {\n const c1 = this.rgb;\n const c2 = color.rgb;\n let w2;\n const p = weight === w2 ? 0.5 : weight;\n const w = 2 * p - 1;\n const a = c1.a - c2.a;\n const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n w2 = 1 - w1;\n c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n c1.a = p * c1.a + (1 - p) * c2.a;\n this.rgb = c1;\n }\n return this;\n }\n interpolate(color, t) {\n if (color) {\n this._rgb = interpolate(this._rgb, color._rgb, t);\n }\n return this;\n }\n clone() {\n return new Color(this.rgb);\n }\n alpha(a) {\n this._rgb.a = n2b(a);\n return this;\n }\n clearer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 - ratio;\n return this;\n }\n greyscale() {\n const rgb = this._rgb;\n const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n rgb.r = rgb.g = rgb.b = val;\n return this;\n }\n opaquer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 + ratio;\n return this;\n }\n negate() {\n const v = this._rgb;\n v.r = 255 - v.r;\n v.g = 255 - v.g;\n v.b = 255 - v.b;\n return this;\n }\n lighten(ratio) {\n modHSL(this._rgb, 2, ratio);\n return this;\n }\n darken(ratio) {\n modHSL(this._rgb, 2, -ratio);\n return this;\n }\n saturate(ratio) {\n modHSL(this._rgb, 1, ratio);\n return this;\n }\n desaturate(ratio) {\n modHSL(this._rgb, 1, -ratio);\n return this;\n }\n rotate(deg) {\n rotate(this._rgb, deg);\n return this;\n }\n}\n\nfunction index_esm(input) {\n return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n","/*!\n * Chart.js v4.4.4\n * https://www.chartjs.org\n * (c) 2024 Chart.js Contributors\n * Released under the MIT License\n */\nimport { Color } from '@kurkle/color';\n\n/**\n * @namespace Chart.helpers\n */ /**\n * An empty function that can be used, for example, for optional callback.\n */ function noop() {\n/* noop */ }\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */ const uid = (()=>{\n let id = 0;\n return ()=>id++;\n})();\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isNullOrUndef(value) {\n return value === null || typeof value === 'undefined';\n}\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */ function isArray(value) {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n return true;\n }\n return false;\n}\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value - The value to test.\n */ function isNumberFinite(value) {\n return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */ function finiteOrDefault(value, defaultValue) {\n return isNumberFinite(value) ? value : defaultValue;\n}\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */ function valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : +value / dimension;\nconst toDimension = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +value;\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */ function callback(fn, args, thisArg) {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n let i, len, keys;\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for(i = len - 1; i >= 0; i--){\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for(i = 0; i < len; i++){\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for(i = 0; i < len; i++){\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */ function _elementsEqual(a0, a1) {\n let i, ilen, v0, v1;\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n for(i = 0, ilen = a0.length; i < ilen; ++i){\n v0 = a0[i];\n v1 = a1[i];\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n return true;\n}\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */ function clone(source) {\n if (isArray(source)) {\n return source.map(clone);\n }\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n for(; k < klen; ++k){\n target[keys[k]] = clone(source[keys[k]]);\n }\n return target;\n }\n return source;\n}\nfunction isValidKey(key) {\n return [\n '__proto__',\n 'prototype',\n 'constructor'\n ].indexOf(key) === -1;\n}\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */ function _merger(key, target, source, options) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n merge(tval, sval, options);\n } else {\n target[key] = clone(sval);\n }\n}\nfunction merge(target, source, options) {\n const sources = isArray(source) ? source : [\n source\n ];\n const ilen = sources.length;\n if (!isObject(target)) {\n return target;\n }\n options = options || {};\n const merger = options.merger || _merger;\n let current;\n for(let i = 0; i < ilen; ++i){\n current = sources[i];\n if (!isObject(current)) {\n continue;\n }\n const keys = Object.keys(current);\n for(let k = 0, klen = keys.length; k < klen; ++k){\n merger(keys[k], target, current, options);\n }\n }\n return target;\n}\nfunction mergeIf(target, source) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return merge(target, source, {\n merger: _mergerIf\n });\n}\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */ function _mergerIf(key, target, source) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone(sval);\n }\n}\n/**\n * @private\n */ function _deprecated(scope, value, previous, current) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous + '\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n '': (v)=>v,\n // default resolvers\n x: (o)=>o.x,\n y: (o)=>o.y\n};\n/**\n * @private\n */ function _splitKey(key) {\n const parts = key.split('.');\n const keys = [];\n let tmp = '';\n for (const part of parts){\n tmp += part;\n if (tmp.endsWith('\\\\')) {\n tmp = tmp.slice(0, -1) + '.';\n } else {\n keys.push(tmp);\n tmp = '';\n }\n }\n return keys;\n}\nfunction _getKeyResolver(key) {\n const keys = _splitKey(key);\n return (obj)=>{\n for (const k of keys){\n if (k === '') {\n break;\n }\n obj = obj && obj[k];\n }\n return obj;\n };\n}\nfunction resolveObjectKey(obj, key) {\n const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n return resolver(obj);\n}\n/**\n * @private\n */ function _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value)=>typeof value !== 'undefined';\nconst isFunction = (value)=>typeof value === 'function';\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nconst setsEqual = (a, b)=>{\n if (a.size !== b.size) {\n return false;\n }\n for (const item of a){\n if (!b.has(item)) {\n return false;\n }\n }\n return true;\n};\n/**\n * @param e - The event\n * @private\n */ function _isClickEvent(e) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */ const PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction almostEquals(x, y, epsilon) {\n return Math.abs(x - y) < epsilon;\n}\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */ function niceNum(range) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */ function _factorize(value) {\n const result = [];\n const sqrt = Math.sqrt(value);\n let i;\n for(i = 1; i < sqrt; i++){\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) {\n result.push(sqrt);\n }\n result.sort((a, b)=>a - b).pop();\n return result;\n}\nfunction isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostWhole(x, epsilon) {\n const rounded = Math.round(x);\n return rounded - epsilon <= x && rounded + epsilon >= x;\n}\n/**\n * @private\n */ function _setMinAndMaxByKey(array, target, property) {\n let i, ilen, value;\n for(i = 0, ilen = array.length; i < ilen; i++){\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\nfunction toRadians(degrees) {\n return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n return radians * (180 / PI);\n}\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */ function _decimalPlaces(x) {\n if (!isNumberFinite(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while(Math.round(x * e) / e !== x){\n e *= 10;\n p++;\n }\n return p;\n}\n// Gets the angle from vertical upright to the point about a centre.\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n if (angle < -0.5 * PI) {\n angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n }\n return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */ function _angleDiff(a, b) {\n return (a - b + PITAU) % TAU - PI;\n}\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */ function _normalizeAngle(a) {\n return (a % TAU + TAU) % TAU;\n}\n/**\n * @private\n */ function _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;\n}\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */ function _limitValue(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\n/**\n * @param {number} value\n * @private\n */ function _int16Range(value) {\n return _limitValue(value, -32768, 32767);\n}\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */ function _isBetween(value, start, end, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nfunction _lookup(table, value, cmp) {\n cmp = cmp || ((index)=>table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid;\n while(hi - lo > 1){\n mid = lo + hi >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n return {\n lo,\n hi\n };\n}\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */ const _lookupByKey = (table, key, value, last)=>_lookup(table, value, last ? (index)=>{\n const ti = table[index][key];\n return ti < value || ti === value && table[index + 1][key] === value;\n } : (index)=>table[index][key] < value);\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */ const _rlookupByKey = (table, key, value)=>_lookup(table, value, (index)=>table[index][key] >= value);\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */ function _filterBetween(values, min, max) {\n let start = 0;\n let end = values.length;\n while(start < end && values[start] < min){\n start++;\n }\n while(end > start && values[end - 1] > max){\n end--;\n }\n return start > 0 || end < values.length ? values.slice(start, end) : values;\n}\nconst arrayEvents = [\n 'push',\n 'pop',\n 'shift',\n 'splice',\n 'unshift'\n];\nfunction listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [\n listener\n ]\n }\n });\n arrayEvents.forEach((key)=>{\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value (...args) {\n const res = base.apply(this, args);\n array._chartjs.listeners.forEach((object)=>{\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n return res;\n }\n });\n });\n}\nfunction unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n if (listeners.length > 0) {\n return;\n }\n arrayEvents.forEach((key)=>{\n delete array[key];\n });\n delete array._chartjs;\n}\n/**\n * @param items\n */ function _arrayUnique(items) {\n const set = new Set(items);\n if (set.size === items.length) {\n return items;\n }\n return Array.from(set);\n}\n\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n/**\n* Request animation polyfill\n*/ const requestAnimFrame = function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}();\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */ function throttled(fn, thisArg) {\n let argsToUse = [];\n let ticking = false;\n return function(...args) {\n // Save the args for use later\n argsToUse = args;\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, ()=>{\n ticking = false;\n fn.apply(thisArg, argsToUse);\n });\n }\n };\n}\n/**\n * Debounces calling `fn` for `delay` ms\n */ function debounce(fn, delay) {\n let timeout;\n return function(...args) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */ const _toLeftRightCenter = (align)=>align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */ const _alignStartEnd = (align, start, end)=>align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */ const _textX = (align, left, right, rtl)=>{\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n/**\n * Return start and count of visible points.\n * @private\n */ function _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n const pointCount = points.length;\n let start = 0;\n let count = pointCount;\n if (meta._sorted) {\n const { iScale , _parsed } = meta;\n const axis = iScale.axis;\n const { min , max , minDefined , maxDefined } = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(Math.min(// @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, axis, min).lo, // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo), 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(Math.max(// @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, iScale.axis, max, true).hi + 1, // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1), start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n return {\n start,\n count\n };\n}\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */ function _scaleRangesChanged(meta) {\n const { xScale , yScale , _scaleRanges } = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n\nconst atEdge = (t)=>t === 0 || t === 1;\nconst elasticIn = (t, s, p)=>-(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p)=>Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */ const effects = {\n linear: (t)=>t,\n easeInQuad: (t)=>t * t,\n easeOutQuad: (t)=>-t * (t - 2),\n easeInOutQuad: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1),\n easeInCubic: (t)=>t * t * t,\n easeOutCubic: (t)=>(t -= 1) * t * t + 1,\n easeInOutCubic: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2),\n easeInQuart: (t)=>t * t * t * t,\n easeOutQuart: (t)=>-((t -= 1) * t * t * t - 1),\n easeInOutQuart: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2),\n easeInQuint: (t)=>t * t * t * t * t,\n easeOutQuint: (t)=>(t -= 1) * t * t * t * t + 1,\n easeInOutQuint: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2),\n easeInSine: (t)=>-Math.cos(t * HALF_PI) + 1,\n easeOutSine: (t)=>Math.sin(t * HALF_PI),\n easeInOutSine: (t)=>-0.5 * (Math.cos(PI * t) - 1),\n easeInExpo: (t)=>t === 0 ? 0 : Math.pow(2, 10 * (t - 1)),\n easeOutExpo: (t)=>t === 1 ? 1 : -Math.pow(2, -10 * t) + 1,\n easeInOutExpo: (t)=>atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n easeInCirc: (t)=>t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1),\n easeOutCirc: (t)=>Math.sqrt(1 - (t -= 1) * t),\n easeInOutCirc: (t)=>(t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n easeInElastic: (t)=>atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n easeOutElastic: (t)=>atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n easeInOutElastic (t) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n easeInBack (t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n easeOutBack (t) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n easeInOutBack (t) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n },\n easeInBounce: (t)=>1 - effects.easeOutBounce(1 - t),\n easeOutBounce (t) {\n const m = 7.5625;\n const d = 2.75;\n if (t < 1 / d) {\n return m * t * t;\n }\n if (t < 2 / d) {\n return m * (t -= 1.5 / d) * t + 0.75;\n }\n if (t < 2.5 / d) {\n return m * (t -= 2.25 / d) * t + 0.9375;\n }\n return m * (t -= 2.625 / d) * t + 0.984375;\n },\n easeInOutBounce: (t)=>t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5\n};\n\nfunction isPatternOrGradient(value) {\n if (value && typeof value === 'object') {\n const type = value.toString();\n return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n }\n return false;\n}\nfunction color(value) {\n return isPatternOrGradient(value) ? value : new Color(value);\n}\nfunction getHoverColor(value) {\n return isPatternOrGradient(value) ? value : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst numbers = [\n 'x',\n 'y',\n 'borderWidth',\n 'radius',\n 'tension'\n];\nconst colors = [\n 'color',\n 'borderColor',\n 'backgroundColor'\n];\nfunction applyAnimationsDefaults(defaults) {\n defaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined\n });\n defaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name)=>name !== 'onProgress' && name !== 'onComplete' && name !== 'fn'\n });\n defaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n }\n });\n defaults.describe('animations', {\n _fallback: 'animation'\n });\n defaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0\n }\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: (v)=>v | 0\n }\n }\n }\n });\n}\n\nfunction applyLayoutsDefaults(defaults) {\n defaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n });\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\nfunction formatNumber(num, locale, options) {\n return getNumberFormat(locale, options).format(num);\n}\n\nconst formatters = {\n values (value) {\n return isArray(value) ? value : '' + value;\n },\n numeric (tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue;\n if (ticks.length > 1) {\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n delta = calculateDelta(tickValue, ticks);\n }\n const logDelta = log10(Math.abs(delta));\n const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n const options = {\n notation,\n minimumFractionDigits: numDecimal,\n maximumFractionDigits: numDecimal\n };\n Object.assign(options, this.options.ticks.format);\n return formatNumber(tickValue, locale, options);\n },\n logarithmic (tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = ticks[index].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue)));\n if ([\n 1,\n 2,\n 3,\n 5,\n 10,\n 15\n ].includes(remain) || index > 0.8 * ticks.length) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n};\nfunction calculateDelta(tickValue, ticks) {\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\n var Ticks = {\n formatters\n};\n\nfunction applyScaleDefaults(defaults) {\n defaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n bounds: 'ticks',\n clip: true,\n grace: 0,\n grid: {\n display: true,\n lineWidth: 1,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: (_ctx, options)=>options.lineWidth,\n tickColor: (_ctx, options)=>options.color,\n offset: false\n },\n border: {\n display: true,\n dash: [],\n dashOffset: 0.0,\n width: 1\n },\n title: {\n display: false,\n text: '',\n padding: {\n top: 4,\n bottom: 4\n }\n },\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2\n }\n });\n defaults.route('scale.ticks', 'color', '', 'color');\n defaults.route('scale.grid', 'color', '', 'borderColor');\n defaults.route('scale.border', 'color', '', 'borderColor');\n defaults.route('scale.title', 'color', '', 'color');\n defaults.describe('scale', {\n _fallback: false,\n _scriptable: (name)=>!name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: (name)=>name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash'\n });\n defaults.describe('scales', {\n _fallback: 'scale'\n });\n defaults.describe('scale.ticks', {\n _scriptable: (name)=>name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name)=>name !== 'backdropPadding'\n });\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\n function getScope$1(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for(let i = 0, n = keys.length; i < n; ++i){\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope$1(root, scope), values);\n }\n return merge(getScope$1(root, ''), scope);\n}\n class Defaults {\n constructor(_descriptors, _appliers){\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = (context)=>context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = [\n 'mousemove',\n 'mouseout',\n 'click',\n 'touchstart',\n 'touchmove'\n ];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options)=>getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options)=>getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options)=>getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true,\n includeInvisible: false\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.drawActiveElementsOnTop = true;\n this.describe(_descriptors);\n this.apply(_appliers);\n }\n set(scope, values) {\n return set(this, scope, values);\n }\n get(scope) {\n return getScope$1(this, scope);\n }\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n override(scope, values) {\n return set(overrides, scope, values);\n }\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope$1(this, scope);\n const targetScopeObject = getScope$1(this, targetScope);\n const privateName = '_' + name;\n Object.defineProperties(scopeObject, {\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n [name]: {\n enumerable: true,\n get () {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set (value) {\n this[privateName] = value;\n }\n }\n });\n }\n apply(appliers) {\n appliers.forEach((apply)=>apply(this));\n }\n}\nvar defaults = /* #__PURE__ */ new Defaults({\n _scriptable: (name)=>!name.startsWith('on'),\n _indexable: (name)=>name !== 'events',\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false\n }\n}, [\n applyAnimationsDefaults,\n applyLayoutsDefaults,\n applyScaleDefaults\n]);\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */ function toFontString(font) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n}\n/**\n * @private\n */ function _measureText(ctx, data, gc, longest, string) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\n/**\n * @private\n */ // eslint-disable-next-line complexity\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n ctx.save();\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i, j, jlen, thing, nestedThing;\n for(i = 0; i < ilen; i++){\n thing = arrayOfThings[i];\n // Undefined strings and arrays should not be measured\n if (thing !== undefined && thing !== null && !isArray(thing)) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n // if it is an array lets measure each element\n // to do maybe simplify this function a bit so we can do this more recursively?\n for(j = 0, jlen = thing.length; j < jlen; j++){\n nestedThing = thing[j];\n // Undefined strings and arrays should not be measured\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n ctx.restore();\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for(i = 0; i < gcLen; i++){\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */ function _alignPixel(chart, pixel, width) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n/**\n * Clears the entire canvas.\n */ function clearCanvas(canvas, ctx) {\n if (!ctx && !canvas) {\n return;\n }\n ctx = ctx || canvas.getContext('2d');\n ctx.save();\n // canvas.width and canvas.height do not consider the canvas transform,\n // while clearRect does\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n drawPointLegend(ctx, options, x, y, null);\n}\n// eslint-disable-next-line complexity\nfunction drawPointLegend(ctx, options, x, y, w) {\n let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n if (style && typeof style === 'object') {\n type = style.toString();\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n ctx.beginPath();\n switch(style){\n // Default includes circle\n default:\n if (w) {\n ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n } else {\n ctx.arc(x, y, radius, 0, TAU);\n }\n ctx.closePath();\n break;\n case 'triangle':\n width = w ? w / 2 : radius;\n ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n // NOTE: the rounded rect implementation changed to use `arc` instead of\n // `quadraticCurveTo` since it generates better results when rect is\n // almost a circle. 0.516 (instead of 0.5) produces results with visually\n // closer proportion to the previous impl and it is inscribed in the\n // circle with `radius`. For more details, see the following PRs:\n // https://github.com/chartjs/Chart.js/issues/5597\n // https://github.com/chartjs/Chart.js/issues/5858\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n width = w ? w / 2 : size;\n ctx.rect(x - width, y - size, 2 * width, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n /* falls through */ case 'rectRot':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n /* falls through */ case 'cross':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'star':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n rad += QUARTER_PI;\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'line':\n xOffset = w ? w / 2 : Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n break;\n case false:\n ctx.closePath();\n break;\n }\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */ function _isPointInArea(point, area, margin) {\n margin = margin || 0.5; // margin - default is to match rounded decimals\n return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;\n}\nfunction clipArea(ctx, area) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\nfunction unclipArea(ctx) {\n ctx.restore();\n}\n/**\n * @private\n */ function _steppedLineTo(ctx, previous, target, flip, mode) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n ctx.lineTo(target.x, target.y);\n}\n/**\n * @private\n */ function _bezierCurveTo(ctx, previous, target, flip) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);\n}\nfunction setRenderOpts(ctx, opts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n if (opts.strikethrough || opts.underline) {\n /**\n * Now that IE11 support has been dropped, we can use more\n * of the TextMetrics object. The actual bounding boxes\n * are unflagged in Chrome, Firefox, Edge, and Safari so they\n * can be safely used.\n * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n */ const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\nfunction drawBackdrop(ctx, opts) {\n const oldColor = ctx.fillStyle;\n ctx.fillStyle = opts.color;\n ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n ctx.fillStyle = oldColor;\n}\n/**\n * Render text onto the canvas\n */ function renderText(ctx, text, x, y, font, opts = {}) {\n const lines = isArray(text) ? text : [\n text\n ];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i, line;\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n for(i = 0; i < lines.length; ++i){\n line = lines[i];\n if (opts.backdrop) {\n drawBackdrop(ctx, opts.backdrop);\n }\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n y += Number(font.lineHeight);\n }\n ctx.restore();\n}\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */ function addRoundedRectPath(ctx, rect) {\n const { x , y , w , h , radius } = rect;\n // top left arc\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n // line from top left to bottom left\n ctx.lineTo(x, y + h - radius.bottomLeft);\n // bottom left arc\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n // line from bottom left to bottom right\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n // bottom right arc\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n // line from bottom right to top right\n ctx.lineTo(x + w, y + radius.topRight);\n // top right arc\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n // line from top right to top left\n ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n/**\n * @alias Chart.helpers.options\n * @namespace\n */ /**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */ function toLineHeight(value, size) {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n value = +matches[2];\n switch(matches[3]){\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n }\n return size * value;\n}\nconst numberOrZero = (v)=>+v || 0;\nfunction _readValueToProps(value, props) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value) ? objProps ? (prop)=>valueOrDefault(value[prop], value[props[prop]]) : (prop)=>value[prop] : ()=>value;\n for (const prop of keys){\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */ function toTRBL(value) {\n return _readValueToProps(value, {\n top: 'y',\n right: 'x',\n bottom: 'y',\n left: 'x'\n });\n}\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */ function toTRBLCorners(value) {\n return _readValueToProps(value, [\n 'topLeft',\n 'topRight',\n 'bottomLeft',\n 'bottomRight'\n ]);\n}\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */ function toPadding(value) {\n const obj = toTRBL(value);\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n return obj;\n}\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */ function toFont(options, fallback) {\n options = options || {};\n fallback = fallback || defaults.font;\n let size = valueOrDefault(options.size, fallback.size);\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = undefined;\n }\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n font.string = toFontString(font);\n return font;\n}\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */ function resolve(inputs, context, index, info) {\n let cacheable = true;\n let i, ilen, value;\n for(i = 0, ilen = inputs.length; i < ilen; ++i){\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */ function _addGrace(minmax, grace, beginAtZero) {\n const { min , max } = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value, add)=>beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\nfunction createContext(parentContext, context) {\n return Object.assign(Object.create(parentContext), context);\n}\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */ function _createResolver(scopes, prefixes = [\n ''\n], rootScopes, fallback, getTarget = ()=>scopes[0]) {\n const finalRootScopes = rootScopes || scopes;\n if (typeof fallback === 'undefined') {\n fallback = _resolve('_fallback', scopes);\n }\n const cache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: finalRootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope)=>_createResolver([\n scope,\n ...scopes\n ], prefixes, finalRootScopes, fallback)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */ deleteProperty (target, prop) {\n delete target[prop]; // remove from cache\n delete target._keys; // remove cached keys\n delete scopes[0][prop]; // remove from top level scope\n return true;\n },\n /**\n * A trap for getting property values.\n */ get (target, prop) {\n return _cached(target, prop, ()=>_resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */ getOwnPropertyDescriptor (target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n /**\n * A trap for Object.getPrototypeOf.\n */ getPrototypeOf () {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n /**\n * A trap for the in operator.\n */ has (target, prop) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */ ownKeys (target) {\n return getKeysFromAllScopes(target);\n },\n /**\n * A trap for setting property values.\n */ set (target, prop, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value; // set to top level scope + cache\n delete target._keys; // remove cached keys\n return true;\n }\n });\n}\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */ function _attachContext(proxy, context, subProxy, descriptorDefaults) {\n const cache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx)=>_attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope)=>_attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */ deleteProperty (target, prop) {\n delete target[prop]; // remove from cache\n delete proxy[prop]; // remove from proxy\n return true;\n },\n /**\n * A trap for getting property values.\n */ get (target, prop, receiver) {\n return _cached(target, prop, ()=>_resolveWithContext(target, prop, receiver));\n },\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */ getOwnPropertyDescriptor (target, prop) {\n return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {\n enumerable: true,\n configurable: true\n } : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n /**\n * A trap for Object.getPrototypeOf.\n */ getPrototypeOf () {\n return Reflect.getPrototypeOf(proxy);\n },\n /**\n * A trap for the in operator.\n */ has (target, prop) {\n return Reflect.has(proxy, prop);\n },\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */ ownKeys () {\n return Reflect.ownKeys(proxy);\n },\n /**\n * A trap for setting property values.\n */ set (target, prop, value) {\n proxy[prop] = value; // set to proxy\n delete target[prop]; // remove from cache\n return true;\n }\n });\n}\n/**\n * @private\n */ function _descriptors(proxy, defaults = {\n scriptable: true,\n indexable: true\n}) {\n const { _scriptable =defaults.scriptable , _indexable =defaults.indexable , _allKeys =defaults.allKeys } = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : ()=>_scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : ()=>_indexable\n };\n}\nconst readKey = (prefix, name)=>prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value)=>isObject(value) && prop !== 'adapters' && (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n return target[prop];\n }\n const value = resolve();\n // cache the resolved value\n target[prop] = value;\n return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n const { _proxy , _context , _subProxy , _descriptors: descriptors } = target;\n let value = _proxy[prop]; // resolve from proxy\n // resolve with context\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n // if the resolved value is an object, create a sub resolver for it\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\nfunction _resolveScriptable(prop, getValue, target, receiver) {\n const { _proxy , _context , _subProxy , _stack } = target;\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n let value = getValue(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n // When scriptable option returns an object, create a resolver on that.\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n const { _proxy , _context , _subProxy , _descriptors: descriptors } = target;\n if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n return value[_context.index % value.length];\n } else if (isObject(value[0])) {\n // Array of objects, return array or resolvers\n const arr = value;\n const scopes = _proxy._scopes.filter((s)=>s !== arr);\n value = [];\n for (const item of arr){\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent)=>key === true ? parent : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n for (const parent of parentScopes){\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, value);\n if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n // When we reach the descriptor that defines a new _fallback, return that.\n // The fallback will resume to that new scope.\n return fallback;\n }\n } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n // Fallback to `false` results to `false`, when falling back to different key.\n // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n return null;\n }\n }\n return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [\n ...parentScopes,\n ...rootScopes\n ];\n const set = new Set();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n if (key === null) {\n return false;\n }\n if (typeof fallback !== 'undefined' && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [\n ''\n ], rootScopes, fallback, ()=>subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n while(key){\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n // For array of objects, the object is used to store updated values\n return value;\n }\n return target || {};\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n let value;\n for (const prefix of prefixes){\n value = _resolve(readKey(prefix, prop), scopes);\n if (typeof value !== 'undefined') {\n return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;\n }\n }\n}\nfunction _resolve(key, scopes) {\n for (const scope of scopes){\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (typeof value !== 'undefined') {\n return value;\n }\n }\n}\nfunction getKeysFromAllScopes(target) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n const set = new Set();\n for (const scope of scopes){\n for (const key of Object.keys(scope).filter((k)=>!k.startsWith('_'))){\n set.add(key);\n }\n }\n return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n const { iScale } = meta;\n const { key ='r' } = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n r: iScale.parse(resolveObjectKey(item, key), index)\n };\n }\n return parsed;\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i)=>i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis)=>indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n // Props to Rob Spencer at scaled innovation for his post on splining between points\n // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n // This function must also respect \"skipped\" points\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n // If all points are the same, s01 & s02 will be inf\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n const fa = t * s01; // scaling factor for triangle Ta\n const fb = t * s12;\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\n/**\n * Adjust tangents to ensure monotonic properties\n */ function monotoneAdjust(points, deltaK, mK) {\n const pointsLen = points.length;\n let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(let i = 0; i < pointsLen - 1; ++i){\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n if (squaredMagnitude <= 9) {\n continue;\n }\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(let i = 0; i < pointsLen; ++i){\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */ function splineCurveMonotone(points, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK = Array(pointsLen).fill(0);\n const mK = Array(pointsLen);\n // Calculate slopes (deltaK) and initialize tangents (mK)\n let i, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(i = 0; i < pointsLen; ++i){\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n monotoneAdjust(points, deltaK, mK);\n monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\n for(i = 0, ilen = points.length; i < ilen; ++i){\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n if (!inArea) {\n continue;\n }\n point = points[i];\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\n/**\n * @private\n */ function _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n let i, ilen, point, controlPoints;\n // Only consider points that are drawn in case the spanGaps option is used\n if (options.spanGaps) {\n points = points.filter((pt)=>!pt.skip);\n }\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for(i = 0, ilen = points.length; i < ilen; ++i){\n point = points[i];\n controlPoints = splineCurve(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n\n/**\n * Note: typedefs are auto-exported, so use a made-up `dom` namespace where\n * necessary to avoid duplicates with `export * from './helpers`; see\n * https://github.com/microsoft/TypeScript/issues/46011\n * @typedef { import('../core/core.controller.js').default } dom.Chart\n * @typedef { import('../../types').ChartEvent } ChartEvent\n */ /**\n * @private\n */ function _isDomSupported() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n/**\n * @private\n */ function _getParentNode(domNode) {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = parent.host;\n }\n return parent;\n}\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */ function parseMaxStyle(styleValue, node, parentProperty) {\n let valueInPixels;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n if (styleValue.indexOf('%') !== -1) {\n // percentage * size in dimension\n valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n return valueInPixels;\n}\nconst getComputedStyle = (element)=>element.ownerDocument.defaultView.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = [\n 'top',\n 'right',\n 'bottom',\n 'left'\n];\nfunction getPositionedStyle(styles, style, suffix) {\n const result = {};\n suffix = suffix ? '-' + suffix : '';\n for(let i = 0; i < 4; i++){\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\nconst useOffsetPos = (x, y, target)=>(x > 0 || y > 0) && (!target || !target.shadowRoot);\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */ function getCanvasPosition(e, canvas) {\n const touches = e.touches;\n const source = touches && touches.length ? touches[0] : e;\n const { offsetX , offsetY } = source;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {\n x,\n y,\n box\n };\n}\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */ function getRelativePosition(event, chart) {\n if ('native' in event) {\n return event;\n }\n const { canvas , currentDevicePixelRatio } = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const { x , y , box } = getCanvasPosition(event, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n let { width , height } = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\nfunction getContainerSize(canvas, width, height) {\n let maxWidth, maxHeight;\n if (width === undefined || height === undefined) {\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect(); // this is the border box of the container\n const containerStyle = getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\nconst round1 = (v)=>Math.round(v * 10) / 10;\n// eslint-disable-next-line complexity\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n const style = getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let { width , height } = containerSize;\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n if (width && !height) {\n // https://github.com/chartjs/Chart.js/issues/4659\n // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n height = round1(width / 2);\n }\n const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n height = containerSize.height;\n width = round1(Math.floor(height * aspectRatio));\n }\n return {\n width,\n height\n };\n}\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */ function retinaScale(chart, forceRatio, forceStyle) {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = Math.floor(chart.height * pixelRatio);\n const deviceWidth = Math.floor(chart.width * pixelRatio);\n chart.height = Math.floor(chart.height);\n chart.width = Math.floor(chart.width);\n const canvas = chart.canvas;\n // If no style has been set on the canvas, the render size is used as display size,\n // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n // See https://github.com/chartjs/Chart.js/issues/3575\n if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {\n chart.currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */ const supportsEventListenerOptions = function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive () {\n passiveSupported = true;\n return false;\n }\n };\n if (_isDomSupported()) {\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n }\n } catch (e) {\n // continue regardless of error\n }\n return passiveSupported;\n}();\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */ function readUsedSize(element, property) {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n\n/**\n * @private\n */ function _pointInLine(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\n/**\n * @private\n */ function _steppedInterpolation(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y : mode === 'after' ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y\n };\n}\n/**\n * @private\n */ function _bezierInterpolation(p1, p2, t, mode) {\n const cp1 = {\n x: p1.cp2x,\n y: p1.cp2y\n };\n const cp2 = {\n x: p2.cp1x,\n y: p2.cp1y\n };\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n return {\n x (x) {\n return rectX + rectX + width - x;\n },\n setWidth (w) {\n width = w;\n },\n textAlign (align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus (x, value) {\n return x - value;\n },\n leftForLtr (x, itemWidth) {\n return x - itemWidth;\n }\n };\n};\nconst getLeftToRightAdapter = function() {\n return {\n x (x) {\n return x;\n },\n setWidth (w) {},\n textAlign (align) {\n return align;\n },\n xPlus (x, value) {\n return x + value;\n },\n leftForLtr (x, _itemWidth) {\n return x;\n }\n };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n let style, original;\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction')\n ];\n style.setProperty('direction', direction, 'important');\n ctx.prevTextDirection = original;\n }\n}\nfunction restoreTextDirection(ctx, original) {\n if (original !== undefined) {\n delete ctx.prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\n\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle\n };\n }\n return {\n between: _isBetween,\n compare: (a, b)=>a - b,\n normalize: (x)=>x\n };\n}\nfunction normalizeSegment({ start , end , count , loop , style }) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\nfunction getSegment(segment, points, bounds) {\n const { property , start: startBound , end: endBound } = bounds;\n const { between , normalize } = propertyFn(property);\n const count = points.length;\n let { start , end , loop } = segment;\n let i, ilen;\n if (loop) {\n start += count;\n end += count;\n for(i = 0, ilen = count; i < ilen; ++i){\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n if (end < start) {\n end += count;\n }\n return {\n start,\n end,\n loop,\n style: segment.style\n };\n}\n function _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [\n segment\n ];\n }\n const { property , start: startBound , end: endBound } = bounds;\n const count = points.length;\n const { compare , between , normalize } = propertyFn(property);\n const { start , end , loop , style } = getSegment(segment, points, bounds);\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n const startIsBefore = ()=>between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = ()=>compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = ()=>inside || startIsBefore();\n const shouldStop = ()=>!inside || endIsBefore();\n for(let i = start, prev = start; i <= end; ++i){\n point = points[i % count];\n if (point.skip) {\n continue;\n }\n value = normalize(point[property]);\n if (value === prevValue) {\n continue;\n }\n inside = between(value, startBound, endBound);\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({\n start: subStart,\n end: i,\n loop,\n count,\n style\n }));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n if (subStart !== null) {\n result.push(normalizeSegment({\n start: subStart,\n end,\n loop,\n count,\n style\n }));\n }\n return result;\n}\n function _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n for(let i = 0; i < segments.length; i++){\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\n function findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n if (loop && !spanGaps) {\n while(start < count && !points[start].skip){\n start++;\n }\n }\n while(start < count && points[start].skip){\n start++;\n }\n start %= count;\n if (loop) {\n end += start;\n }\n while(end > start && points[end % count].skip){\n end--;\n }\n end %= count;\n return {\n start,\n end\n };\n}\n function solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n for(end = start + 1; end <= max; ++end){\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({\n start: start % count,\n end: (end - 1) % count,\n loop\n });\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n if (last !== null) {\n result.push({\n start: start % count,\n end: last % count,\n loop\n });\n }\n return result;\n}\n function _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n if (!count) {\n return [];\n }\n const loop = !!line._loop;\n const { start , end } = findStartAndEnd(points, count, loop, spanGaps);\n if (spanGaps === true) {\n return splitByStyles(line, [\n {\n start,\n end,\n loop\n }\n ], points, segmentOptions);\n }\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n function splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\n function doSplitByStyles(line, segments, points, segmentOptions) {\n const chartContext = line._chart.getContext();\n const baseStyle = readStyle(line.options);\n const { _datasetIndex: datasetIndex , options: { spanGaps } } = line;\n const count = points.length;\n const result = [];\n let prevStyle = baseStyle;\n let start = segments[0].start;\n let i = start;\n function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\n s += count;\n while(points[s % count].skip){\n s -= dir;\n }\n while(points[e % count].skip){\n e += dir;\n }\n if (s % count !== e % count) {\n result.push({\n start: s % count,\n end: e % count,\n loop: l,\n style: st\n });\n prevStyle = st;\n start = e % count;\n }\n }\n for (const segment of segments){\n start = spanGaps ? start : segment.start;\n let prev = points[start % count];\n let style;\n for(i = start + 1; i <= segment.end; i++){\n const pt = points[i % count];\n style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex\n })));\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n return result;\n}\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\nfunction styleChanged(style, prevStyle) {\n if (!prevStyle) {\n return false;\n }\n const cache = [];\n const replacer = function(key, value) {\n if (!isPatternOrGradient(value)) {\n return value;\n }\n if (!cache.includes(value)) {\n cache.push(value);\n }\n return cache.indexOf(value);\n };\n return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n\nexport { unclipArea as $, _rlookupByKey as A, _lookupByKey as B, _isPointInArea as C, getAngleFromPoint as D, toPadding as E, each as F, getMaximumSize as G, HALF_PI as H, _getParentNode as I, readUsedSize as J, supportsEventListenerOptions as K, throttled as L, _isDomSupported as M, _factorize as N, finiteOrDefault as O, PI as P, callback as Q, _addGrace as R, _limitValue as S, TAU as T, toDegrees as U, _measureText as V, _int16Range as W, _alignPixel as X, clipArea as Y, renderText as Z, _arrayUnique as _, resolve as a, fontString as a$, toFont as a0, _toLeftRightCenter as a1, _alignStartEnd as a2, overrides as a3, merge as a4, _capitalize as a5, descriptors as a6, isFunction as a7, _attachContext as a8, _createResolver as a9, overrideTextDirection as aA, _textX as aB, restoreTextDirection as aC, drawPointLegend as aD, distanceBetweenPoints as aE, noop as aF, _setMinAndMaxByKey as aG, niceNum as aH, almostWhole as aI, almostEquals as aJ, _decimalPlaces as aK, Ticks as aL, log10 as aM, _longestText as aN, _filterBetween as aO, _lookup as aP, isPatternOrGradient as aQ, getHoverColor as aR, clone as aS, _merger as aT, _mergerIf as aU, _deprecated as aV, _splitKey as aW, toFontString as aX, splineCurve as aY, splineCurveMonotone as aZ, getStyle as a_, _descriptors as aa, mergeIf as ab, uid as ac, debounce as ad, retinaScale as ae, clearCanvas as af, setsEqual as ag, _elementsEqual as ah, _isClickEvent as ai, _isBetween as aj, _readValueToProps as ak, _updateBezierControlPoints as al, _computeSegments as am, _boundSegments as an, _steppedInterpolation as ao, _bezierInterpolation as ap, _pointInLine as aq, _steppedLineTo as ar, _bezierCurveTo as as, drawPoint as at, addRoundedRectPath as au, toTRBL as av, toTRBLCorners as aw, _boundSegment as ax, _normalizeAngle as ay, getRtlAdapter as az, isArray as b, toLineHeight as b0, PITAU as b1, INFINITY as b2, RAD_PER_DEG as b3, QUARTER_PI as b4, TWO_THIRDS_PI as b5, _angleDiff as b6, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, defined as h, isObject as i, createContext as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, getRelativePosition as z };\n//# sourceMappingURL=helpers.segment.js.map\n","/*!\n * Chart.js v4.4.4\n * https://www.chartjs.org\n * (c) 2024 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, i as isObject, d as defaults, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as defined, s as sign, j as createContext, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as getRelativePosition, A as _rlookupByKey, B as _lookupByKey, C as _isPointInArea, D as getAngleFromPoint, E as toPadding, F as each, G as getMaximumSize, I as _getParentNode, J as readUsedSize, K as supportsEventListenerOptions, L as throttled, M as _isDomSupported, N as _factorize, O as finiteOrDefault, Q as callback, R as _addGrace, S as _limitValue, U as toDegrees, V as _measureText, W as _int16Range, X as _alignPixel, Y as clipArea, Z as renderText, $ as unclipArea, a0 as toFont, a1 as _toLeftRightCenter, a2 as _alignStartEnd, a3 as overrides, a4 as merge, a5 as _capitalize, a6 as descriptors, a7 as isFunction, a8 as _attachContext, a9 as _createResolver, aa as _descriptors, ab as mergeIf, ac as uid, ad as debounce, ae as retinaScale, af as clearCanvas, ag as setsEqual, ah as _elementsEqual, ai as _isClickEvent, aj as _isBetween, ak as _readValueToProps, al as _updateBezierControlPoints, am as _computeSegments, an as _boundSegments, ao as _steppedInterpolation, ap as _bezierInterpolation, aq as _pointInLine, ar as _steppedLineTo, as as _bezierCurveTo, at as drawPoint, au as addRoundedRectPath, av as toTRBL, aw as toTRBLCorners, ax as _boundSegment, ay as _normalizeAngle, az as getRtlAdapter, aA as overrideTextDirection, aB as _textX, aC as restoreTextDirection, aD as drawPointLegend, aE as distanceBetweenPoints, aF as noop, aG as _setMinAndMaxByKey, aH as niceNum, aI as almostWhole, aJ as almostEquals, aK as _decimalPlaces, aL as Ticks, aM as log10, aN as _longestText, aO as _filterBetween, aP as _lookup } from './chunks/helpers.segment.js';\nimport '@kurkle/color';\n\nclass Animator {\n constructor(){\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n callbacks.forEach((fn)=>fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n this._request = requestAnimFrame.call(window, ()=>{\n this._update();\n this._request = null;\n if (this._running) {\n this._refresh();\n }\n });\n }\n _update(date = Date.now()) {\n let remaining = 0;\n this._charts.forEach((anims, chart)=>{\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n for(; i >= 0; --i){\n item = items[i];\n if (item._active) {\n if (item._total > anims.duration) {\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n remaining += items.length;\n });\n this._lastDate = date;\n if (remaining === 0) {\n this._running = false;\n }\n }\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n return anims;\n }\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur)=>Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n for(; i >= 0; --i){\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\nvar animator = /* #__PURE__ */ new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean (from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n color (from, to, factor) {\n const c0 = color(from || transparent);\n const c1 = c0.valid && color(to || transparent);\n return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;\n },\n number (from, to, factor) {\n return from + (to - from) * factor;\n }\n};\nclass Animation {\n constructor(cfg, target, prop, to){\n const currentValue = target[prop];\n to = resolve([\n cfg.to,\n to,\n currentValue,\n cfg.from\n ]);\n const from = resolve([\n cfg.from,\n currentValue,\n to\n ]);\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n active() {\n return this._active;\n }\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n const currentValue = this._target[this._prop];\n const elapsed = date - this._start;\n const remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([\n cfg.to,\n to,\n currentValue,\n cfg.from\n ]);\n this._from = resolve([\n cfg.from,\n currentValue,\n to\n ]);\n }\n }\n cancel() {\n if (this._active) {\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\n }\n }\n tick(date) {\n const elapsed = date - this._start;\n const duration = this._duration;\n const prop = this._prop;\n const from = this._from;\n const loop = this._loop;\n const to = this._to;\n let factor;\n this._active = from !== to && (loop || elapsed < duration);\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n factor = elapsed / duration % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n this._target[prop] = this._fn(from, to, factor);\n }\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej)=>{\n promises.push({\n res,\n rej\n });\n });\n }\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for(let i = 0; i < promises.length; i++){\n promises[i][method]();\n }\n }\n}\n\nclass Animations {\n constructor(chart, config){\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n const animationOptions = Object.keys(defaults.animation);\n const animatedProps = this._properties;\n Object.getOwnPropertyNames(config).forEach((key)=>{\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions){\n resolved[option] = cfg[option];\n }\n (isArray(cfg.properties) && cfg.properties || [\n key\n ]).forEach((prop)=>{\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n awaitAll(target.options.$animations, newOptions).then(()=>{\n target.options = newOptions;\n }, ()=>{\n });\n }\n return animations;\n }\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n for(i = props.length - 1; i >= 0; --i){\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n if (animation) {\n if (cfg && animation.active()) {\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n target[prop] = value;\n continue;\n }\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n update(target, values) {\n if (this._properties.size === 0) {\n Object.assign(target, values);\n return;\n }\n const animations = this._createAnimations(target, values);\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for(let i = 0; i < keys.length; i++){\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n target.options = options = Object.assign({}, options, {\n $shared: false,\n $animations: {}\n });\n }\n return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\nfunction toClip(value) {\n let t, r, b, l;\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n for(i = 0, ilen = metasets.length; i < ilen; ++i){\n keys.push(metasets[i].index);\n }\n return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n if (value === null) {\n return;\n }\n for(i = 0, ilen = keys.length; i < ilen; ++i){\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {\n value += otherValue;\n }\n }\n return value;\n}\nfunction convertObjectDataToArray(data, meta) {\n const { iScale , vScale } = meta;\n const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';\n const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';\n const keys = Object.keys(data);\n const adata = new Array(keys.length);\n let i, ilen, key;\n for(i = 0, ilen = keys.length; i < ilen; ++i){\n key = keys[i];\n adata[i] = {\n [iAxisKey]: key,\n [vAxisKey]: data[key]\n };\n }\n return adata;\n}\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || stacked === undefined && meta.stack !== undefined;\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n const { min , max , minDefined , maxDefined } = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n for (const meta of vScale.getMatchingVisibleMetas(type).reverse()){\n const value = stack[meta.index];\n if (positive && value > 0 || !positive && value < 0) {\n return meta.index;\n }\n }\n return null;\n}\nfunction updateStacks(controller, parsed) {\n const { chart , _cachedMeta: meta } = controller;\n const stacks = chart._stacks || (chart._stacks = {});\n const { iScale , vScale , index: datasetIndex } = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n for(let i = 0; i < ilen; ++i){\n const item = parsed[i];\n const { [iAxis]: index , [vAxis]: value } = item;\n const itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n const visualValues = stack._visualValues || (stack._visualValues = {});\n visualValues[datasetIndex] = value;\n }\n}\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter((key)=>scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n return createContext(parent, {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\n });\n}\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element,\n index,\n mode: 'default',\n type: 'data'\n });\n}\nfunction clearStacks(meta, items) {\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n items = items || meta._parsed;\n for (const parsed of items){\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n delete stacks[axis]._visualValues[datasetIndex];\n }\n }\n}\nconst isDirectUpdateMode = (mode)=>mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared)=>shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart)=>canStack && !meta.hidden && meta._stacked && {\n keys: getSortedDatasetIndices(chart, true),\n values: null\n };\nclass DatasetController {\n static defaults = {};\n static datasetElementType = null;\n static dataElementType = null;\n constructor(chart, datasetIndex){\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.supportsDecimation = false;\n this.$context = undefined;\n this._syncList = [];\n this.datasetElementType = new.target.datasetElementType;\n this.dataElementType = new.target.dataElementType;\n this.initialize();\n }\n initialize() {\n const meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n }\n }\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n const chooseId = (axis, x, y, r)=>axis === 'x' ? x : axis === 'r' ? r : y;\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.getScaleForId(vid);\n }\n getDataset() {\n return this.chart.data.datasets[this.index];\n }\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale ? meta.vScale : meta.iScale;\n }\n reset() {\n this._update('reset');\n }\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n if (isObject(data)) {\n const meta = this._cachedMeta;\n this._data = convertObjectDataToArray(data, meta);\n } else if (_data !== data) {\n if (_data) {\n unlistenArrayEvents(_data, this);\n const meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n this._syncList = [];\n this._data = data;\n }\n }\n addElements() {\n const meta = this._cachedMeta;\n this._dataCheck();\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n this._dataCheck();\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n this._resyncElements(resetNewElements);\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n }\n }\n configure() {\n const config = this.chart.config;\n const scopeKeys = config.datasetScopeKeys(this._type);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n parse(start, count) {\n const { _cachedMeta: meta , _data: data } = this;\n const { iScale , _stacked } = meta;\n const iAxis = iScale.axis;\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\n if (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.parsePrimitiveData(meta, data, start, count);\n }\n const isNotInOrderComparedToPrev = ()=>cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];\n for(i = 0; i < count; ++i){\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n parsePrimitiveData(meta, data, start, count) {\n const { iScale , vScale } = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const { xScale , yScale } = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const { xScale , yScale } = meta;\n const { xAxisKey ='x' , yAxisKey ='y' } = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n return parsed;\n }\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]._visualValues\n };\n return applyStack(stack, value, meta.index, {\n mode\n });\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n value = applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n getMinMax(scale, canStack) {\n const meta = this._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = this._getOtherScale(scale);\n const stack = createStack(canStack, meta, this.chart);\n const range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n const { min: otherMin , max: otherMax } = getUserBounds(otherScale);\n let i, parsed;\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n for(i = 0; i < ilen; ++i){\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n break;\n }\n }\n if (sorted) {\n for(i = ilen - 1; i >= 0; --i){\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n for(i = 0, ilen = parsed.length; i < ilen; ++i){\n value = parsed[i][scale.axis];\n if (isNumberFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n getMaxOverflow() {\n return false;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n _update(mode) {\n const meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n update(mode) {}\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || elements.length - start;\n const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n let i;\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n for(i = start; i < start + count; ++i){\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n for(i = 0; i < active.length; ++i){\n active[i].draw(ctx, area);\n }\n }\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);\n }\n getContext(index, active, mode) {\n const dataset = this.getDataset();\n let context;\n if (index >= 0 && index < this._cachedMeta.data.length) {\n const element = this._cachedMeta.data[index];\n context = element.$context || (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n _resolveElementOptions(elementType, mode = 'default', index) {\n const active = mode === 'active';\n const cache = this._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = this.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = this.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n const prefixes = active ? [\n `${elementType}Hover`,\n 'hover',\n elementType,\n ''\n ] : [\n elementType,\n ''\n ];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n const context = ()=>this.getContext(index, active, mode);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n if (values.$shared) {\n values.$shared = sharing;\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n return values;\n }\n _resolveAnimations(index, transition, active) {\n const chart = this.chart;\n const cache = this._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = this.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n _getSharedOptions(start, mode) {\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const previouslySharedOptions = this._sharedOptions;\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n return {\n sharedOptions,\n includeOptions\n };\n }\n updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n options: !active && this.getSharedOptions(options) || options\n });\n }\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n for (const [method, arg1, arg2] of this._syncList){\n this[method](arg1, arg2);\n }\n this._syncList = [];\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n if (count) {\n this.parse(0, count);\n }\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\n }\n }\n _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n const move = (arr)=>{\n arr.length += count;\n for(i = arr.length - 1; i >= end; i--){\n arr[i] = arr[i - count];\n }\n };\n move(data);\n for(i = start; i < end; ++i){\n data[i] = new this.dataElementType();\n }\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n updateElements(element, start, count, mode) {}\n _removeElements(start, count) {\n const meta = this._cachedMeta;\n if (this._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n this.chart._dataChanges.push([\n this.index,\n ...args\n ]);\n }\n _onDataPush() {\n const count = arguments.length;\n this._sync([\n '_insertElements',\n this.getDataset().data.length - count,\n count\n ]);\n }\n _onDataPop() {\n this._sync([\n '_removeElements',\n this._cachedMeta.data.length - 1,\n 1\n ]);\n }\n _onDataShift() {\n this._sync([\n '_removeElements',\n 0,\n 1\n ]);\n }\n _onDataSplice(start, count) {\n if (count) {\n this._sync([\n '_removeElements',\n start,\n count\n ]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync([\n '_insertElements',\n start,\n newCount\n ]);\n }\n }\n _onDataUnshift() {\n this._sync([\n '_insertElements',\n 0,\n arguments.length\n ]);\n }\n}\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\n for(let i = 0, ilen = visibleMetas.length; i < ilen; i++){\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b)=>a - b));\n }\n return scale._cache.$bar;\n}\n function computeMinSampleSize(meta) {\n const scale = meta.iScale;\n const values = getAllScaleValues(scale, meta.type);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = ()=>{\n if (curr === 32767 || curr === -32768) {\n return;\n }\n if (defined(prev)) {\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n for(i = 0, ilen = values.length; i < ilen; ++i){\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n prev = undefined;\n for(i = 0, ilen = scale.ticks.length; i < ilen; ++i){\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n return min;\n}\n function computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n size = thickness * stackCount;\n ratio = 1;\n }\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - size / 2\n };\n}\n function computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n if (prev === null) {\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n if (next === null) {\n next = curr + curr - prev;\n }\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n item[vScale.axis] = barEnd;\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\n };\n}\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\n for(i = start, ilen = start + count; i < ilen; ++i){\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n return parsed;\n}\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {\n start,\n end,\n reverse,\n top,\n bottom\n };\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n if (edge === true) {\n properties.borderSkipped = {\n top: true,\n right: true,\n bottom: true,\n left: true\n };\n return;\n }\n const { start , end , reverse , top , bottom } = borderProps(properties);\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n return edge;\n}\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, { inflateAmount }, ratio) {\n properties.inflateAmount = inflateAmount === 'auto' ? ratio === 1 ? 0.33 : 0 : inflateAmount;\n}\nclass BarController extends DatasetController {\n static id = 'bar';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'base',\n 'width',\n 'height'\n ]\n }\n }\n };\n static overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true\n }\n }\n };\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseObjectData(meta, data, start, count) {\n const { iScale , vScale } = meta;\n const { xAxisKey ='x' , yAxisKey ='y' } = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\n for(i = start, ilen = start + count; i < ilen; ++i){\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n return parsed;\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\n if (custom && scale === this._cachedMeta.vScale) {\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n getMaxOverflow() {\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const { iScale , vScale } = meta;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n updateElements(bars, start, count, mode) {\n const reset = mode === 'reset';\n const { index , _cachedMeta: { vScale } } = this;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = this._getRuler();\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n for(let i = start; i < start + count; i++){\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {\n base,\n head: base\n } : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n const properties = {\n horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || index === stack._top || index === stack._bottom,\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n const options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n _getStacks(last, dataIndex) {\n const { iScale } = this._cachedMeta;\n const metasets = iScale.getMatchingVisibleMetas(this._type).filter((meta)=>meta.controller.options.grouped);\n const stacked = iScale.options.stacked;\n const stacks = [];\n const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);\n const iScaleValue = currentParsed && currentParsed[iScale.axis];\n const skipNull = (meta)=>{\n const parsed = meta._parsed.find((item)=>item[iScale.axis] === iScaleValue);\n const val = parsed && parsed[meta.vScale.axis];\n if (isNullOrUndef(val) || isNaN(val)) {\n return true;\n }\n };\n for (const meta of metasets){\n if (dataIndex !== undefined && skipNull(meta)) {\n continue;\n }\n if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {\n stacks.push(meta.stack);\n }\n if (meta.index === last) {\n break;\n }\n }\n if (!stacks.length) {\n stacks.push(undefined);\n }\n return stacks;\n }\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = name !== undefined ? stacks.indexOf(name) : -1;\n return index === -1 ? stacks.length - 1 : index;\n }\n _getRuler() {\n const opts = this.options;\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n for(i = 0, ilen = meta.data.length; i < ilen; ++i){\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\n return {\n min,\n pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n _calculateBarValuePixels(index) {\n const { _cachedMeta: { vScale , _stacked , index: datasetIndex } , options: { base: baseValue , minBarLength } } = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n if (length !== value) {\n start = length - value;\n length = value;\n }\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n head = base;\n }\n size = head - base;\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n const startPixel = vScale.getPixelForDecimal(0);\n const endPixel = vScale.getPixelForDecimal(1);\n const min = Math.min(startPixel, endPixel);\n const max = Math.max(startPixel, endPixel);\n base = Math.max(Math.min(base, max), min);\n head = base + size;\n if (_stacked && !floating) {\n parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n }\n }\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n _calculateBarIndexPixels(index, ruler) {\n const scale = ruler.scale;\n const options = this.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n if (ruler.grouped) {\n const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount);\n const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n center = range.start + range.chunk * stackIndex + range.chunk / 2;\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n draw() {\n const meta = this._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n for(; i < ilen; ++i){\n if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {\n rects[i].draw(this._ctx);\n }\n }\n }\n}\n\nclass BubbleController extends DatasetController {\n static id = 'bubble';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'borderWidth',\n 'radius'\n ]\n }\n }\n };\n static overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n parsePrimitiveData(meta, data, start, count) {\n const parsed = super.parsePrimitiveData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const parsed = super.parseArrayData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const parsed = super.parseObjectData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n getMaxOverflow() {\n const data = this._cachedMeta.data;\n let max = 0;\n for(let i = data.length - 1; i >= 0; --i){\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const { xScale , yScale } = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n update(mode) {\n const points = this._cachedMeta.data;\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale } = this._cachedMeta;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n for(let i = start; i < start + count; i++){\n const point = points[i];\n const parsed = !reset && this.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n if (reset) {\n properties.options.radius = 0;\n }\n }\n this.updateElement(point, i, properties, mode);\n }\n }\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n if (values.$shared) {\n values = Object.assign({}, values, {\n $shared: false\n });\n }\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n return values;\n }\n}\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n return {\n ratioX,\n ratioY,\n offsetX,\n offsetY\n };\n}\nclass DoughnutController extends DatasetController {\n static id = 'doughnut';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'circumference',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'startAngle',\n 'x',\n 'y',\n 'offset',\n 'borderWidth',\n 'spacing'\n ]\n }\n },\n cutout: '50%',\n rotation: 0,\n circumference: 360,\n radius: '100%',\n spacing: 0,\n indexAxis: 'r'\n };\n static descriptors = {\n _scriptable: (name)=>name !== 'spacing',\n _indexable: (name)=>name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash')\n };\n static overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels (chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const { labels: { pointStyle , color } } = chart.legend.options;\n return data.labels.map((label, i)=>{\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick (e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n }\n };\n constructor(chart, datasetIndex){\n super(chart, datasetIndex);\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n linkScales() {}\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = (i)=>+data[i];\n if (isObject(data[start])) {\n const { key ='value' } = this._parsing;\n getter = (i)=>+resolveObjectKey(data[i], key);\n }\n let i, ilen;\n for(i = start, ilen = start + count; i < ilen; ++i){\n meta._parsed[i] = getter(i);\n }\n }\n }\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n for(let i = 0; i < this.chart.data.datasets.length; ++i){\n if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n const controller = this.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n return {\n rotation: min,\n circumference: max - min\n };\n }\n update(mode) {\n const chart = this.chart;\n const { chartArea } = chart;\n const meta = this._cachedMeta;\n const arcs = meta.data;\n const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n const chartWeight = this._getRingWeight(this.index);\n const { circumference , rotation } = this._getRotationExtents();\n const { ratioX , ratioY , offsetX , offsetY } = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(this.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n meta.total = this.calculateTotal();\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n _circumference(i, reset) {\n const opts = this.options;\n const meta = this._cachedMeta;\n const circumference = this._getCircumference();\n if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : this.innerRadius;\n const outerRadius = animateScale ? 0 : this.outerRadius;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n let startAngle = this._getRotation();\n let i;\n for(i = 0; i < start; ++i){\n startAngle += this._circumference(i, reset);\n }\n for(i = start; i < start + count; ++i){\n const circumference = this._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n this.updateElement(arc, i, properties, mode);\n }\n }\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n for(i = 0; i < metaData.length; i++){\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n return total;\n }\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n return {\n label: labels[index] || '',\n value\n };\n }\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n if (!arcs) {\n for(i = 0, ilen = chart.data.datasets.length; i < ilen; ++i){\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n break;\n }\n }\n }\n if (!arcs) {\n return 0;\n }\n for(i = 0, ilen = arcs.length; i < ilen; ++i){\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n getMaxOffset(arcs) {\n let max = 0;\n for(let i = 0, ilen = arcs.length; i < ilen; ++i){\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n for(let i = 0; i < datasetIndex; ++i){\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n return ringWeightOffset;\n }\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n}\n\nclass LineController extends DatasetController {\n static id = 'line';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n showLine: true,\n spanGaps: false\n };\n static overrides = {\n scales: {\n _index_: {\n type: 'category'\n },\n _value_: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n this.supportsDecimation = true;\n super.initialize();\n }\n update(mode) {\n const meta = this._cachedMeta;\n const { dataset: line , data: points = [] , _dataset } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let { start , count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n this.updateElements(points, start, count, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale , _stacked , _dataset } = this._cachedMeta;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const { spanGaps , segment } = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n const end = start + count;\n const pointsCount = points.length;\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for(let i = 0; i < pointsCount; ++i){\n const point = points[i];\n const properties = directUpdate ? point : {};\n if (i < start || i >= end) {\n properties.skip = true;\n continue;\n }\n const parsed = this.getParsed(i);\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n}\n\nclass PolarAreaController extends DatasetController {\n static id = 'polarArea';\n static defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ]\n }\n },\n indexAxis: 'r',\n startAngle: 0\n };\n static overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels (chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const { labels: { pointStyle , color } } = chart.legend.options;\n return data.labels.map((label, i)=>{\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick (e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n },\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n };\n constructor(chart, datasetIndex){\n super(chart, datasetIndex);\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n return {\n label: labels[index] || '',\n value\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const arcs = this._cachedMeta.data;\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n getMinMax() {\n const meta = this._cachedMeta;\n const range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n meta.data.forEach((element, index)=>{\n const parsed = this.getParsed(index).r;\n if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n return range;\n }\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n this.outerRadius = outerRadius - radiusLength * this.index;\n this.innerRadius = this.outerRadius - radiusLength;\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n const defaultAngle = 360 / this.countVisibleElements();\n for(i = 0; i < start; ++i){\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for(i = start; i < start + count; i++){\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n angle = endAngle;\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n this.updateElement(arc, i, properties, mode);\n }\n }\n countVisibleElements() {\n const meta = this._cachedMeta;\n let count = 0;\n meta.data.forEach((element, index)=>{\n if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n return count;\n }\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index) ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;\n }\n}\n\nclass PieController extends DoughnutController {\n static id = 'pie';\n static defaults = {\n cutout: 0,\n rotation: 0,\n circumference: 360,\n radius: '100%'\n };\n}\n\nclass RadarController extends DatasetController {\n static id = 'radar';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n }\n };\n static overrides = {\n aspectRatio: 1,\n scales: {\n r: {\n type: 'radialLinear'\n }\n }\n };\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n line.points = points;\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n this.updateElement(line, undefined, properties, mode);\n }\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n for(let i = start; i < start + count; i++){\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n this.updateElement(point, i, properties, mode);\n }\n }\n}\n\nclass ScatterController extends DatasetController {\n static id = 'scatter';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n showLine: false,\n fill: false\n };\n static overrides = {\n interaction: {\n mode: 'point'\n },\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const { xScale , yScale } = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + ')'\n };\n }\n update(mode) {\n const meta = this._cachedMeta;\n const { data: points = [] } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let { start , count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n if (this.options.showLine) {\n if (!this.datasetElementType) {\n this.addElements();\n }\n const { dataset: line , _dataset } = meta;\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n } else if (this.datasetElementType) {\n delete meta.dataset;\n this.datasetElementType = false;\n }\n this.updateElements(points, start, count, mode);\n }\n addElements() {\n const { showLine } = this.options;\n if (!this.datasetElementType && showLine) {\n this.datasetElementType = this.chart.registry.getElement('line');\n }\n super.addElements();\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale , _stacked , _dataset } = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const { spanGaps , segment } = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for(let i = start; i < start + count; ++i){\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const data = meta.data || [];\n if (!this.options.showLine) {\n let max = 0;\n for(let i = data.length - 1; i >= 0; --i){\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n}\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPieController: PieController,\nPolarAreaController: PolarAreaController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\n/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */ function abstract() {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */ class DateAdapterBase {\n /**\n * Override default date adapter methods.\n * Accepts type parameter to define options type.\n * @example\n * Chart._adapters._date.override<{myAdapterOption: string}>({\n * init() {\n * console.log(this.options.myAdapterOption);\n * }\n * })\n */ static override(members) {\n Object.assign(DateAdapterBase.prototype, members);\n }\n options;\n constructor(options){\n this.options = options || {};\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n init() {}\n formats() {\n return abstract();\n }\n parse() {\n return abstract();\n }\n format() {\n return abstract();\n }\n add() {\n return abstract();\n }\n diff() {\n return abstract();\n }\n startOf() {\n return abstract();\n }\n endOf() {\n return abstract();\n }\n}\nvar adapters = {\n _date: DateAdapterBase\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n const { controller , data , _sorted } = metaset;\n const iScale = controller._cachedMeta.iScale;\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n return lookupMethod(data, axis, value);\n } else if (controller._sharedOptions) {\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {\n lo: start.lo,\n hi: end.hi\n };\n }\n }\n }\n return {\n lo: 0,\n hi: data.length - 1\n };\n}\n function evaluateInteractionItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for(let i = 0, ilen = metasets.length; i < ilen; ++i){\n const { index , data } = metasets[i];\n const { lo , hi } = binarySearch(metasets[i], axis, value, intersect);\n for(let j = lo; j <= hi; ++j){\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\n function getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n return function(pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\n function getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n const items = [];\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\n }\n const evaluationFunc = function(element, datasetIndex, index) {\n if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n return;\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n };\n evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\n function getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n function evaluationFunc(element, datasetIndex, index) {\n const { startAngle , endAngle } = element.getProps([\n 'startAngle',\n 'endAngle'\n ], useFinalPosition);\n const { angle } = getAngleFromPoint(element, {\n x: position.x,\n y: position.y\n });\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n if (!pointInArea && !inRange) {\n return;\n }\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [\n {\n element,\n datasetIndex,\n index\n }\n ];\n minDistance = distance;\n } else if (distance === minDistance) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n function getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n function getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n const items = [];\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index)=>{\n if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n if (intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\n var Interaction = {\n evaluateInteractionItems,\n modes: {\n index (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'x';\n const includeInvisible = options.includeInvisible || false;\n const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n const elements = [];\n if (!items.length) {\n return [];\n }\n chart.getSortedVisibleDatasetMetas().forEach((meta)=>{\n const index = items[0].index;\n const element = meta.data[index];\n if (element && !element.skip) {\n elements.push({\n element,\n datasetIndex: meta.index,\n index\n });\n }\n });\n return elements;\n },\n dataset (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n let items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for(let i = 0; i < data.length; ++i){\n items.push({\n element: data[i],\n datasetIndex,\n index: i\n });\n }\n }\n return items;\n },\n point (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n },\n nearest (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n },\n x (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\n y (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n }\n }\n};\n\nconst STATIC_POSITIONS = [\n 'left',\n 'top',\n 'right',\n 'bottom'\n];\nfunction filterByPosition(array, position) {\n return array.filter((v)=>v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter((v)=>STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b)=>{\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;\n });\n}\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n for(i = 0, ilen = (boxes || []).length; i < ilen; ++i){\n box = boxes[i];\n ({ position: pos , options: { stack , stackWeight =1 } } = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && pos + stack,\n stackWeight\n });\n }\n return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts){\n const { stack , pos , stackWeight } = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {\n count: 0,\n placed: 0,\n weight: 0,\n size: 0\n });\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\n function setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const { vBoxMaxWidth , hBoxMaxHeight } = params;\n let i, ilen, layout;\n for(i = 0, ilen = layouts.length; i < ilen; ++i){\n layout = layouts[i];\n const { fullSize } = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter((wrap)=>wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n return {\n fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n const { pos , box } = layout;\n const maxPadding = chartArea.maxPadding;\n if (!isObject(pos)) {\n if (layout.size) {\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {\n size: 0,\n count: 1\n };\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n return layout.horizontal ? {\n same: widthChanged,\n other: heightChanged\n } : {\n same: heightChanged,\n other: widthChanged\n };\n}\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n function marginForPositions(positions) {\n const margin = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n positions.forEach((pos)=>{\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n return horizontal ? marginForPositions([\n 'left',\n 'right'\n ]) : marginForPositions([\n 'top',\n 'bottom'\n ]);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n for(i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i){\n layout = boxes[i];\n box = layout.box;\n box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));\n const { same , other } = updateDims(chartArea, params, layout, stacks);\n refit |= same && refitBoxes.length;\n changed = changed || other;\n if (!box.fullSize) {\n refitBoxes.push(layout);\n }\n }\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let { x , y } = chartArea;\n for (const layout of boxes){\n const box = layout.box;\n const stack = stacks[layout.stack] || {\n count: 1,\n placed: 0,\n weight: 1\n };\n const weight = layout.stackWeight / stack.weight || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height = chartArea.h * weight;\n const width = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n }\n stack.start = x;\n stack.placed += height;\n x = box.right;\n }\n }\n chartArea.x = x;\n chartArea.y = y;\n}\nvar layouts = {\n addBox (chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n item._layers = item._layers || function() {\n return [\n {\n z: 0,\n draw (chartArea) {\n item.draw(chartArea);\n }\n }\n ];\n };\n chart.boxes.push(item);\n },\n removeBox (chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n configure (chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n update (chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n each(chart.boxes, (box)=>{\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap)=>wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n handleMaxPadding(chartArea);\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w\n };\n each(boxes.chartArea, (layout)=>{\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n });\n });\n }\n};\n\nclass BasePlatform {\n acquireContext(canvas, aspectRatio) {}\n releaseContext(context) {\n return false;\n }\n addEventListener(chart, type, listener) {}\n removeEventListener(chart, type, listener) {}\n getDevicePixelRatio() {\n return 1;\n }\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n isAttached(canvas) {\n return true;\n }\n updateConfig(config) {\n }\n}\n\nclass BasicPlatform extends BasePlatform {\n acquireContext(item) {\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\n\nconst EXPANDO_KEY = '$chartjs';\n const EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\nconst isNullOrEmpty = (value)=>value === null || value === '';\n function initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n style.display = style.display || 'block';\n style.boxSizing = style.boxSizing || 'border-box';\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {\n passive: true\n} : false;\nfunction addListener(node, type, listener) {\n if (node) {\n node.addEventListener(type, listener, eventListenerOptions);\n }\n}\nfunction removeListener(chart, type, listener) {\n if (chart && chart.canvas) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n }\n}\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const { x , y } = getRelativePosition(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null\n };\n}\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList){\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver((entries)=>{\n let trigger = false;\n for (const entry of entries){\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver((entries)=>{\n let trigger = false;\n for (const entry of entries){\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart)=>{\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height)=>{\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n listener();\n }\n }, window);\n const observer = new ResizeObserver((entries)=>{\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event)=>{\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart);\n addListener(canvas, type, proxy);\n return proxy;\n}\n class DomPlatform extends BasePlatform {\n acquireContext(canvas, aspectRatio) {\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n if (context && context.canvas === canvas) {\n initCanvas(canvas, aspectRatio);\n return context;\n }\n return null;\n }\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n const initial = canvas[EXPANDO_KEY].initial;\n [\n 'height',\n 'width'\n ].forEach((prop)=>{\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n const style = initial.style || {};\n Object.keys(style).forEach((key)=>{\n canvas.style[key] = style[key];\n });\n canvas.width = canvas.width;\n delete canvas[EXPANDO_KEY];\n return true;\n }\n addEventListener(chart, type, listener) {\n this.removeEventListener(chart, type);\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n if (!proxy) {\n return;\n }\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n isAttached(canvas) {\n const container = canvas && _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n\nfunction _detectPlatform(canvas) {\n if (!_isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nclass Element {\n static defaults = {};\n static defaultRoutes = undefined;\n x;\n y;\n active = false;\n options;\n $animations;\n tooltipPosition(useFinalPosition) {\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return {\n x,\n y\n };\n }\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n getProps(props, final) {\n const anims = this.$animations;\n if (!final || !anims) {\n // let's not create an object, if not needed\n return this;\n }\n const ret = {};\n props.forEach((prop)=>{\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n });\n return ret;\n }\n}\n\nfunction autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const determinedMaxTicks = determineMaxTicks(scale);\n const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for(i = 0, ilen = numMajorIndices - 1; i < ilen; i++){\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\n function calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n const factors = _factorize(evenMajorSpacing);\n for(let i = 0, ilen = factors.length - 1; i < ilen; i++){\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\n function getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\n function skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n spacing = Math.ceil(spacing);\n for(i = 0; i < ticks.length; i++){\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\n function skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n next = start;\n while(next < 0){\n count++;\n next = Math.round(start + count * spacing);\n }\n for(i = Math.max(start, 0); i < end; i++){\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\n function getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n if (len < 2) {\n return false;\n }\n for(diff = arr[0], i = 1; i < len; ++i){\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n return diff;\n}\n\nconst reverseAlign = (align)=>align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset)=>edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit)=>Math.min(maxTicksLimit || ticksLength, ticksLength);\n function sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n for(; i < len; i += increment){\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\n function getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6;\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n lineValue += validIndex < index ? offset : -offset;\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\n function garbageCollect(caches, length) {\n each(caches, (cache)=>{\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for(i = 0; i < gcLen; ++i){\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\n function getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\n function getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n return lines * font.lineHeight + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\nfunction titleAlign(align, position, reverse) {\n let ret = _toLeftRightCenter(align);\n if (reverse && position !== 'right' || !reverse && position === 'right') {\n ret = reverseAlign(ret);\n }\n return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n const { top , left , bottom , right , chart } = scale;\n const { chartArea , scales } = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n}\nclass Scale extends Element {\n constructor(cfg){\n super();\n this.id = cfg.id;\n this.type = cfg.type;\n this.options = undefined;\n this.ctx = cfg.ctx;\n this.chart = cfg.chart;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n this.maxWidth = undefined;\n this.maxHeight = undefined;\n this.paddingTop = undefined;\n this.paddingBottom = undefined;\n this.paddingLeft = undefined;\n this.paddingRight = undefined;\n this.axis = undefined;\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n this.ticks = [];\n this._gridLineItems = null;\n this._labelItems = null;\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n this._startPixel = undefined;\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n init(options) {\n this.options = options.setContext(this.getContext());\n this.axis = options.axis;\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.parse(options.suggestedMax);\n }\n parse(raw, index) {\n return raw;\n }\n getUserBounds() {\n let { _userMin , _userMax , _suggestedMin , _suggestedMax } = this;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isNumberFinite(_userMin),\n maxDefined: isNumberFinite(_userMax)\n };\n }\n getMinMax(canStack) {\n let { min , max , minDefined , maxDefined } = this.getUserBounds();\n let range;\n if (minDefined && maxDefined) {\n return {\n min,\n max\n };\n }\n const metas = this.getMatchingVisibleMetas();\n for(let i = 0, ilen = metas.length; i < ilen; ++i){\n range = metas[i].controller.getMinMax(this, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n getPadding() {\n return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.paddingBottom || 0\n };\n }\n getTicks() {\n return this.ticks;\n }\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n getLabelItems(chartArea = this.chart.chartArea) {\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n return items;\n }\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n beforeUpdate() {\n callback(this.options.beforeUpdate, [\n this\n ]);\n }\n update(maxWidth, maxHeight, margins) {\n const { beginAtZero , grace , ticks: tickOpts } = this.options;\n const sampleSize = tickOpts.sampleSize;\n this.beforeUpdate();\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n this.beforeBuildTicks();\n this.ticks = this.buildTicks() || [];\n this.afterBuildTicks();\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n this.configure();\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation();\n this.afterCalculateLabelRotation();\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n this.afterAutoSkip();\n }\n if (samplingEnabled) {\n this._convertTicksToLabels(this.ticks);\n }\n this.beforeFit();\n this.fit();\n this.afterFit();\n this.afterUpdate();\n }\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n reversePixels = !reversePixels;\n }\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n afterUpdate() {\n callback(this.options.afterUpdate, [\n this\n ]);\n }\n beforeSetDimensions() {\n callback(this.options.beforeSetDimensions, [\n this\n ]);\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = 0;\n this.bottom = this.height;\n }\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n callback(this.options.afterSetDimensions, [\n this\n ]);\n }\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n callback(this.options[name], [\n this\n ]);\n }\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n beforeTickToLabelConversion() {\n callback(this.options.beforeTickToLabelConversion, [\n this\n ]);\n }\n generateTickLabels(ticks) {\n const tickOpts = this.options.ticks;\n let i, ilen, tick;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n tick = ticks[i];\n tick.label = callback(tickOpts.callback, [\n tick.value,\n i,\n ticks\n ], this);\n }\n }\n afterTickToLabelConversion() {\n callback(this.options.afterTickToLabelConversion, [\n this\n ]);\n }\n beforeCalculateLabelRotation() {\n callback(this.options.beforeCalculateLabelRotation, [\n this\n ]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [\n this\n ]);\n }\n afterAutoSkip() {}\n beforeFit() {\n callback(this.options.beforeFit, [\n this\n ]);\n }\n fit() {\n const minSize = {\n width: 0,\n height: 0\n };\n const { chart , options: { ticks: tickOpts , title: titleOpts , grid: gridOpts } } = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight;\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n if (tickOpts.display && this.ticks.length) {\n const { first , last , widest , highest } = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n if (isHorizontal) {\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n this._handleMargins();\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n _calculatePadding(first, last, sin, cos) {\n const { ticks: { align , padding } , position } = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else if (align !== 'inner') {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n afterFit() {\n callback(this.options.afterFit, [\n this\n ]);\n }\n isHorizontal() {\n const { axis , position } = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n isFullSize() {\n return this.options.fullSize;\n }\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n this.generateTickLabels(ticks);\n let i, ilen;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n this.afterTickToLabelConversion();\n }\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\n if (!labelSizes) {\n const sampleSize = this.options.ticks.sampleSize;\n let ticks = this.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n }\n return labelSizes;\n }\n _computeLabelSizes(ticks, length, maxTicksLimit) {\n const { ctx , _longestTextCache: caches } = this;\n const widths = [];\n const heights = [];\n const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n for(i = 0; i < length; i += increment){\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {\n data: {},\n gc: []\n };\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n for(j = 0, jlen = label.length; j < jlen; ++j){\n nestedLabel = label[j];\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n garbageCollect(caches, length);\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n const valueAt = (idx)=>({\n width: widths[idx] || 0,\n height: heights[idx] || 0\n });\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights\n };\n }\n getLabelForValue(value) {\n return value;\n }\n getPixelForValue(value, index) {\n return NaN;\n }\n getValueForPixel(pixel) {}\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n getBaseValue() {\n const { min , max } = this;\n return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n }\n getContext(index) {\n const ticks = this.ticks || [];\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));\n }\n _tickSize() {\n const optionTicks = this.options.ticks;\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n const labelSizes = this._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n return this.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;\n }\n _isVisible() {\n const display = this.options.display;\n if (display !== 'auto') {\n return !!display;\n }\n return this.getMatchingVisibleMetas().length > 0;\n }\n _computeGridLineItems(chartArea) {\n const axis = this.axis;\n const chart = this.chart;\n const options = this.options;\n const { grid , position , border } = options;\n const offset = grid.offset;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = borderOpts.display ? borderOpts.width : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n if (position === 'top') {\n borderValue = alignBorderValue(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for(i = 0; i < ticksLength; i += step){\n const context = this.getContext(i);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = optsAtIndexBorder.dash || [];\n const borderDashOffset = optsAtIndexBorder.dashOffset;\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n lineValue = getPixelForGridLine(this, i, offset);\n if (lineValue === undefined) {\n continue;\n }\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset\n });\n }\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n return items;\n }\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const { position , ticks: optionTicks } = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const { align , crossAlign , padding , mirror } = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n x = this.chart.scales[positionAxisID].getPixelForValue(value);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n const labelSizes = this._getLabelSizes();\n for(i = 0, ilen = ticks.length; i < ilen; ++i){\n tick = ticks[i];\n label = tick.label;\n const optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n let tickTextAlign = textAlign;\n if (isHorizontal) {\n x = pixel;\n if (textAlign === 'inner') {\n if (i === ilen - 1) {\n tickTextAlign = !this.options.reverse ? 'right' : 'left';\n } else if (i === 0) {\n tickTextAlign = !this.options.reverse ? 'left' : 'right';\n } else {\n tickTextAlign = 'center';\n }\n }\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n x += lineHeight / 2 * Math.sin(rotation);\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n let backdrop;\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n let top = textOffset - labelPadding.top;\n let left = 0 - labelPadding.left;\n switch(textBaseline){\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n }\n switch(textAlign){\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n case 'inner':\n if (i === ilen - 1) {\n left -= width;\n } else if (i > 0) {\n left -= width / 2;\n }\n break;\n }\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n color: optsAtIndex.backdropColor\n };\n }\n items.push({\n label,\n font,\n textOffset,\n options: {\n rotation,\n color,\n strokeColor,\n strokeWidth,\n textAlign: tickTextAlign,\n textBaseline,\n translation: [\n x,\n y\n ],\n backdrop\n }\n });\n }\n return items;\n }\n _getXAxisLabelAlignment() {\n const { position , ticks } = this.options;\n const rotation = -toRadians(this.labelRotation);\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n let align = 'center';\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n } else if (ticks.align === 'inner') {\n align = 'inner';\n }\n return align;\n }\n _getYAxisLabelAlignment(tl) {\n const { position , ticks: { crossAlign , mirror , padding } } = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n let textAlign;\n let x;\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n return {\n textAlign,\n x\n };\n }\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n const chart = this.chart;\n const position = this.options.position;\n if (position === 'left' || position === 'right') {\n return {\n top: 0,\n left: this.left,\n bottom: chart.height,\n right: this.right\n };\n }\n if (position === 'top' || position === 'bottom') {\n return {\n top: this.top,\n left: 0,\n bottom: this.bottom,\n right: chart.width\n };\n }\n }\n drawBackground() {\n const { ctx , options: { backgroundColor } , left , top , width , height } = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n getLineWidthForValue(value) {\n const grid = this.options.grid;\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = this.ticks;\n const index = ticks.findIndex((t)=>t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n drawGrid(chartArea) {\n const grid = this.options.grid;\n const ctx = this.ctx;\n const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n let i, ilen;\n const drawLine = (p1, p2, style)=>{\n if (!style.width || !style.color) {\n return;\n }\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n if (grid.display) {\n for(i = 0, ilen = items.length; i < ilen; ++i){\n const item = items[i];\n if (grid.drawOnChartArea) {\n drawLine({\n x: item.x1,\n y: item.y1\n }, {\n x: item.x2,\n y: item.y2\n }, item);\n }\n if (grid.drawTicks) {\n drawLine({\n x: item.tx1,\n y: item.ty1\n }, {\n x: item.tx2,\n y: item.ty2\n }, {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n });\n }\n }\n }\n }\n drawBorder() {\n const { chart , ctx , options: { border , grid } } = this;\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = border.display ? borderOpts.width : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n const borderValue = this._borderValue;\n let x1, x2, y1, y2;\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n ctx.save();\n ctx.lineWidth = borderOpts.width;\n ctx.strokeStyle = borderOpts.color;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n ctx.restore();\n }\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n if (!optionTicks.display) {\n return;\n }\n const ctx = this.ctx;\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n const items = this.getLabelItems(chartArea);\n for (const item of items){\n const renderTextOptions = item.options;\n const tickFont = item.font;\n const label = item.label;\n const y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n }\n if (area) {\n unclipArea(ctx);\n }\n }\n drawTitle() {\n const { ctx , options: { position , title , reverse } } = this;\n if (!title.display) {\n return;\n }\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n const { titleX , titleY , maxWidth , rotation } = titleArgs(this, offset, position, align);\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [\n titleX,\n titleY\n ]\n });\n }\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n _layers() {\n const opts = this.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n const bz = valueOrDefault(opts.border && opts.border.z, 0);\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n return [\n {\n z: tz,\n draw: (chartArea)=>{\n this.draw(chartArea);\n }\n }\n ];\n }\n return [\n {\n z: gz,\n draw: (chartArea)=>{\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n },\n {\n z: bz,\n draw: ()=>{\n this.drawBorder();\n }\n },\n {\n z: tz,\n draw: (chartArea)=>{\n this.drawLabels(chartArea);\n }\n }\n ];\n }\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\n for(i = 0, ilen = metas.length; i < ilen; ++i){\n const meta = metas[i];\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\n\nclass TypedRegistry {\n constructor(type, scope, override){\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n if (isIChartComponent(proto)) {\n parentScope = this.register(proto);\n }\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n if (id in items) {\n return scope;\n }\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n return scope;\n }\n get(id) {\n return this.items[id];\n }\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n if (id in items) {\n delete items[id];\n }\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\nfunction registerDefaults(item, scope, parentScope) {\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n defaults.set(scope, itemDefaults);\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach((property)=>{\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [\n scope\n ].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n constructor(){\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n this._typedRegistries = [\n this.controllers,\n this.scales,\n this.elements\n ];\n }\n add(...args) {\n this._each('register', args);\n }\n remove(...args) {\n this._each('unregister', args);\n }\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n _each(method, args, typedRegistry) {\n [\n ...args\n ].forEach((arg)=>{\n const reg = typedRegistry || this._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || reg === this.plugins && arg.id) {\n this._exec(method, reg, arg);\n } else {\n each(arg, (item)=>{\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n callback(component['before' + camelMethod], [], component);\n registry[method](component);\n callback(component['after' + camelMethod], [], component);\n }\n _getRegistryForType(type) {\n for(let i = 0; i < this._typedRegistries.length; i++){\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n return this.plugins;\n }\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n}\nvar registry = /* #__PURE__ */ new Registry();\n\nclass PluginService {\n constructor(){\n this._init = [];\n }\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n }\n return result;\n }\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors){\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [\n chart,\n args,\n descriptor.options\n ];\n if (callback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n return true;\n }\n invalidate() {\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n const descriptors = this._cache = this._createDescriptors(chart);\n this._notifyStateChanges(chart);\n return descriptors;\n }\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\n function allPlugins(config) {\n const localIds = {};\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for(let i = 0; i < keys.length; i++){\n plugins.push(registry.getPlugin(keys[i]));\n }\n const local = config.plugins || [];\n for(let i = 0; i < local.length; i++){\n const plugin = local[i];\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n localIds[plugin.id] = true;\n }\n }\n return {\n plugins,\n localIds\n };\n}\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\nfunction createDescriptors(chart, { plugins , localIds }, options, all) {\n const result = [];\n const context = chart.getContext();\n for (const plugin of plugins){\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, {\n plugin,\n local: localIds[id]\n }, opts, context)\n });\n }\n return result;\n}\nfunction pluginOpts(config, { plugin , local }, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n if (local && plugin.defaults) {\n scopes.push(plugin.defaults);\n }\n return config.createResolver(scopes, context, [\n ''\n ], {\n scriptable: false,\n indexable: false,\n allKeys: true\n });\n}\n\nfunction getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction idMatchesAxis(id) {\n if (id === 'x' || id === 'y' || id === 'r') {\n return id;\n }\n}\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\nfunction determineAxis(id, ...scaleOptions) {\n if (idMatchesAxis(id)) {\n return id;\n }\n for (const opts of scaleOptions){\n const axis = opts.axis || axisFromPosition(opts.position) || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n if (axis) {\n return axis;\n }\n }\n throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\nfunction getAxisFromDataset(id, axis, dataset) {\n if (dataset[axis + 'AxisID'] === id) {\n return {\n axis\n };\n }\n}\nfunction retrieveAxisFromDatasets(id, config) {\n if (config.data && config.data.datasets) {\n const boundDs = config.data.datasets.filter((d)=>d.xAxisID === id || d.yAxisID === id);\n if (boundDs.length) {\n return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n }\n }\n return {};\n}\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {\n scales: {}\n };\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const scales = Object.create(null);\n Object.keys(configScales).forEach((id)=>{\n const scaleConf = configScales[id];\n if (!isObject(scaleConf)) {\n return console.error(`Invalid scale configuration for scale: ${id}`);\n }\n if (scaleConf._proxy) {\n return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n }\n const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n scales[id] = mergeIf(Object.create(null), [\n {\n axis\n },\n scaleConf,\n defaultScaleOptions[axis],\n defaultScaleOptions[defaultId]\n ]);\n });\n config.data.datasets.forEach((dataset)=>{\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach((defaultID)=>{\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [\n {\n axis\n },\n configScales[id],\n defaultScaleOptions[defaultID]\n ]);\n });\n });\n Object.keys(scales).forEach((key)=>{\n const scale = scales[key];\n mergeIf(scale, [\n defaults.scales[scale.type],\n defaults.scale\n ]);\n });\n return scales;\n}\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n initOptions(config);\n return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\nconst addIfFound = (set, obj, key)=>{\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\nclass Config {\n constructor(config){\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n get platform() {\n return this._config.platform;\n }\n get type() {\n return this._config.type;\n }\n set type(type) {\n this._config.type = type;\n }\n get data() {\n return this._config.data;\n }\n set data(data) {\n this._config.data = initData(data);\n }\n get options() {\n return this._config.options;\n }\n set options(options) {\n this._config.options = options;\n }\n get plugins() {\n return this._config.plugins;\n }\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType, ()=>[\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`, ()=>[\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`\n ],\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`, ()=>[\n [\n `datasets.${datasetType}.elements.${elementType}`,\n `datasets.${datasetType}`,\n `elements.${elementType}`,\n ''\n ]\n ]);\n }\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`, ()=>[\n [\n `plugins.${id}`,\n ...plugin.additionalOptionScopes || []\n ]\n ]);\n }\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n getOptionScopes(mainScope, keyLists, resetCache) {\n const { options , type } = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n const scopes = new Set();\n keyLists.forEach((keys)=>{\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach((key)=>addIfFound(scopes, mainScope, key));\n }\n keys.forEach((key)=>addIfFound(scopes, options, key));\n keys.forEach((key)=>addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach((key)=>addIfFound(scopes, defaults, key));\n keys.forEach((key)=>addIfFound(scopes, descriptors, key));\n });\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n chartOptionScopes() {\n const { options , type } = this;\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {},\n {\n type\n },\n defaults,\n descriptors\n ];\n }\n resolveNamedOptions(scopes, names, context, prefixes = [\n ''\n ]) {\n const result = {\n $shared: true\n };\n const { resolver , subPrefixes } = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n for (const prop of names){\n result[prop] = options[prop];\n }\n return result;\n }\n createResolver(scopes, context, prefixes = [\n ''\n ], descriptorDefaults) {\n const { resolver } = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context) ? _attachContext(resolver, context, undefined, descriptorDefaults) : resolver;\n }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter((p)=>!p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\nconst hasFunction = (value)=>isObject(value) && Object.getOwnPropertyNames(value).some((key)=>isFunction(value[key]));\nfunction needContext(proxy, names) {\n const { isScriptable , isIndexable } = _descriptors(proxy);\n for (const prop of names){\n const scriptable = isScriptable(prop);\n const indexable = isIndexable(prop);\n const value = (indexable || scriptable) && proxy[prop];\n if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) {\n return true;\n }\n }\n return false;\n}\n\nvar version = \"4.4.4\";\n\nconst KNOWN_POSITIONS = [\n 'top',\n 'bottom',\n 'left',\n 'right',\n 'chartArea'\n];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';\n}\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];\n };\n}\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n chart.notifyPlugins('afterRender');\n callback(animationOptions && animationOptions.onComplete, [\n context\n ], chart);\n}\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callback(animationOptions && animationOptions.onProgress, [\n context\n ], chart);\n}\n function getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n item = item[0];\n }\n if (item && item.canvas) {\n item = item.canvas;\n }\n return item;\n}\nconst instances = {};\nconst getChart = (key)=>{\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c)=>c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n const keys = Object.keys(obj);\n for (const key of keys){\n const intKey = +key;\n if (intKey >= start) {\n const value = obj[key];\n delete obj[key];\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\n function determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n if (isClick) {\n return lastEvent;\n }\n return e;\n}\nfunction getSizeForArea(scale, chartArea, field) {\n return scale.options.clip ? scale[field] : chartArea[field];\n}\nfunction getDatasetArea(meta, chartArea) {\n const { xScale , yScale } = meta;\n if (xScale && yScale) {\n return {\n left: getSizeForArea(xScale, chartArea, 'left'),\n right: getSizeForArea(xScale, chartArea, 'right'),\n top: getSizeForArea(yScale, chartArea, 'top'),\n bottom: getSizeForArea(yScale, chartArea, 'bottom')\n };\n }\n return chartArea;\n}\nclass Chart {\n static defaults = defaults;\n static instances = instances;\n static overrides = overrides;\n static registry = registry;\n static version = version;\n static getChart = getChart;\n static register(...items) {\n registry.add(...items);\n invalidatePlugins();\n }\n static unregister(...items) {\n registry.remove(...items);\n invalidatePlugins();\n }\n constructor(item, userConfig){\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error('Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' + ' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.');\n }\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const width = canvas && canvas.width;\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce((mode)=>this.update(mode), options.resizeDelay || 0);\n this._dataChanges = [];\n instances[this.id] = this;\n if (!context || !canvas) {\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n get aspectRatio() {\n const { options: { aspectRatio , maintainAspectRatio } , width , height , _aspectRatio } = this;\n if (!isNullOrUndef(aspectRatio)) {\n return aspectRatio;\n }\n if (maintainAspectRatio && _aspectRatio) {\n return _aspectRatio;\n }\n return height ? width / height : null;\n }\n get data() {\n return this.config.data;\n }\n set data(data) {\n this.config.data = data;\n }\n get options() {\n return this._options;\n }\n set options(options) {\n this.config.options = options;\n }\n get registry() {\n return registry;\n }\n _initialize() {\n this.notifyPlugins('beforeInit');\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n this.bindEvents();\n this.notifyPlugins('afterInit');\n return this;\n }\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n stop() {\n animator.stop(this);\n return this;\n }\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {\n width,\n height\n };\n }\n }\n _resize(width, height) {\n const options = this.options;\n const canvas = this.canvas;\n const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n const mode = this.width ? 'resize' : 'attach';\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n this.notifyPlugins('resize', {\n size: newSize\n });\n callback(options.onResize, [\n this,\n newSize\n ], this);\n if (this.attached) {\n if (this._doResize(mode)) {\n this.render();\n }\n }\n }\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n each(scalesOptions, (axisOptions, axisID)=>{\n axisOptions.id = axisID;\n });\n }\n buildOrUpdateScales() {\n const options = this.options;\n const scaleOpts = options.scales;\n const scales = this.scales;\n const updated = Object.keys(scales).reduce((obj, id)=>{\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n if (scaleOpts) {\n items = items.concat(Object.keys(scaleOpts).map((id)=>{\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n }));\n }\n each(items, (item)=>{\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: this.ctx,\n chart: this\n });\n scales[scale.id] = scale;\n }\n scale.init(scaleOptions, options);\n });\n each(updated, (hasUpdated, id)=>{\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n each(scales, (scale)=>{\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\n metasets.sort((a, b)=>a.index - b.index);\n if (numMeta > numData) {\n for(let i = numData; i < numMeta; ++i){\n this._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n _removeUnreferencedMetasets() {\n const { _metasets: metasets , data: { datasets } } = this;\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n metasets.forEach((meta, index)=>{\n if (datasets.filter((x)=>x === meta._dataset).length === 0) {\n this._destroyDatasetMeta(index);\n }\n });\n }\n buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n this._removeUnreferencedMetasets();\n for(i = 0, ilen = datasets.length; i < ilen; i++){\n const dataset = datasets[i];\n let meta = this.getDatasetMeta(i);\n const type = dataset.type || this.config.type;\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n meta = this.getDatasetMeta(i);\n }\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.isDatasetVisible(i);\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const { datasetElementType , dataElementType } = defaults.datasets[type];\n Object.assign(ControllerClass, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n this._updateMetasets();\n return newControllers;\n }\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex)=>{\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n update(mode) {\n const config = this.config;\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n this._plugins.invalidate();\n if (this.notifyPlugins('beforeUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n const newControllers = this.buildOrUpdateControllers();\n this.notifyPlugins('beforeElementsUpdate');\n let minPadding = 0;\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; i++){\n const { controller } = this.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n this._updateLayout(minPadding);\n if (!animsDisabled) {\n each(newControllers, (controller)=>{\n controller.reset();\n });\n }\n this._updateDatasets(mode);\n this.notifyPlugins('afterUpdate', {\n mode\n });\n this._layers.sort(compare2Level('z', '_idx'));\n const { _active , _lastEvent } = this;\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n this.render();\n }\n _updateScales() {\n each(this.scales, (scale)=>{\n layouts.removeBox(this, scale);\n });\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n this.unbindEvents();\n this.bindEvents();\n }\n }\n _updateHiddenIndices() {\n const { _hiddenIndices } = this;\n const changes = this._getUniformDataChanges() || [];\n for (const { method , start , count } of changes){\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx)=>new Set(_dataChanges.filter((c)=>c[0] === idx).map((c, i)=>i + ',' + c.splice(1).join(',')));\n const changeSet = makeSet(0);\n for(let i = 1; i < datasetCount; i++){\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n return Array.from(changeSet).map((c)=>c.split(',')).map((a)=>({\n method: a[1],\n start: +a[2],\n count: +a[3]\n }));\n }\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {\n cancelable: true\n }) === false) {\n return;\n }\n layouts.update(this, this.width, this.height, minPadding);\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n this._layers = [];\n each(this.boxes, (box)=>{\n if (noArea && box.position === 'chartArea') {\n return;\n }\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n this._layers.forEach((item, index)=>{\n item._idx = index;\n });\n this.notifyPlugins('afterLayout');\n }\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this.getDatasetMeta(i).controller.configure();\n }\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this._updateDataset(i, isFunction(mode) ? mode({\n datasetIndex: i\n }) : mode);\n }\n this.notifyPlugins('afterDatasetsUpdate', {\n mode\n });\n }\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {\n meta,\n index,\n mode,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n meta.controller._update(mode);\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n render() {\n if (this.notifyPlugins('beforeRender', {\n cancelable: true\n }) === false) {\n return;\n }\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({\n chart: this\n });\n }\n }\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const { width , height } = this._resizeBeforeDraw;\n this._resizeBeforeDraw = null;\n this._resize(width, height);\n }\n this.clear();\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n if (this.notifyPlugins('beforeDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n const layers = this._layers;\n for(i = 0; i < layers.length && layers[i].z <= 0; ++i){\n layers[i].draw(this.chartArea);\n }\n this._drawDatasets();\n for(; i < layers.length; ++i){\n layers[i].draw(this.chartArea);\n }\n this.notifyPlugins('afterDraw');\n }\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\n for(i = 0, ilen = metasets.length; i < ilen; ++i){\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n return result;\n }\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n const metasets = this.getSortedVisibleDatasetMetas();\n for(let i = metasets.length - 1; i >= 0; --i){\n this._drawDataset(metasets[i]);\n }\n this.notifyPlugins('afterDatasetsDraw');\n }\n _drawDataset(meta) {\n const ctx = this.ctx;\n const clip = meta._clip;\n const useClip = !clip.disabled;\n const area = getDatasetArea(meta, this.chartArea);\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n if (useClip) {\n clipArea(ctx, {\n left: clip.left === false ? 0 : area.left - clip.left,\n right: clip.right === false ? this.width : area.right + clip.right,\n top: clip.top === false ? 0 : area.top - clip.top,\n bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n });\n }\n meta.controller.draw();\n if (useClip) {\n unclipArea(ctx);\n }\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\n }\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n return [];\n }\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter((x)=>x && x._dataset === dataset).pop();\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n return meta;\n }\n getContext() {\n return this.$context || (this.$context = createContext(null, {\n chart: this,\n type: 'chart'\n }));\n }\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n const meta = this.getDatasetMeta(datasetIndex);\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const mode = visible ? 'show' : 'hide';\n const meta = this.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n anims.update(meta, {\n visible\n });\n this.update((ctx)=>ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n for(i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this._destroyDatasetMeta(i);\n }\n }\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const { canvas , ctx } = this;\n this._stop();\n this.config.clearCache();\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n delete instances[this.id];\n this.notifyPlugins('afterDestroy');\n }\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n const _add = (type, listener)=>{\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const listener = (e, x, y)=>{\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n each(this.options.events, (type)=>_add(type, listener));\n }\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n const _add = (type, listener)=>{\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener)=>{\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n const listener = (width, height)=>{\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n let detached;\n const attached = ()=>{\n _remove('attach', attached);\n this.attached = true;\n this.resize();\n _add('resize', listener);\n _add('detach', detached);\n };\n detached = ()=>{\n this.attached = false;\n _remove('resize', listener);\n this._stop();\n this._resize(0, 0);\n _add('attach', attached);\n };\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n unbindEvents() {\n each(this._listeners, (listener, type)=>{\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n each(this._responsiveListeners, (listener, type)=>{\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n for(i = 0, ilen = items.length; i < ilen; ++i){\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({ datasetIndex , index })=>{\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n if (changed) {\n this._active = active;\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n isPluginEnabled(pluginId) {\n return this._plugins._cache.filter((p)=>p.plugin.id === pluginId).length === 1;\n }\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n _eventHandler(e, replay) {\n const args = {\n event: e,\n replay,\n cancelable: true,\n inChartArea: this.isPointInArea(e)\n };\n const eventFilter = (plugin)=>(plugin.options.events || this.options.events).includes(e.native.type);\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n const changed = this._handleEvent(e, replay, args.inChartArea);\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n if (changed || args.changed) {\n this.render();\n }\n return this;\n }\n _handleEvent(e, replay, inChartArea) {\n const { _active: lastActive = [] , options } = this;\n const useFinalPosition = replay;\n const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n const isClick = _isClickEvent(e);\n const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n if (inChartArea) {\n this._lastEvent = null;\n callback(options.onHover, [\n e,\n active,\n this\n ], this);\n if (isClick) {\n callback(options.onClick, [\n e,\n active,\n this\n ], this);\n }\n }\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n this._lastEvent = lastEvent;\n return changed;\n }\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n}\nfunction invalidatePlugins() {\n return each(Chart.instances, (chart)=>chart._plugins.invalidate());\n}\n\nfunction clipArc(ctx, element, endAngle) {\n const { startAngle , pixelMargin , x , y , outerRadius , innerRadius } = element;\n let angleMargin = pixelMargin / outerRadius;\n // Draw an inner border by clipping the arc and drawing a double-width border\n // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n ctx.closePath();\n ctx.clip();\n}\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, [\n 'outerStart',\n 'outerEnd',\n 'innerStart',\n 'innerEnd'\n ]);\n}\n/**\n * Parse border radius from the provided options\n */ function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n // Outer limits are complicated. We want to compute the available angular distance at\n // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n //\n // If the borderRadius is large, that value can become negative.\n // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n // we know that the thickness term will dominate and compute the limits at that point\n const computeOuterLimit = (val)=>{\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit)\n };\n}\n/**\n * Convert (r, 𝜃) to (x, y)\n */ function rThetaToXY(r, theta, x, y) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta)\n };\n}\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n * Start End\n *\n * 1--->a--->2 Outer\n * / \\\n * 8 3\n * | |\n * | |\n * 7 4\n * \\ /\n * 6<---b<---5 Inner\n */ function pathArc(ctx, element, offset, spacing, end, circular) {\n const { x , y , startAngle: start , pixelMargin , innerRadius: innerR } = element;\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n let spacingOffset = 0;\n const alpha = end - start;\n if (spacing) {\n // When spacing is present, it is the same for all items\n // So we adjust the start and end angle of the arc such that\n // the distance is the same as it would be without the spacing\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? alpha * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const { outerStart , outerEnd , innerStart , innerEnd } = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n ctx.beginPath();\n if (circular) {\n // The first arc segments from point 1 to point a to point 2\n const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n // The corner segment from point 2 to point 3\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n // The line from point 3 to point 4\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n // The corner segment from point 4 to point 5\n if (innerEnd > 0) {\n const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n // The inner arc from point 5 to point b to point 6\n const innerMidAdjustedAngle = (endAngle - innerEnd / innerRadius + (startAngle + innerStart / innerRadius)) / 2;\n ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, innerMidAdjustedAngle, true);\n ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart / innerRadius, true);\n // The corner segment from point 6 to point 7\n if (innerStart > 0) {\n const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n // The line from point 7 to point 8\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n // The corner segment from point 8 to point 1\n if (outerStart > 0) {\n const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n } else {\n ctx.moveTo(x, y);\n const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerStartX, outerStartY);\n const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerEndX, outerEndY);\n }\n ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\n const { fullCircles , startAngle , circumference } = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for(let i = 0; i < fullCircles; ++i){\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.fill();\n return endAngle;\n}\nfunction drawBorder(ctx, element, offset, spacing, circular) {\n const { fullCircles , startAngle , circumference , options } = element;\n const { borderWidth , borderJoinStyle , borderDash , borderDashOffset } = options;\n const inner = options.borderAlign === 'inner';\n if (!borderWidth) {\n return;\n }\n ctx.setLineDash(borderDash || []);\n ctx.lineDashOffset = borderDashOffset;\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for(let i = 0; i < fullCircles; ++i){\n ctx.stroke();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n if (!fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.stroke();\n }\n}\nclass ArcElement extends Element {\n static id = 'arc';\n static defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n circular: true\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: (name)=>name !== 'borderDash'\n };\n circumference;\n endAngle;\n fullCircles;\n innerRadius;\n outerRadius;\n pixelMargin;\n startAngle;\n constructor(cfg){\n super();\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(chartX, chartY, useFinalPosition) {\n const point = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n const { angle , distance } = getAngleFromPoint(point, {\n x: chartX,\n y: chartY\n });\n const { startAngle , endAngle , innerRadius , outerRadius , circumference } = this.getProps([\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference'\n ], useFinalPosition);\n const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;\n const betweenAngles = _circumference >= TAU || nonZeroBetween;\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n return betweenAngles && withinRadius;\n }\n getCenterPoint(useFinalPosition) {\n const { x , y , startAngle , endAngle , innerRadius , outerRadius } = this.getProps([\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ], useFinalPosition);\n const { offset , spacing } = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n tooltipPosition(useFinalPosition) {\n return this.getCenterPoint(useFinalPosition);\n }\n draw(ctx) {\n const { options , circumference } = this;\n const offset = (options.offset || 0) / 4;\n const spacing = (options.spacing || 0) / 2;\n const circular = options.circular;\n this.pixelMargin = options.borderAlign === 'inner' ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n ctx.save();\n const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n const radiusOffset = offset * fix;\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n drawArc(ctx, this, radiusOffset, spacing, circular);\n drawBorder(ctx, this, radiusOffset, spacing, circular);\n ctx.restore();\n }\n}\n\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\n function getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const { start: paramsStart = 0 , end: paramsEnd = count - 1 } = params;\n const { start: segmentStart , end: segmentEnd } = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\n function pathSegment(ctx, line, segment, params) {\n const { points , options } = line;\n const { count , start , loop , ilen } = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n let { move =true , reverse } = params || {};\n let i, point, prev;\n for(i = 0; i <= ilen; ++i){\n point = points[(start + (reverse ? ilen - i : i)) % count];\n if (point.skip) {\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n prev = point;\n }\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n return !!loop;\n}\n function fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const { count , start , ilen } = pathVars(points, segment, params);\n const { move =true , reverse } = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n const pointIndex = (index)=>(start + (reverse ? ilen - index : index)) % count;\n const drawX = ()=>{\n if (minY !== maxY) {\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n ctx.lineTo(avgX, lastY);\n }\n };\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n for(i = 0; i <= ilen; ++i){\n point = points[pointIndex(i)];\n if (point.skip) {\n continue;\n }\n const x = point.x;\n const y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n ctx.lineTo(x, y);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n lastY = y;\n }\n drawX();\n}\n function _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\n function _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n const { segments , options } = line;\n const segmentMethod = _getSegmentMethod(line);\n for (const segment of segments){\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {\n start,\n end: start + count - 1\n })) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\nclass LineElement extends Element {\n static id = 'line';\n static defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: (name)=>name !== 'borderDash' && name !== 'fill'\n };\n constructor(cfg){\n super();\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n get points() {\n return this._points;\n }\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {\n property,\n start: value,\n end: value\n });\n if (!segments.length) {\n return;\n }\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for(i = 0, ilen = segments.length; i < ilen; ++i){\n const { start , end } = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n start = start || 0;\n count = count || this.points.length - start;\n for (const segment of segments){\n loop &= segmentMethod(ctx, this, segment, {\n start,\n end: start + count - 1\n });\n }\n return !!loop;\n }\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n if (points.length && options.borderWidth) {\n ctx.save();\n draw(ctx, this, start, count);\n ctx.restore();\n }\n if (this.animated) {\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n}\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n const options = el.options;\n const { [axis]: value } = el.getProps([\n axis\n ], useFinalPosition);\n return Math.abs(pos - value) < options.radius + options.hitRadius;\n}\nclass PointElement extends Element {\n static id = 'point';\n parsed;\n skip;\n stop;\n /**\n * @type {any}\n */ static defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n };\n /**\n * @type {any}\n */ static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg){\n super();\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n const options = this.options;\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange$1(this, mouseX, 'x', useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange$1(this, mouseY, 'y', useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return {\n x,\n y\n };\n }\n size(options) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n draw(ctx, area) {\n const options = this.options;\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n getRange() {\n const options = this.options || {};\n // @ts-expect-error Fallbacks should never be hit in practice\n return options.radius + options.hitRadius;\n }\n}\n\nfunction getBarBounds(bar, useFinalPosition) {\n const { x , y , base , width , height } = bar.getProps([\n 'x',\n 'y',\n 'base',\n 'width',\n 'height'\n ], useFinalPosition);\n let left, right, top, bottom, half;\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n return {\n left,\n top,\n right,\n bottom\n };\n}\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n const { enableBorderRadius } = bar.getProps([\n 'enableBorderRadius'\n ]);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n const enableBorder = enableBorderRadius || isObject(value);\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))\n }\n }\n };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n function addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\nclass BarElement extends Element {\n static id = 'bar';\n static defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg){\n super();\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n draw(ctx) {\n const { inflateAmount , options: { borderColor , backgroundColor } } = this;\n const { inner , outer } = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n ctx.save();\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const { x , y , base , horizontal } = this.getProps([\n 'x',\n 'y',\n 'base',\n 'horizontal'\n ], useFinalPosition);\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nBarElement: BarElement,\nLineElement: LineElement,\nPointElement: PointElement\n});\n\nconst BORDER_COLORS = [\n 'rgb(54, 162, 235)',\n 'rgb(255, 99, 132)',\n 'rgb(255, 159, 64)',\n 'rgb(255, 205, 86)',\n 'rgb(75, 192, 192)',\n 'rgb(153, 102, 255)',\n 'rgb(201, 203, 207)' // grey\n];\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map((color)=>color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\nfunction getBorderColor(i) {\n return BORDER_COLORS[i % BORDER_COLORS.length];\n}\nfunction getBackgroundColor(i) {\n return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\nfunction colorizeDefaultDataset(dataset, i) {\n dataset.borderColor = getBorderColor(i);\n dataset.backgroundColor = getBackgroundColor(i);\n return ++i;\n}\nfunction colorizeDoughnutDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(()=>getBorderColor(i++));\n return i;\n}\nfunction colorizePolarAreaDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(()=>getBackgroundColor(i++));\n return i;\n}\nfunction getColorizer(chart) {\n let i = 0;\n return (dataset, datasetIndex)=>{\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n if (controller instanceof DoughnutController) {\n i = colorizeDoughnutDataset(dataset, i);\n } else if (controller instanceof PolarAreaController) {\n i = colorizePolarAreaDataset(dataset, i);\n } else if (controller) {\n i = colorizeDefaultDataset(dataset, i);\n }\n };\n}\nfunction containsColorsDefinitions(descriptors) {\n let k;\n for(k in descriptors){\n if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n return true;\n }\n }\n return false;\n}\nfunction containsColorsDefinition(descriptor) {\n return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\nvar plugin_colors = {\n id: 'colors',\n defaults: {\n enabled: true,\n forceOverride: false\n },\n beforeLayout (chart, _args, options) {\n if (!options.enabled) {\n return;\n }\n const { data: { datasets } , options: chartOptions } = chart.config;\n const { elements } = chartOptions;\n if (!options.forceOverride && (containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || elements && containsColorsDefinitions(elements))) {\n return;\n }\n const colorizer = getColorizer(chart);\n datasets.forEach(colorizer);\n }\n};\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n const decimated = [];\n const bucketWidth = (count - 2) / (samples - 2);\n let sampledIndex = 0;\n const endIndex = start + count - 1;\n let a = start;\n let i, maxAreaPoint, maxArea, area, nextA;\n decimated[sampledIndex++] = data[a];\n for(i = 0; i < samples - 2; i++){\n let avgX = 0;\n let avgY = 0;\n let j;\n const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n const avgRangeLength = avgRangeEnd - avgRangeStart;\n for(j = avgRangeStart; j < avgRangeEnd; j++){\n avgX += data[j].x;\n avgY += data[j].y;\n }\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n const { x: pointAx , y: pointAy } = data[a];\n maxArea = area = -1;\n for(j = rangeOffs; j < rangeTo; j++){\n area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n decimated[sampledIndex++] = data[endIndex];\n return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n let avgX = 0;\n let countX = 0;\n let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n const decimated = [];\n const endIndex = start + count - 1;\n const xMin = data[start].x;\n const xMax = data[endIndex].x;\n const dx = xMax - xMin;\n for(i = start; i < start + count; ++i){\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n minIndex = i;\n } else if (y > maxY) {\n maxY = y;\n maxIndex = i;\n }\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n const lastIndex = i - 1;\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n const intermediateIndex1 = Math.min(minIndex, maxIndex);\n const intermediateIndex2 = Math.max(minIndex, maxIndex);\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex1],\n x: avgX\n });\n }\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex2],\n x: avgX\n });\n }\n }\n if (i > 0 && lastIndex !== startIndex) {\n decimated.push(data[lastIndex]);\n }\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n const data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n writable: true,\n value: data\n });\n }\n}\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach((dataset)=>{\n cleanDecimatedDataset(dataset);\n });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n const pointCount = points.length;\n let start = 0;\n let count;\n const { iScale } = meta;\n const { min , max , minDefined , maxDefined } = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n return {\n start,\n count\n };\n}\nvar plugin_decimation = {\n id: 'decimation',\n defaults: {\n algorithm: 'min-max',\n enabled: false\n },\n beforeElementsUpdate: (chart, args, options)=>{\n if (!options.enabled) {\n cleanDecimatedData(chart);\n return;\n }\n const availableWidth = chart.width;\n chart.data.datasets.forEach((dataset, datasetIndex)=>{\n const { _data , indexAxis } = dataset;\n const meta = chart.getDatasetMeta(datasetIndex);\n const data = _data || dataset.data;\n if (resolve([\n indexAxis,\n chart.options.indexAxis\n ]) === 'y') {\n return;\n }\n if (!meta.controller.supportsDecimation) {\n return;\n }\n const xAxis = chart.scales[meta.xAxisID];\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n if (chart.options.parsing) {\n return;\n }\n let { start , count } = getStartAndCountOfVisiblePointsSimplified(meta, data);\n const threshold = options.threshold || 4 * availableWidth;\n if (count <= threshold) {\n cleanDecimatedDataset(dataset);\n return;\n }\n if (isNullOrUndef(_data)) {\n dataset._data = data;\n delete dataset.data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this._decimated;\n },\n set: function(d) {\n this._data = d;\n }\n });\n }\n let decimated;\n switch(options.algorithm){\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n default:\n throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n }\n dataset._decimated = decimated;\n });\n },\n destroy (chart) {\n cleanDecimatedData(chart);\n }\n};\n\nfunction _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n for (const segment of segments){\n let { start , end } = segment;\n end = _findSegmentEnd(start, end, points);\n const bounds = _getBounds(property, points[start], points[end], segment.loop);\n if (!target.segments) {\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n const targetSegments = _boundSegments(target, bounds);\n for (const tgt of targetSegments){\n const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n for (const fillSource of fillSources){\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {\n property,\n start,\n end\n };\n}\nfunction _pointsFromSegments(boundary, line) {\n const { x =null , y =null } = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({ start , end })=>{\n end = _findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({\n x: first.x,\n y\n });\n points.push({\n x: last.x,\n y\n });\n } else if (x !== null) {\n points.push({\n x,\n y: first.y\n });\n points.push({\n x,\n y: last.y\n });\n }\n });\n return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n for(; end > start; end--){\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = _pointsFromSegments(boundary, line);\n }\n return points.length ? new LineElement({\n points,\n options: {\n tension: 0\n },\n _loop,\n _fullLoop: _loop\n }) : null;\n}\nfunction _shouldApplyFill(source) {\n return source && source.fill !== false;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [\n index\n ];\n let target;\n if (!propagate) {\n return fill;\n }\n while(fill !== false && visited.indexOf(fill) === -1){\n if (!isNumberFinite(fill)) {\n return fill;\n }\n target = sources[fill];\n if (!target) {\n return false;\n }\n if (target.visible) {\n return fill;\n }\n visited.push(fill);\n fill = target.fill;\n }\n return false;\n}\n function _decodeFill(line, index, count) {\n const fill = parseFillOption(line);\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n let target = parseFloat(fill);\n if (isNumberFinite(target) && Math.floor(target) === target) {\n return decodeTargetIndex(fill[0], index, target, count);\n }\n return [\n 'origin',\n 'start',\n 'end',\n 'stack',\n 'shape'\n ].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n if (firstCh === '-' || firstCh === '+') {\n target = index + target;\n }\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n return target;\n}\n function _getTargetPixel(fill, scale) {\n let pixel = null;\n if (fill === 'start') {\n pixel = scale.bottom;\n } else if (fill === 'end') {\n pixel = scale.top;\n } else if (isObject(fill)) {\n pixel = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n pixel = scale.getBasePixel();\n }\n return pixel;\n}\n function _getTargetValue(fill, scale, startValue) {\n let value;\n if (fill === 'start') {\n value = startValue;\n } else if (fill === 'end') {\n value = scale.options.reverse ? scale.min : scale.max;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n return value;\n}\n function parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n if (fill === false || fill === null) {\n return false;\n }\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\n\nfunction _buildStackLine(source) {\n const { scale , index , line } = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(_createBoundaryLine({\n x: null,\n y: scale.bottom\n }, line));\n for(let i = 0; i < segments.length; i++){\n const segment = segments[i];\n for(let j = segment.start; j <= segment.end; j++){\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({\n points,\n options: {}\n });\n}\n function getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n for(let i = 0; i < metas.length; i++){\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\n function addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for(let j = 0; j < linesBelow.length; j++){\n const line = linesBelow[j];\n const { first , last , point } = findPoint(line, sourcePoint, 'x');\n if (!point || first && last) {\n continue;\n }\n if (first) {\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n break;\n }\n }\n }\n points.push(...postponed);\n}\n function findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for(let i = 0; i < segments.length; i++){\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {\n first,\n last,\n point\n };\n}\n\nclass simpleArc {\n constructor(opts){\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n pathSegment(ctx, bounds, opts) {\n const { x , y , radius } = this;\n bounds = bounds || {\n start: 0,\n end: TAU\n };\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n interpolate(point) {\n const { x , y , radius } = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\n\nfunction _getTarget(source) {\n const { chart , fill , line } = source;\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n if (fill === 'stack') {\n return _buildStackLine(source);\n }\n if (fill === 'shape') {\n return true;\n }\n const boundary = computeBoundary(source);\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n return _createBoundaryLine(boundary, line);\n}\n function getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n const { scale ={} , fill } = source;\n const pixel = _getTargetPixel(fill, scale);\n if (isNumberFinite(pixel)) {\n const horizontal = scale.isHorizontal();\n return {\n x: horizontal ? pixel : null,\n y: horizontal ? null : pixel\n };\n }\n return null;\n}\nfunction computeCircularBoundary(source) {\n const { scale , fill } = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const start = options.reverse ? scale.max : scale.min;\n const value = _getTargetValue(fill, scale, start);\n const target = [];\n if (options.grid.circular) {\n const center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n for(let i = 0; i < length; ++i){\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n const target = _getTarget(source);\n const { line , scale , axis } = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const { above =color , below =color } = fillOption || {};\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {\n line,\n target,\n above,\n below,\n area,\n scale,\n axis\n });\n unclipArea(ctx);\n }\n}\nfunction doFill(ctx, cfg) {\n const { line , target , above , below , area , scale } = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n ctx.save();\n if (property === 'x' && below !== above) {\n clipVertical(ctx, target, area.top);\n fill(ctx, {\n line,\n target,\n color: above,\n scale,\n property\n });\n ctx.restore();\n ctx.save();\n clipVertical(ctx, target, area.bottom);\n }\n fill(ctx, {\n line,\n target,\n color: below,\n scale,\n property\n });\n ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n const { segments , points } = target;\n let first = true;\n let lineLoop = false;\n ctx.beginPath();\n for (const segment of segments){\n const { start , end } = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {\n move: lineLoop\n });\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\nfunction fill(ctx, cfg) {\n const { line , target , property , color , scale } = cfg;\n const segments = _segments(line, target, property);\n for (const { source: src , target: tgt , start , end } of segments){\n const { style: { backgroundColor =color } = {} } = src;\n const notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n ctx.beginPath();\n const lineLoop = !!line.pathSegment(ctx, src);\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n const targetLoop = !!target.pathSegment(ctx, tgt, {\n move: lineLoop,\n reverse: true\n });\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n}\nfunction clipBounds(ctx, scale, bounds) {\n const { top , bottom } = scale.chart.chartArea;\n const { property , start , end } = bounds || {};\n if (property === 'x') {\n ctx.beginPath();\n ctx.rect(start, top, end - start, bottom - top);\n ctx.clip();\n }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\n\nvar index = {\n id: 'filler',\n afterDatasetsUpdate (chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n for(i = 0; i < count; ++i){\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: _decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line\n };\n }\n meta.$filler = source;\n sources.push(source);\n }\n for(i = 0; i < count; ++i){\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n source.fill = _resolveTarget(sources, i, options.propagate);\n }\n },\n beforeDraw (chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for(let i = metasets.length - 1; i >= 0; --i){\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n source.line.updateControlPoints(area, source.axis);\n if (draw && source.fill) {\n _drawfill(chart.ctx, source, area);\n }\n }\n },\n beforeDatasetsDraw (chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n const metasets = chart.getSortedVisibleDatasetMetas();\n for(let i = metasets.length - 1; i >= 0; --i){\n const source = metasets[i].$filler;\n if (_shouldApplyFill(source)) {\n _drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw (chart, args, options) {\n const source = args.meta.$filler;\n if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n _drawfill(chart.ctx, source, chart.chartArea);\n },\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n\nconst getBoxSize = (labelOpts, fontSize)=>{\n let { boxHeight =fontSize , boxWidth =fontSize } = labelOpts;\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n }\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\nconst itemsEqual = (a, b)=>a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n constructor(config){\n super();\n this._added = false;\n this.legendHitBoxes = [];\n this._hoveredItem = null;\n this.doughnutMode = false;\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = callback(labelOpts.generateLabels, [\n this.chart\n ], this) || [];\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item)=>labelOpts.filter(item, this.chart.data));\n }\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b)=>labelOpts.sort(a, b, this.chart.data));\n }\n if (this.options.reverse) {\n legendItems.reverse();\n }\n this.legendItems = legendItems;\n }\n fit() {\n const { options , ctx } = this;\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const { boxWidth , itemHeight } = getBoxSize(labelOpts, fontSize);\n let width, height;\n ctx.font = labelFont.string;\n if (this.isHorizontal()) {\n width = this.maxWidth;\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight;\n width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n }\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const { ctx , maxWidth , options: { labels: { padding } } } = this;\n const hitboxes = this.legendHitBoxes = [];\n const lineWidths = this.lineWidths = [\n 0\n ];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i)=>{\n const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n hitboxes[i] = {\n left: 0,\n top,\n row,\n width: itemWidth,\n height: itemHeight\n };\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\n }\n _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n const { ctx , maxHeight , options: { labels: { padding } } } = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n let left = 0;\n let col = 0;\n this.legendItems.forEach((legendItem, i)=>{\n const { itemWidth , itemHeight } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n hitboxes[i] = {\n left,\n top: currentColHeight,\n col,\n width: itemWidth,\n height: itemHeight\n };\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n totalWidth += currentColWidth;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n return totalWidth;\n }\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const { legendHitBoxes: hitboxes , options: { align , labels: { padding } , rtl } } = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes){\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox of hitboxes){\n if (hitbox.col !== col) {\n col = hitbox.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n hitbox.top = top;\n hitbox.left += this.left + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n top += hitbox.height + padding;\n }\n }\n }\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n this._draw();\n unclipArea(ctx);\n }\n }\n _draw() {\n const { options: opts , columnSizes , lineWidths , ctx } = this;\n const { align , labels: labelOpts } = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const { padding } = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n this.drawTitle();\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n const { boxWidth , boxHeight , itemHeight } = getBoxSize(labelOpts, fontSize);\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n ctx.save();\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n if (labelOpts.usePointStyle) {\n const drawOptions = {\n radius: boxHeight * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n } else {\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n ctx.beginPath();\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n ctx.restore();\n };\n const fillText = function(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n overrideTextDirection(this.ctx, opts.textDirection);\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i)=>{\n ctx.strokeStyle = legendItem.fontColor;\n ctx.fillStyle = legendItem.fontColor;\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n rtlHelper.setWidth(this.width);\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n const realX = rtlHelper.x(x);\n drawLegendBox(realX, y, legendItem);\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n fillText(rtlHelper.x(x), y, legendItem);\n if (isHorizontal) {\n cursor.x += width + padding;\n } else if (typeof legendItem.text !== 'string') {\n const fontLineHeight = labelFont.lineHeight;\n cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n if (!titleOpts.display) {\n return;\n }\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n let left = this.left;\n let maxWidth = this.width;\n if (this.isHorizontal()) {\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n const maxHeight = this.columnSizes.reduce((acc, size)=>Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n const x = _alignStartEnd(position, left, left + maxWidth);\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {\n lh = this.legendHitBoxes;\n for(i = 0; i < lh.length; ++i){\n hitBox = lh[i];\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n return this.legendItems[i];\n }\n }\n }\n return null;\n }\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n callback(opts.onLeave, [\n e,\n previous,\n this\n ], this);\n }\n this._hoveredItem = hoveredItem;\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [\n e,\n hoveredItem,\n this\n ], this);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [\n e,\n hoveredItem,\n this\n ], this);\n }\n }\n}\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n return {\n itemWidth,\n itemHeight\n };\n}\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n let legendItemText = legendItem.text;\n if (legendItemText && typeof legendItemText !== 'string') {\n legendItemText = legendItemText.reduce((a, b)=>a.length > b.length ? a : b);\n }\n return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width;\n}\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n let itemHeight = _itemHeight;\n if (typeof legendItem.text !== 'string') {\n itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n }\n return itemHeight;\n}\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n const labelHeight = legendItem.text ? legendItem.text.length : 0;\n return fontLineHeight * labelHeight;\n}\nfunction isListened(type, opts) {\n if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start (chart, _args, options) {\n const legend = chart.legend = new Legend({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n stop (chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n beforeUpdate (chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n afterUpdate (chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n afterEvent (chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n onClick (e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n onHover: null,\n onLeave: null,\n labels: {\n color: (ctx)=>ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n generateLabels (chart) {\n const datasets = chart.data.datasets;\n const { labels: { usePointStyle , pointStyle , textAlign , color , useBorderRadius , borderRadius } } = chart.legend.options;\n return chart._getSortedDatasetMetas().map((meta)=>{\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n title: {\n color: (ctx)=>ctx.chart.options.color,\n display: false,\n position: 'center',\n text: ''\n }\n },\n descriptors: {\n _scriptable: (name)=>!name.startsWith('on'),\n labels: {\n _scriptable: (name)=>![\n 'generateLabels',\n 'filter',\n 'sort'\n ].includes(name)\n }\n }\n};\n\nclass Title extends Element {\n constructor(config){\n super();\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this._padding = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight) {\n const opts = this.options;\n this.left = 0;\n this.top = 0;\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\n const lineCount = isArray(opts.text) ? opts.text.length : 1;\n this._padding = toPadding(opts.padding);\n const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.width = textSize;\n }\n }\n isHorizontal() {\n const pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n _drawArgs(offset) {\n const { top , left , bottom , right , options } = this;\n const align = options.align;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n if (this.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n if (options.position === 'left') {\n titleX = left + offset;\n titleY = _alignStartEnd(align, bottom, top);\n rotation = PI * -0.5;\n } else {\n titleX = right - offset;\n titleY = _alignStartEnd(align, top, bottom);\n rotation = PI * 0.5;\n }\n maxWidth = bottom - top;\n }\n return {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n }\n draw() {\n const ctx = this.ctx;\n const opts = this.options;\n if (!opts.display) {\n return;\n }\n const fontOpts = toFont(opts.font);\n const lineHeight = fontOpts.lineHeight;\n const offset = lineHeight / 2 + this._padding.top;\n const { titleX , titleY , maxWidth , rotation } = this._drawArgs(offset);\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth,\n rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [\n titleX,\n titleY\n ]\n });\n }\n}\nfunction createTitle(chart, titleOpts) {\n const title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart\n });\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\nvar plugin_title = {\n id: 'title',\n _element: Title,\n start (chart, _args, options) {\n createTitle(chart, options);\n },\n stop (chart) {\n const titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n beforeUpdate (chart, _args, options) {\n const title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'bold'\n },\n fullSize: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n id: 'subtitle',\n start (chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n stop (chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n beforeUpdate (chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal'\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\n\nconst positioners = {\n average (items) {\n if (!items.length) {\n return false;\n }\n let i, len;\n let xSet = new Set();\n let y = 0;\n let count = 0;\n for(i = 0, len = items.length; i < len; ++i){\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n xSet.add(pos.x);\n y += pos.y;\n ++count;\n }\n }\n if (count === 0 || xSet.size === 0) {\n return false;\n }\n const xAverage = [\n ...xSet\n ].reduce((a, b)=>a + b) / xSet.size;\n return {\n x: xAverage,\n y: y / count\n };\n },\n nearest (items, eventPosition) {\n if (!items.length) {\n return false;\n }\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n for(i = 0, len = items.length; i < len; ++i){\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n return {\n x,\n y\n };\n }\n};\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n return base;\n}\n function splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\n function createTooltipItem(chart, item) {\n const { element , datasetIndex , index } = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const { label , value } = controller.getLabelAndValue(index);\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\n function getTooltipSize(tooltip, options) {\n const ctx = tooltip.chart.ctx;\n const { body , footer , title } = tooltip;\n const { boxWidth , boxHeight } = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n let combinedBodyLength = body.reduce((count, bodyItem)=>count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;\n }\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n ctx.save();\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0;\n each(body, (bodyItem)=>{\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n widthPadding = 0;\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n ctx.restore();\n width += padding.width;\n return {\n width,\n height\n };\n}\nfunction determineYAlign(chart, size) {\n const { y , height } = size;\n if (y < height / 2) {\n return 'top';\n } else if (y > chart.height - height / 2) {\n return 'bottom';\n }\n return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const { x , width } = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n const { x , width } = size;\n const { width: chartWidth , chartArea: { left , right } } = chart;\n let xAlign = 'center';\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n return xAlign;\n}\n function determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\nfunction alignX(size, xAlign) {\n let { x , width } = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= width / 2;\n }\n return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n let { y , height } = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= height / 2;\n }\n return y;\n}\n function getBackgroundPoint(options, size, alignment, chart) {\n const { caretSize , caretPadding , cornerRadius } = options;\n const { xAlign , yAlign } = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(cornerRadius);\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\n }\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n return align === 'center' ? tooltip.x + tooltip.width / 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;\n}\n function getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\nconst defaultCallbacks = {\n beforeTitle: noop,\n title (tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n return '';\n },\n afterTitle: noop,\n beforeBody: noop,\n beforeLabel: noop,\n label (tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n let label = tooltipItem.dataset.label || '';\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor (tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0\n };\n },\n labelTextColor () {\n return this.options.bodyColor;\n },\n labelPointStyle (tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation\n };\n },\n afterLabel: noop,\n afterBody: noop,\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n};\n function invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n const result = callbacks[name].call(ctx, arg);\n if (typeof result === 'undefined') {\n return defaultCallbacks[name].call(ctx, arg);\n }\n return result;\n}\nclass Tooltip extends Element {\n static positioners = positioners;\n constructor(config){\n super();\n this.opacity = 0;\n this._active = [];\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.chart = config.chart;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n if (cached) {\n return cached;\n }\n const chart = this.chart;\n const options = this.options.setContext(this.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(this.chart, opts);\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n return animations;\n }\n getContext() {\n return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n getTitle(context, options) {\n const { callbacks } = options;\n const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n return lines;\n }\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems));\n }\n getBody(tooltipItems, options) {\n const { callbacks } = options;\n const bodyItems = [];\n each(tooltipItems, (context)=>{\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n bodyItems.push(bodyItem);\n });\n return bodyItems;\n }\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems));\n }\n getFooter(tooltipItems, options) {\n const { callbacks } = options;\n const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n return lines;\n }\n _createItems(options) {\n const active = this._active;\n const data = this.chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n for(i = 0, len = active.length; i < len; ++i){\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array)=>options.filter(element, index, array, data));\n }\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b)=>options.itemSort(a, b, data));\n }\n each(tooltipItems, (context)=>{\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n });\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n update(changed, replay) {\n const options = this.options.setContext(this.getContext());\n const active = this._active;\n let properties;\n let tooltipItems = [];\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(this.chart, options, positionAndSize);\n const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n if (changed && options.external) {\n options.external.call(this, {\n chart: this.chart,\n tooltip: this,\n replay\n });\n }\n }\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n getCaretPosition(tooltipPoint, size, options) {\n const { xAlign , yAlign } = this;\n const { caretSize , cornerRadius } = options;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(cornerRadius);\n const { x: ptX , y: ptY } = tooltipPoint;\n const { width , height } = size;\n let x1, x2, x3, y1, y2, y3;\n if (yAlign === 'center') {\n y2 = ptY + height / 2;\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n } else {\n x2 = this.caretX;\n }\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {\n x1,\n x2,\n x3,\n y1,\n y2,\n y3\n };\n }\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.titleAlign, options);\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n for(i = 0; i < length; ++i){\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing;\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing;\n }\n }\n }\n }\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const labelColor = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const { boxHeight , boxWidth } = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(this, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2,\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n ctx.strokeStyle = labelColor.borderColor;\n ctx.fillStyle = labelColor.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : labelColor.borderWidth || 1;\n ctx.strokeStyle = labelColor.borderColor;\n ctx.setLineDash(labelColor.borderDash || []);\n ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n const borderRadius = toTRBLCorners(labelColor.borderRadius);\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n ctx.fill();\n ctx.stroke();\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n ctx.fillStyle = this.labelTextColors[i];\n }\n drawBody(pt, ctx, options) {\n const { body } = this;\n const { bodySpacing , bodyAlign , displayColors , boxHeight , boxWidth , boxPadding } = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n const fillLineOfText = function(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;\n for(i = 0, ilen = body.length; i < ilen; ++i){\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n lines = bodyItem.lines;\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n for(j = 0, jlen = lines.length; j < jlen; ++j){\n fillLineOfText(lines[j]);\n bodyLineHeight = bodyFont.lineHeight;\n }\n each(bodyItem.after, fillLineOfText);\n }\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n footerFont = toFont(options.footerFont);\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n for(i = 0; i < length; ++i){\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n drawBackground(pt, ctx, tooltipSize, options) {\n const { xAlign , yAlign } = this;\n const { x , y } = pt;\n const { width , height } = tooltipSize;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(options.cornerRadius);\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n _updateAnimationTarget(options) {\n const chart = this.chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n this._resolveAnimations().update(this, point);\n }\n }\n }\n _willRender() {\n return !!this.opacity;\n }\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n if (!opacity) {\n return;\n }\n this._updateAnimationTarget(options);\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n const padding = toPadding(options.padding);\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n this.drawBackground(pt, ctx, tooltipSize, options);\n overrideTextDirection(ctx, options.textDirection);\n pt.y += padding.top;\n this.drawTitle(pt, ctx, options);\n this.drawBody(pt, ctx, options);\n this.drawFooter(pt, ctx, options);\n restoreTextDirection(ctx, options.textDirection);\n ctx.restore();\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({ datasetIndex , index })=>{\n const meta = this.chart.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n const positionChanged = this._positionChanged(active, e);\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n if (changed) {\n this._active = active;\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n this.update(true, replay);\n }\n }\n return changed;\n }\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive.filter((i)=>this.chart.data.datasets[i.datasetIndex] && this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined);\n }\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n if (options.reverse) {\n active.reverse();\n }\n return active;\n }\n _positionChanged(active, e) {\n const { caretX , caretY , options } = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n}\nvar plugin_tooltip = {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n afterInit (chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({\n chart,\n options\n });\n }\n },\n beforeUpdate (chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n reset (chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n afterDraw (chart) {\n const tooltip = chart.tooltip;\n if (tooltip && tooltip._willRender()) {\n const args = {\n tooltip\n };\n if (chart.notifyPlugins('beforeTooltipDraw', {\n ...args,\n cancelable: true\n }) === false) {\n return;\n }\n tooltip.draw(chart.ctx);\n chart.notifyPlugins('afterTooltipDraw', args);\n }\n },\n afterEvent (chart, args) {\n if (chart.tooltip) {\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n args.changed = true;\n }\n }\n },\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold'\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {},\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold'\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: (ctx, opts)=>opts.bodyFont.size,\n boxWidth: (ctx, opts)=>opts.bodyFont.size,\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart'\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'width',\n 'height',\n 'caretX',\n 'caretY'\n ]\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: defaultCallbacks\n },\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n descriptors: {\n _scriptable: (name)=>name !== 'filter' && name !== 'itemSort' && name !== 'external',\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n additionalOptionScopes: [\n 'interaction'\n ]\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nColors: plugin_colors,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels)=>{\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({\n index,\n label: raw\n });\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\nconst validIndex = (index, max)=>index === null ? null : _limitValue(Math.round(index), 0, max);\nfunction _getLabelForValue(value) {\n const labels = this.getLabels();\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n}\nclass CategoryScale extends Scale {\n static id = 'category';\n static defaults = {\n ticks: {\n callback: _getLabelForValue\n }\n };\n constructor(cfg){\n super(cfg);\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\n }\n init(scaleOptions) {\n const added = this._addedLabels;\n if (added.length) {\n const labels = this.getLabels();\n for (const { index , label } of added){\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n this._addedLabels = [];\n }\n super.init(scaleOptions);\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n determineDataLimits() {\n const { minDefined , maxDefined } = this.getUserBounds();\n let { min , max } = this.getMinMax(true);\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const min = this.min;\n const max = this.max;\n const offset = this.options.offset;\n const ticks = [];\n let labels = this.getLabels();\n labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n for(let value = min; value <= max; value++){\n ticks.push({\n value\n });\n }\n return ticks;\n }\n getLabelForValue(value) {\n return _getLabelForValue.call(this, value);\n }\n configure() {\n super.configure();\n if (!this.isHorizontal()) {\n this._reversePixels = !this._reversePixels;\n }\n }\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n getBasePixel() {\n return this.bottom;\n }\n}\n\nfunction generateTicks$1(generationOptions, dataRange) {\n const ticks = [];\n const MIN_SPACING = 1e-14;\n const { bounds , step , min , max , precision , count , maxTicks , maxDigits , includeBounds } = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const { min: rmin , max: rmax } = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [\n {\n value: rmin\n },\n {\n value: rmax\n }\n ];\n }\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n if (!isNullOrUndef(precision)) {\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n numSpaces = (niceMax - niceMin) / spacing;\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n const decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin));\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({\n value: min\n });\n if (niceMin < min) {\n j++;\n }\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n for(; j < numSpaces; ++j){\n const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n if (maxDefined && tickValue > max) {\n break;\n }\n ticks.push({\n value: tickValue\n });\n }\n if (maxDefined && includeBounds && niceMax !== max) {\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({\n value: max\n });\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({\n value: niceMax\n });\n }\n return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, { horizontal , minRotation }) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n constructor(cfg){\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._endValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n return +raw;\n }\n handleTickRangeOptions() {\n const { beginAtZero } = this.options;\n const { minDefined , maxDefined } = this.getUserBounds();\n let { min , max } = this;\n const setMin = (v)=>min = minDefined ? min : v;\n const setMax = (v)=>max = maxDefined ? max : v;\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n if (min === max) {\n let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n setMax(max + offset);\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n getTickLimit() {\n const tickOpts = this.options.ticks;\n let { maxTicksLimit , stepSize } = tickOpts;\n let maxTicks;\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n if (maxTicks > 1000) {\n console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n return maxTicks;\n }\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n const numericGeneratorOptions = {\n maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n const dataRange = this._range || this;\n const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n super.configure();\n if (this.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\n\nclass LinearScale extends LinearScaleBase {\n static id = 'linear';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n };\n determineDataLimits() {\n const { min , max } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? min : 0;\n this.max = isNumberFinite(max) ? max : 1;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n const horizontal = this.isHorizontal();\n const length = horizontal ? this.width : this.height;\n const minRotation = toRadians(this.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = this._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\n\nconst log10Floor = (v)=>Math.floor(log10(v));\nconst changeExponent = (v, m)=>Math.pow(10, log10Floor(v) + m);\nfunction isMajor(tickVal) {\n const remain = tickVal / Math.pow(10, log10Floor(tickVal));\n return remain === 1;\n}\nfunction steps(min, max, rangeExp) {\n const rangeStep = Math.pow(10, rangeExp);\n const start = Math.floor(min / rangeStep);\n const end = Math.ceil(max / rangeStep);\n return end - start;\n}\nfunction startExp(min, max) {\n const range = max - min;\n let rangeExp = log10Floor(range);\n while(steps(min, max, rangeExp) > 10){\n rangeExp++;\n }\n while(steps(min, max, rangeExp) < 10){\n rangeExp--;\n }\n return Math.min(rangeExp, log10Floor(min));\n}\n function generateTicks(generationOptions, { min , max }) {\n min = finiteOrDefault(generationOptions.min, min);\n const ticks = [];\n const minExp = log10Floor(min);\n let exp = startExp(min, max);\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n const stepSize = Math.pow(10, exp);\n const base = minExp > exp ? Math.pow(10, minExp) : 0;\n const start = Math.round((min - base) * precision) / precision;\n const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n let significand = Math.floor((start - offset) / Math.pow(10, exp));\n let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n while(value < max){\n ticks.push({\n value,\n major: isMajor(value),\n significand\n });\n if (significand >= 10) {\n significand = significand < 15 ? 15 : 20;\n } else {\n significand++;\n }\n if (significand >= 20) {\n exp++;\n significand = 2;\n precision = exp >= 0 ? 1 : precision;\n }\n value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n }\n const lastTick = finiteOrDefault(generationOptions.max, value);\n ticks.push({\n value: lastTick,\n major: isMajor(lastTick),\n significand\n });\n return ticks;\n}\nclass LogarithmicScale extends Scale {\n static id = 'logarithmic';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n };\n constructor(cfg){\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [\n raw,\n index\n ]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isNumberFinite(value) && value > 0 ? value : null;\n }\n determineDataLimits() {\n const { min , max } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n if (this._zero && this.min !== this._suggestedMin && !isNumberFinite(this._userMin)) {\n this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n }\n this.handleTickRangeOptions();\n }\n handleTickRangeOptions() {\n const { minDefined , maxDefined } = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n const setMin = (v)=>min = minDefined ? min : v;\n const setMax = (v)=>max = maxDefined ? max : v;\n if (min === max) {\n if (min <= 0) {\n setMin(1);\n setMax(10);\n } else {\n setMin(changeExponent(min, -1));\n setMax(changeExponent(max, +1));\n }\n }\n if (min <= 0) {\n setMin(changeExponent(max, -1));\n }\n if (max <= 0) {\n setMax(changeExponent(min, +1));\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const opts = this.options;\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n getLabelForValue(value) {\n return value === undefined ? '0' : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n configure() {\n const start = this.min;\n super.configure();\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\n\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [\n label\n ];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - size / 2,\n end: pos + size / 2\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n return {\n start: pos,\n end: pos + size\n };\n}\n function fitWithPointLabels(scale) {\n const orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n const limits = Object.assign({}, orig);\n const labelSizes = [];\n const padding = [];\n const valueCount = scale._pointLabels.length;\n const pointLabelOpts = scale.options.pointLabels;\n const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n for(let i = 0; i < valueCount; i++){\n const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n const angle = Math.round(toDegrees(angleRadians));\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n const sin = Math.abs(Math.sin(angle));\n const cos = Math.abs(Math.cos(angle));\n let x = 0;\n let y = 0;\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\nfunction createPointLabelItem(scale, index, itemOpts) {\n const outerDistance = scale.drawingArea;\n const { extra , additionalAngle , padding , size } = itemOpts;\n const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n return {\n visible: true,\n x: pointLabelPosition.x,\n y,\n textAlign,\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n };\n}\nfunction isNotOverlapped(item, area) {\n if (!area) {\n return true;\n }\n const { left , top , right , bottom } = item;\n const apexesInArea = _isPointInArea({\n x: left,\n y: top\n }, area) || _isPointInArea({\n x: left,\n y: bottom\n }, area) || _isPointInArea({\n x: right,\n y: top\n }, area) || _isPointInArea({\n x: right,\n y: bottom\n }, area);\n return !apexesInArea;\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale._pointLabels.length;\n const opts = scale.options;\n const { centerPointLabels , display } = opts.pointLabels;\n const itemOpts = {\n extra: getTickBackdropHeight(opts) / 2,\n additionalAngle: centerPointLabels ? PI / valueCount : 0\n };\n let area;\n for(let i = 0; i < valueCount; i++){\n itemOpts.padding = padding[i];\n itemOpts.size = labelSizes[i];\n const item = createPointLabelItem(scale, i, itemOpts);\n items.push(item);\n if (display === 'auto') {\n item.visible = isNotOverlapped(item, area);\n if (item.visible) {\n area = item;\n }\n }\n }\n return items;\n}\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= w / 2;\n }\n return x;\n}\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= h / 2;\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n return y;\n}\nfunction drawPointLabelBox(ctx, opts, item) {\n const { left , top , right , bottom } = item;\n const { backdropColor } = opts;\n if (!isNullOrUndef(backdropColor)) {\n const borderRadius = toTRBLCorners(opts.borderRadius);\n const padding = toPadding(opts.backdropPadding);\n ctx.fillStyle = backdropColor;\n const backdropLeft = left - padding.left;\n const backdropTop = top - padding.top;\n const backdropWidth = right - left + padding.width;\n const backdropHeight = bottom - top + padding.height;\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: backdropLeft,\n y: backdropTop,\n w: backdropWidth,\n h: backdropHeight,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n }\n }\n}\nfunction drawPointLabels(scale, labelCount) {\n const { ctx , options: { pointLabels } } = scale;\n for(let i = labelCount - 1; i >= 0; i--){\n const item = scale._pointLabelItems[i];\n if (!item.visible) {\n continue;\n }\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n drawPointLabelBox(ctx, optsAtIndex, item);\n const plFont = toFont(optsAtIndex.font);\n const { x , y , textAlign } = item;\n renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n });\n }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const { ctx } = scale;\n if (circular) {\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n for(let i = 1; i < labelCount; i++){\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n const { color , lineWidth } = gridLineOpts;\n if (!circular && !labelCount || !color || !lineWidth || radius < 0) {\n return;\n }\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(borderOpts.dash);\n ctx.lineDashOffset = borderOpts.dashOffset;\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\nclass RadialLinearScale extends LinearScaleBase {\n static id = 'radialLinear';\n static defaults = {\n display: true,\n animate: true,\n position: 'chartArea',\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n grid: {\n circular: false\n },\n startAngle: 0,\n ticks: {\n showLabelBackdrop: true,\n callback: Ticks.formatters.numeric\n },\n pointLabels: {\n backdropColor: undefined,\n backdropPadding: 2,\n display: true,\n font: {\n size: 10\n },\n callback (label) {\n return label;\n },\n padding: 5,\n centerPointLabels: false\n }\n };\n static defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n };\n static descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n };\n constructor(cfg){\n super(cfg);\n this.xCenter = undefined;\n this.yCenter = undefined;\n this.drawingArea = undefined;\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n setDimensions() {\n const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n const w = this.width = this.maxWidth - padding.width;\n const h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n determineDataLimits() {\n const { min , max } = this.getMinMax(false);\n this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n this._pointLabels = this.getLabels().map((value, index)=>{\n const label = callback(this.options.pointLabels.callback, [\n value,\n index\n ], this);\n return label || label === 0 ? label : '';\n }).filter((v, i)=>this.chart.getDataVisibility(i));\n }\n fit() {\n const opts = this.options;\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle\n };\n }\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n getPointLabelPosition(index) {\n const { left , top , right , bottom } = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom\n };\n }\n drawBackground() {\n const { backgroundColor , grid: { circular } } = this.options;\n if (backgroundColor) {\n const ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const { angleLines , grid , border } = opts;\n const labelCount = this._pointLabels.length;\n let i, offset, position;\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n if (grid.display) {\n this.ticks.forEach((tick, index)=>{\n if (index !== 0 || index === 0 && this.min < 0) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const context = this.getContext(index);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n }\n });\n }\n if (angleLines.display) {\n ctx.save();\n for(i = labelCount - 1; i >= 0; i--){\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const { color , lineWidth } = optsAtIndex;\n if (!lineWidth || !color) {\n continue;\n }\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n ctx.restore();\n }\n }\n drawBorder() {}\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n if (!tickOpts.display) {\n return;\n }\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n this.ticks.forEach((tick, index)=>{\n if (index === 0 && this.min >= 0 && !opts.reverse) {\n return;\n }\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);\n }\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color,\n strokeColor: optsAtIndex.textStrokeColor,\n strokeWidth: optsAtIndex.textStrokeWidth\n });\n });\n ctx.restore();\n }\n drawTitle() {}\n}\n\nconst INTERVALS = {\n millisecond: {\n common: true,\n size: 1,\n steps: 1000\n },\n second: {\n common: true,\n size: 1000,\n steps: 60\n },\n minute: {\n common: true,\n size: 60000,\n steps: 60\n },\n hour: {\n common: true,\n size: 3600000,\n steps: 24\n },\n day: {\n common: true,\n size: 86400000,\n steps: 30\n },\n week: {\n common: false,\n size: 604800000,\n steps: 4\n },\n month: {\n common: true,\n size: 2.628e9,\n steps: 12\n },\n quarter: {\n common: false,\n size: 7.884e9,\n steps: 4\n },\n year: {\n common: true,\n size: 3.154e10\n }\n};\n const UNITS = /* #__PURE__ */ Object.keys(INTERVALS);\n function sorter(a, b) {\n return a - b;\n}\n function parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n const adapter = scale._adapter;\n const { parser , round , isoWeekday } = scale._parseOpts;\n let value = input;\n if (typeof parser === 'function') {\n value = parser(value);\n }\n if (!isNumberFinite(value)) {\n value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);\n }\n if (value === null) {\n return null;\n }\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);\n }\n return +value;\n}\n function determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n for(let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i){\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n return UNITS[ilen - 1];\n}\n function determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for(let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--){\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n function determineMajorUnit(unit) {\n for(let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i){\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\n function addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const { lo , hi } = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\n function setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n for(major = first; major <= last; major = +adapter.add(major, 1, majorUnit)){\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\n function ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n const map = {};\n const ilen = values.length;\n let i, value;\n for(i = 0; i < ilen; ++i){\n value = values[i];\n map[value] = i;\n ticks.push({\n value,\n major: false\n });\n }\n return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n static id = 'time';\n static defaults = {\n bounds: 'data',\n adapters: {},\n time: {\n parser: false,\n unit: false,\n round: false,\n isoWeekday: false,\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n source: 'auto',\n callback: false,\n major: {\n enabled: false\n }\n }\n };\n constructor(props){\n super(props);\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n this._unit = 'day';\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n init(scaleOpts, opts = {}) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n adapter.init(opts);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n super.init(scaleOpts);\n this._normalized = opts.normalized;\n }\n parse(raw, index) {\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n let { min , max , minDefined , maxDefined } = this.getUserBounds();\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n if (!minDefined || !maxDefined) {\n _applyBounds(this._getLabelBounds());\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {\n min,\n max\n };\n }\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n const min = this.min;\n const max = this.max;\n const ticks = _filterBetween(timestamps, min, max);\n this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n if (options.reverse) {\n ticks.reverse();\n }\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n afterAutoSkip() {\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map((tick)=>+tick.value));\n }\n }\n initOffsets(timestamps = []) {\n let start = 0;\n let end = 0;\n let first, last;\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n this._offsets = {\n start,\n end,\n factor: 1 / (start + 1 + end)\n };\n }\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for(time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++){\n addTick(ticks, time, timestamps);\n }\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n return Object.keys(ticks).sort(sorter).map((x)=>+x);\n }\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n format(value, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const fmt = format || formats[unit];\n return this._adapter.format(value, fmt);\n }\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formatter = options.ticks.callback;\n if (formatter) {\n return callback(formatter, [\n time,\n index,\n ticks\n ], this);\n }\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n }\n generateTickLabels(ticks) {\n let i, ilen, tick;\n for(i = 0, ilen = ticks.length; i < ilen; ++i){\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n return {\n w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,\n h: tickLabelWidth * sinRotation + tickFontSize * cosRotation\n };\n }\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [\n exampleTime\n ], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const metas = this.getMatchingVisibleMetas();\n if (this._normalized && metas.length) {\n return this._cache.data = metas[0].controller.getAllParsedValues(this);\n }\n for(i = 0, ilen = metas.length; i < ilen; ++i){\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n return this._cache.data = this.normalize(timestamps);\n }\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const labels = this.getLabels();\n for(i = 0, ilen = labels.length; i < ilen; ++i){\n timestamps.push(parse(this, labels[i]));\n }\n return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);\n }\n normalize(values) {\n return _arrayUnique(values.sort(sorter));\n }\n}\n\nfunction interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({ lo , hi } = _lookupByKey(table, 'pos', val));\n }\n ({ pos: prevSource , time: prevTarget } = table[lo]);\n ({ pos: nextSource , time: nextTarget } = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({ lo , hi } = _lookupByKey(table, 'time', val));\n }\n ({ time: prevSource , pos: prevTarget } = table[lo]);\n ({ time: nextSource , pos: nextTarget } = table[hi]);\n }\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n static id = 'timeseries';\n static defaults = TimeScale.defaults;\n constructor(props){\n super(props);\n this._table = [];\n this._minPos = undefined;\n this._tableRange = undefined;\n }\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n buildLookupTable(timestamps) {\n const { min , max } = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n for(i = 0, ilen = timestamps.length; i < ilen; ++i){\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n if (items.length < 2) {\n return [\n {\n time: min,\n pos: 0\n },\n {\n time: max,\n pos: 1\n }\n ];\n }\n for(i = 0, ilen = items.length; i < ilen; ++i){\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({\n time: curr,\n pos: i / (ilen - 1)\n });\n }\n }\n return table;\n }\n _generate() {\n const min = this.min;\n const max = this.max;\n let timestamps = super.getDataTimestamps();\n if (!timestamps.includes(min) || !timestamps.length) {\n timestamps.splice(0, 0, min);\n }\n if (!timestamps.includes(max) || timestamps.length === 1) {\n timestamps.push(max);\n }\n return timestamps.sort((a, b)=>a - b);\n }\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n if (timestamps.length) {\n return timestamps;\n }\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n return timestamps;\n }\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n controllers,\n elements,\n plugins,\n scales\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, plugin_colors as Colors, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, defaults, elements, layouts, plugins, registerables, registry, scales };\n//# sourceMappingURL=chart.js.map\n","import { Chart as Chart$1, BarController, DoughnutController, LineController, PieController, PolarAreaController, RadarController, BubbleController, ScatterController } from 'chart.js';\nimport { version, isProxy, toRaw, defineComponent, ref, shallowRef, onMounted, onUnmounted, watch, nextTick, h } from 'vue';\n\nconst CommonProps = {\n data: {\n type: Object,\n required: true\n },\n options: {\n type: Object,\n default: ()=>({})\n },\n plugins: {\n type: Array,\n default: ()=>[]\n },\n datasetIdKey: {\n type: String,\n default: \"label\"\n },\n updateMode: {\n type: String,\n default: undefined\n }\n};\nconst A11yProps = {\n ariaLabel: {\n type: String\n },\n ariaDescribedby: {\n type: String\n }\n};\nconst Props = {\n type: {\n type: String,\n required: true\n },\n destroyDelay: {\n type: Number,\n default: 0 // No delay by default\n },\n ...CommonProps,\n ...A11yProps\n};\n\nconst compatProps = version[0] === \"2\" ? (internals, props)=>Object.assign(internals, {\n attrs: props\n }) : (internals, props)=>Object.assign(internals, props);\nfunction toRawIfProxy(obj) {\n return isProxy(obj) ? toRaw(obj) : obj;\n}\nfunction cloneProxy(obj) {\n let src = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : obj;\n return isProxy(src) ? new Proxy(obj, {}) : obj;\n}\nfunction setOptions(chart, nextOptions) {\n const options = chart.options;\n if (options && nextOptions) {\n Object.assign(options, nextOptions);\n }\n}\nfunction setLabels(currentData, nextLabels) {\n currentData.labels = nextLabels;\n}\nfunction setDatasets(currentData, nextDatasets, datasetIdKey) {\n const addedDatasets = [];\n currentData.datasets = nextDatasets.map((nextDataset)=>{\n // given the new set, find it's current match\n const currentDataset = currentData.datasets.find((dataset)=>dataset[datasetIdKey] === nextDataset[datasetIdKey]);\n // There is no original to update, so simply add new one\n if (!currentDataset || !nextDataset.data || addedDatasets.includes(currentDataset)) {\n return {\n ...nextDataset\n };\n }\n addedDatasets.push(currentDataset);\n Object.assign(currentDataset, nextDataset);\n return currentDataset;\n });\n}\nfunction cloneData(data, datasetIdKey) {\n const nextData = {\n labels: [],\n datasets: []\n };\n setLabels(nextData, data.labels);\n setDatasets(nextData, data.datasets, datasetIdKey);\n return nextData;\n}\n/**\n * Get dataset from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */ function getDatasetAtEvent(chart, event) {\n return chart.getElementsAtEventForMode(event, \"dataset\", {\n intersect: true\n }, false);\n}\n/**\n * Get single dataset element from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */ function getElementAtEvent(chart, event) {\n return chart.getElementsAtEventForMode(event, \"nearest\", {\n intersect: true\n }, false);\n}\n/**\n * Get all dataset elements from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */ function getElementsAtEvent(chart, event) {\n return chart.getElementsAtEventForMode(event, \"index\", {\n intersect: true\n }, false);\n}\n\nconst Chart = defineComponent({\n props: Props,\n setup (props, param) {\n let { expose , slots } = param;\n const canvasRef = ref(null);\n const chartRef = shallowRef(null);\n expose({\n chart: chartRef\n });\n const renderChart = ()=>{\n if (!canvasRef.value) return;\n const { type , data , options , plugins , datasetIdKey } = props;\n const clonedData = cloneData(data, datasetIdKey);\n const proxiedData = cloneProxy(clonedData, data);\n chartRef.value = new Chart$1(canvasRef.value, {\n type,\n data: proxiedData,\n options: {\n ...options\n },\n plugins\n });\n };\n const destroyChart = ()=>{\n const chart = toRaw(chartRef.value);\n if (chart) {\n if (props.destroyDelay > 0) {\n setTimeout(()=>{\n chart.destroy();\n chartRef.value = null;\n }, props.destroyDelay);\n } else {\n chart.destroy();\n chartRef.value = null;\n }\n }\n };\n const update = (chart)=>{\n chart.update(props.updateMode);\n };\n onMounted(renderChart);\n onUnmounted(destroyChart);\n watch([\n ()=>props.options,\n ()=>props.data\n ], (param, param1)=>{\n let [nextOptionsProxy, nextDataProxy] = param, [prevOptionsProxy, prevDataProxy] = param1;\n const chart = toRaw(chartRef.value);\n if (!chart) {\n return;\n }\n let shouldUpdate = false;\n if (nextOptionsProxy) {\n const nextOptions = toRawIfProxy(nextOptionsProxy);\n const prevOptions = toRawIfProxy(prevOptionsProxy);\n if (nextOptions && nextOptions !== prevOptions) {\n setOptions(chart, nextOptions);\n shouldUpdate = true;\n }\n }\n if (nextDataProxy) {\n const nextLabels = toRawIfProxy(nextDataProxy.labels);\n const prevLabels = toRawIfProxy(prevDataProxy.labels);\n const nextDatasets = toRawIfProxy(nextDataProxy.datasets);\n const prevDatasets = toRawIfProxy(prevDataProxy.datasets);\n if (nextLabels !== prevLabels) {\n setLabels(chart.config.data, nextLabels);\n shouldUpdate = true;\n }\n if (nextDatasets && nextDatasets !== prevDatasets) {\n setDatasets(chart.config.data, nextDatasets, props.datasetIdKey);\n shouldUpdate = true;\n }\n }\n if (shouldUpdate) {\n nextTick(()=>{\n update(chart);\n });\n }\n }, {\n deep: true\n });\n return ()=>{\n return h(\"canvas\", {\n role: \"img\",\n ariaLabel: props.ariaLabel,\n ariaDescribedby: props.ariaDescribedby,\n ref: canvasRef\n }, [\n h(\"p\", {}, [\n slots.default ? slots.default() : \"\"\n ])\n ]);\n };\n }\n});\n\nfunction createTypedChart(type, registerables) {\n Chart$1.register(registerables);\n return defineComponent({\n props: CommonProps,\n setup (props, param) {\n let { expose } = param;\n const ref = shallowRef(null);\n const reforwardRef = (chartRef)=>{\n ref.value = chartRef?.chart;\n };\n expose({\n chart: ref\n });\n return ()=>{\n return h(Chart, compatProps({\n ref: reforwardRef\n }, {\n type,\n ...props\n }));\n };\n }\n });\n}\nconst Bar = /* #__PURE__ */ createTypedChart(\"bar\", BarController);\nconst Doughnut = /* #__PURE__ */ createTypedChart(\"doughnut\", DoughnutController);\nconst Line = /* #__PURE__ */ createTypedChart(\"line\", LineController);\nconst Pie = /* #__PURE__ */ createTypedChart(\"pie\", PieController);\nconst PolarArea = /* #__PURE__ */ createTypedChart(\"polarArea\", PolarAreaController);\nconst Radar = /* #__PURE__ */ createTypedChart(\"radar\", RadarController);\nconst Bubble = /* #__PURE__ */ createTypedChart(\"bubble\", BubbleController);\nconst Scatter = /* #__PURE__ */ createTypedChart(\"scatter\", ScatterController);\n\nexport { Bar, Bubble, Chart, Doughnut, Line, Pie, PolarArea, Radar, Scatter, createTypedChart, getDatasetAtEvent, getElementAtEvent, getElementsAtEvent };\n//# sourceMappingURL=index.js.map\n","<script setup lang=\"ts\">\nimport { getApiMAnalytics, useApim } from '@/api/apiM';\nimport { ref } from 'vue';\nimport LoadingSpinner from '@/components/LoadingSpinner.vue';\nimport {\n getTotalApiCalls,\n getCallsByTimestamp,\n getCallsByOperation,\n getSubscriptionCounts,\n} from '../utilities/analytics';\nimport { Bar, Line } from 'vue-chartjs';\nimport {\n Chart as ChartJS,\n Title,\n Tooltip,\n Legend,\n BarElement,\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n Colors,\n} from 'chart.js';\nimport ModalComponent from '@/components/ModalComponent.vue';\nimport ButtonComponent from '@/components/ButtonComponent.vue';\nimport { useI18n } from 'vue-i18n';\nimport TableComponent from '@/components/TableComponent.vue';\n\nconst { t } = useI18n();\n\nChartJS.register(\n Title,\n Tooltip,\n Legend,\n BarElement,\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n Colors,\n);\n\nconst getOffsetDateAsString = (offset: number) => {\n const date = new Date();\n date.setDate(date.getDate() + offset);\n return date.toISOString().split('T')[0];\n};\n\nconst setDateOffset = async (offset: number) => {\n start.value = getOffsetDateAsString(offset);\n end.value = getOffsetDateAsString(0);\n apimAnalytics.value = null;\n apimAnalytics.value = await getApiMAnalytics(start.value, end.value);\n};\n\nconst startDate = new Date();\nstartDate.setMonth(new Date().getMonth() - 3);\n\nconst start = ref<string>(startDate.toISOString().split('T')[0]);\nconst end = ref<string>(new Date().toISOString().split('T')[0]);\n\nconst apimAnalytics = useApim(start.value, end.value);\n\nconst applyDateInterval = async () => {\n showDateModal.value = false;\n apimAnalytics.value = null;\n apimAnalytics.value = await getApiMAnalytics(start.value, end.value);\n};\n\nconst showDateModal = ref<boolean>(false);\n</script>\n\n<template>\n <div v-if=\"apimAnalytics\" class=\"max-w-[95vw] p-2\">\n <div class=\"flex justify-end\">\n <p>{{ t('analytics.filter') }}:</p>\n <p\n class=\"mx-2\"\n :class=\"[\n start === getOffsetDateAsString(-7)\n ? 'font-bold'\n : 'hover:cursor-pointer',\n ]\"\n @click=\"() => setDateOffset(-7)\"\n >\n {{ t('analytics.7days') }}\n </p>\n <p\n class=\"mr-2\"\n :class=\"[\n start === getOffsetDateAsString(-30)\n ? 'font-bold'\n : 'hover:cursor-pointer',\n ]\"\n @click=\"setDateOffset(-30)\"\n >\n {{ t('analytics.30days') }}\n </p>\n <!-- <p\n class=\"mr-2\"\n :class=\"[start !== getOffsetDateAsString(-7) && start !== getOffsetDateAsString(-30) ? 'font-bold' : 'hover:cursor-pointer']\"\n @click=\"() => showDateModal = true\"\n >\n {{ t('analytics.customInterval') }}\n </p> -->\n <ModalComponent\n :show-modal=\"showDateModal\"\n :title=\"''\"\n @close=\"showDateModal = false\"\n >\n <template #default>\n <div>\n {{ t('analytics.from') }}\n <input v-model=\"start\" type=\"date\" class=\"border\" />\n </div>\n <div>\n {{ t('analytics.to') }}\n <input v-model=\"end\" type=\"date\" class=\"border\" />\n </div>\n </template>\n <template #buttons>\n <div class=\"gnist-button-group\">\n <ButtonComponent\n :text=\"t('admin.blockProduction.cancel')\"\n @click=\"showDateModal = false\"\n />\n <ButtonComponent\n :text=\"t('analytics.search')\"\n type=\"primary\"\n @click=\"applyDateInterval\"\n />\n </div>\n </template>\n </ModalComponent>\n </div>\n <div\n class=\"mb-4 flex w-full auto-rows-fr grid-cols-2 flex-col gap-2 lg:grid\"\n >\n <div class=\"min-h-80\">\n <Bar\n :options=\"{ maintainAspectRatio: false }\"\n class=\"h-full w-full border bg-white p-2\"\n :data=\"getTotalApiCalls(apimAnalytics, t('analytics.apiCallsTotal'))\"\n />\n </div>\n <div class=\"min-h-80\">\n <Line\n :options=\"{ maintainAspectRatio: false }\"\n :data=\"\n getCallsByTimestamp(apimAnalytics, t('analytics.callsByTimestamp'))\n \"\n class=\"h-full w-full border bg-white p-2\"\n />\n </div>\n <div class=\"min-h-80\">\n <Bar\n :options=\"{ maintainAspectRatio: false }\"\n :data=\"\n getSubscriptionCounts(\n apimAnalytics,\n t('analytics.numSubscriptions'),\n )\n \"\n class=\"h-full w-full border bg-white p-2\"\n />\n </div>\n </div>\n <TableComponent\n :columns=\"['apiId', 'apiOperation', 'callCountSuccess', 'callCountTotal']\"\n sort-fields=\"apiId\"\n group-column-header\n column-header-class=\"font-normal break-words\"\n i18n-key=\"analytics\"\n :rows=\"apimAnalytics.apiMReportByOperation\"\n :get-key=\"\n (reportByOperation) =>\n reportByOperation.apiId + reportByOperation.apiOperation\n \"\n class=\"my-8\"\n >\n <template #columnHeader=\"{ item: reportByOperation }\">\n {{ reportByOperation.apiId }}\n </template>\n <template #columns=\"{ item: reportByOperation }\">\n <td>\n {{\n reportByOperation.apiOperation\n .replace(reportByOperation.apiId, '')\n .replace('/operations', '')\n }}\n </td>\n <td>{{ reportByOperation.callCountSuccess }}</td>\n <td>{{ reportByOperation.callCountTotal }}</td>\n </template>\n </TableComponent>\n <div\n class=\"mb-4 flex w-full auto-rows-fr grid-cols-2 flex-col gap-2 lg:grid\"\n >\n <div\n v-for=\"data in getCallsByOperation(\n apimAnalytics,\n t('analytics.numCallsForOperationsIn'),\n ).filter((data) => data.hasNonZeroEntries)\"\n :key=\"data.key\"\n class=\"min-h-80\"\n >\n <Bar\n :options=\"{ maintainAspectRatio: false }\"\n :data=\"data.data\"\n class=\"h-full w-full border bg-white p-2\"\n />\n </div>\n </div>\n </div>\n <div v-else>\n <div class=\"flex w-full flex-col items-center\">\n <LoadingSpinner class=\"h-16 w-16\" />\n </div>\n </div>\n</template>\n","import { apiUrl, type supported_locale } from '@/config';\nimport { ref, watch, type Ref } from 'vue';\nimport type { ApplicationInsightsDTO, ContentAnalyticsDTO } from './types';\nimport { useI18n } from 'vue-i18n';\n\nexport const useAnalytics = (): Ref<ApplicationInsightsDTO | null> => {\n const analytics = ref<ApplicationInsightsDTO | null>(null);\n const { locale } = useI18n();\n watch(\n locale,\n async () => {\n analytics.value = await getViewCountAnalytics(\n locale.value as supported_locale,\n );\n },\n { immediate: true },\n );\n\n return analytics;\n};\nasync function getViewCountAnalytics(locale: supported_locale) {\n try {\n const resp = await fetch(`${apiUrl}/analytics/${locale}?fromDays=${30}`);\n if (resp.ok) return await resp.json();\n else return null;\n } catch {\n return null;\n }\n}\n\nexport const useContentAnalytics = (): Ref<ContentAnalyticsDTO | null> => {\n const analytics = ref<ContentAnalyticsDTO | null>(null);\n const { locale } = useI18n();\n watch(\n locale,\n async () => {\n analytics.value = await getContentAnalytics(\n locale.value as supported_locale,\n );\n },\n { immediate: true },\n );\n return analytics;\n};\nasync function getContentAnalytics(locale: supported_locale) {\n try {\n const resp = await fetch(`${apiUrl}/analytics/${locale}/content`);\n if (resp.ok) return await resp.json();\n else return null;\n } catch {\n return null;\n }\n}\n","<script setup lang=\"ts\">\nimport { computed, ref, type Ref } from 'vue';\nimport { Line, Bar } from 'vue-chartjs';\nimport {\n Chart as ChartJS,\n Title,\n Tooltip,\n Legend,\n BarElement,\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n Colors,\n} from 'chart.js';\nimport LoadingSpinner from '@/components/LoadingSpinner.vue';\nimport { useAnalytics } from '@/api/analytics';\nimport type { ApplicationInsightsDTO } from '@/api/types';\nimport { useI18n } from 'vue-i18n';\n\nconst { t } = useI18n();\n\nChartJS.register(\n Title,\n Tooltip,\n Legend,\n BarElement,\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n Colors,\n);\n\nconst fromDate = ref(30);\nconst dateOptions: Intl.DateTimeFormatOptions = {\n weekday: 'short',\n month: '2-digit',\n day: '2-digit',\n};\nconst analyticsData: Ref<ApplicationInsightsDTO | null> = useAnalytics();\n\nconst userCount = computed(() => {\n if (analyticsData.value) {\n const filtered = analyticsData.value?.maxUserCount.slice(-fromDate.value);\n return {\n labels: filtered.map((row) =>\n new Date(row.timestamp)\n .toLocaleDateString(undefined, dateOptions)\n .replace(/\\.$/, ''),\n ),\n datasets: [\n {\n data: filtered.map((row) => row.count),\n label: t('analytics.maxUsers'),\n },\n ],\n };\n }\n return null;\n});\n\nconst pageViewCount = computed(() => {\n if (analyticsData.value) {\n const filtered = analyticsData.value?.pageViewCount.slice(-fromDate.value);\n return {\n labels: filtered.map((row) =>\n new Date(row.timestamp)\n .toLocaleDateString(undefined, dateOptions)\n .replace(/\\.$/, ''),\n ),\n datasets: [\n {\n data: filtered.map((row) => row.count),\n label: t('analytics.pageViews'),\n },\n ],\n };\n }\n return null;\n});\n\nconst loginCount = computed(() => {\n if (analyticsData.value) {\n const filtered = analyticsData.value?.loginCount.slice(-fromDate.value);\n return {\n labels: filtered.map((row) =>\n new Date(row.timestamp)\n .toLocaleDateString(undefined, dateOptions)\n .replace(/\\.$/, ''),\n ),\n datasets: [\n {\n data: filtered.map((row) => row.count),\n label: t('analytics.loginCount'),\n },\n ],\n };\n }\n return null;\n});\n\nconst newsViewCount = computed(() => {\n if (analyticsData.value) {\n const filtered = analyticsData.value?.newsViewCount.slice(-fromDate.value);\n return {\n labels: filtered.map((row) =>\n new Date(row.timestamp)\n .toLocaleDateString(undefined, dateOptions)\n .replace(/\\.$/, ''),\n ),\n datasets: [\n {\n data: filtered.map((row) => row.count),\n label: t('analytics.newsPageViews'),\n },\n ],\n };\n }\n return null;\n});\n\nconst commentViewCount = computed(() => {\n if (analyticsData.value) {\n const filtered = analyticsData.value?.commentViewCount.slice(\n -fromDate.value,\n );\n return {\n labels: filtered.map((row) =>\n new Date(row.timestamp)\n .toLocaleDateString(undefined, dateOptions)\n .replace(/\\.$/, ''),\n ),\n datasets: [\n {\n data: filtered.map((row) => row.count),\n label: t('analytics.commentPageViews'),\n },\n ],\n };\n }\n return null;\n});\n\nconst blockViewCount = computed(() => {\n if (analyticsData.value) {\n return {\n labels: analyticsData.value.blockViewCount.map(\n (row) => row.blockName ?? row.blockId,\n ),\n datasets: [\n {\n data: analyticsData.value.blockViewCount.map((row) =>\n fromDate.value === 30 ? row.count30d : row.count7d,\n ),\n label: t('analytics.blockViews'),\n },\n ],\n };\n }\n return null;\n});\n</script>\n\n<template>\n <div class=\"w-full\">\n <div class=\"flex justify-end\">\n <p>{{ t('analytics.filter') }}:</p>\n <p\n class=\"mx-2\"\n :class=\"[fromDate === 7 ? 'font-bold' : 'hover:cursor-pointer']\"\n @click=\"() => (fromDate = 7)\"\n >\n {{ t('analytics.7days') }}\n </p>\n <p\n class=\"mr-2\"\n :class=\"[fromDate === 30 ? 'font-bold' : 'hover:cursor-pointer']\"\n @click=\"() => (fromDate = 30)\"\n >\n {{ t('analytics.30days') }}\n </p>\n </div>\n <div\n v-if=\"analyticsData\"\n class=\"mb-8 flex w-full grid-cols-2 flex-col gap-2 lg:grid\"\n >\n <div class=\"min-h-80\">\n <Line\n v-if=\"userCount\"\n :options=\"{ maintainAspectRatio: false }\"\n class=\"h-full w-full border bg-white p-2\"\n :data=\"userCount\"\n />\n </div>\n <div class=\"min-h-80\">\n <Line\n v-if=\"pageViewCount\"\n :options=\"{ maintainAspectRatio: false }\"\n class=\"h-full w-full border bg-white p-2\"\n :data=\"pageViewCount\"\n />\n </div>\n <div class=\"min-h-80\">\n <Line\n v-if=\"loginCount\"\n :options=\"{ maintainAspectRatio: false }\"\n class=\"h-full w-full border bg-white p-2\"\n :data=\"loginCount\"\n />\n </div>\n <div class=\"min-h-80\">\n <Line\n v-if=\"newsViewCount\"\n :options=\"{ maintainAspectRatio: false }\"\n class=\"h-full w-full border bg-white p-2\"\n :data=\"newsViewCount\"\n />\n </div>\n <div class=\"min-h-80\">\n <Line\n v-if=\"commentViewCount\"\n :options=\"{ maintainAspectRatio: false }\"\n class=\"h-full w-full border bg-white p-2\"\n :data=\"commentViewCount\"\n />\n </div>\n <div class=\"min-h-80\">\n <Bar\n v-if=\"blockViewCount\"\n :options=\"{ maintainAspectRatio: false }\"\n class=\"h-full w-full border bg-white p-2\"\n :data=\"blockViewCount\"\n />\n </div>\n </div>\n <div v-else class=\"flex w-full flex-col items-center\">\n <LoadingSpinner class=\"h-16 w-16\" />\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport {\n getBlocksCategoryGraph,\n getBlocksFavoriteGraph,\n getPageCommentsGraph,\n} from '../utilities/analytics';\nimport LoadingSpinner from '@/components/LoadingSpinner.vue';\n\nimport { Bar } from 'vue-chartjs';\nimport {\n Chart as ChartJS,\n Title,\n Tooltip,\n Legend,\n BarElement,\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n Colors,\n} from 'chart.js';\nimport { useContentAnalytics } from '@/api/analytics';\nimport type { ContentAnalyticsDTO } from '@/api/types';\nimport { useI18n } from 'vue-i18n';\nconst { t } = useI18n();\nChartJS.register(\n Title,\n Tooltip,\n Legend,\n BarElement,\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n Colors,\n);\n\nconst analytics = useContentAnalytics();\n\nconst asPercentage = (value: number, precision: number) => {\n return `${(value * 100).toFixed(precision)}%`;\n};\n\nconst scalarData = (analytics: ContentAnalyticsDTO) => [\n {\n title: 'analytics.numRegisteredUsers',\n value: `${analytics.userAnalytics.userCount}`,\n },\n {\n title: 'analytics.numNewsNotification',\n value: `${analytics.userAnalytics.newsNotificationCount} (${asPercentage(\n analytics.userAnalytics.newsNotificationCount /\n analytics.userAnalytics.userCount,\n 1,\n )})`,\n },\n {\n title: 'analytics.numPublishedBlocks',\n value: `${analytics.blockAnalytics.publishedBlocksCount}`,\n },\n];\n\nconst getTruncatedLabel = (index: number) => {\n if (analytics.value) {\n return Object.keys(analytics.value.blockAnalytics.favoriteCounts)[index]\n .length > 25\n ? Object.keys(analytics.value.blockAnalytics.favoriteCounts)[\n index\n ].substring(0, 25) + '...'\n : Object.keys(analytics.value.blockAnalytics.favoriteCounts)[index];\n }\n};\n</script>\n\n<template>\n <div v-if=\"analytics\">\n <div class=\"mx-2 mb-8 flex w-full grid-flow-col flex-col gap-2 lg:grid\">\n <div\n v-for=\"data in scalarData(analytics)\"\n :key=\"data.title\"\n class=\"rounded-lg border bg-gnist-white p-8\"\n >\n <h2 class=\"mb-8\">\n {{ t(data.title) }}\n </h2>\n <p class=\"text-center text-xl text-black\">\n {{ data.value }}\n </p>\n </div>\n </div>\n <div class=\"mb-4 flex w-full grid-cols-2 flex-col gap-2 lg:grid\">\n <div class=\"min-h-80 min-w-0 max-w-full\">\n <Bar\n :options=\"{ maintainAspectRatio: false }\"\n :data=\"getBlocksCategoryGraph(analytics, t('analytics.numBlocks'))\"\n class=\"h-full w-full border bg-white p-2\"\n />\n </div>\n <div class=\"min-h-80 min-w-0 max-w-full\">\n <Bar\n :data=\"getBlocksFavoriteGraph(analytics, t('analytics.numFavorites'))\"\n :options=\"{\n maintainAspectRatio: false,\n scales: {\n x: {\n ticks: {\n callback: (value) => getTruncatedLabel(value as number),\n },\n },\n },\n }\"\n class=\"h-full w-full border bg-white p-2\"\n />\n </div>\n <div class=\"min-h-80 min-w-0 max-w-full\">\n <Bar\n :options=\"{ maintainAspectRatio: false }\"\n :data=\"getPageCommentsGraph(analytics, t('analytics.numComments'))\"\n class=\"h-full w-full border bg-white p-2\"\n />\n </div>\n </div>\n </div>\n <div v-else>\n <div class=\"flex w-full flex-col items-center\">\n <LoadingSpinner class=\"h-16 w-16\" />\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport ContentPage from '../components/ContentPage.vue';\nimport ButtonComponent from '@/components/ButtonComponent.vue';\nimport EditOrganizationComponent from '@/components/EditOrganizationComponent.vue';\nimport MaterialIcon from '@/components/MaterialIcon.vue';\nimport ModalComponent from '@/components/ModalComponent.vue';\nimport TextInput from '@/components/forms/InputText.vue';\nimport { ref, watch } from 'vue';\nimport {\n acceptMembershipRequest,\n addUserToOrganization,\n removeUserFromOrganization,\n useOrganization,\n} from '@/api/organization';\nimport { useRoute } from 'vue-router';\nimport type { Guid, OrganizationUser } from '@/api/types';\nimport { useI18n } from 'vue-i18n';\nimport { editBlockVersionsRouteId } from '@/config';\nimport { translateStringOrLocale } from '@/i18n';\nimport { throwOnError } from '@/api/composable';\nimport { useCurrentUser } from '@/api/auth';\nimport { getRouteTitle } from '@/utilities/routeUtils';\nimport TableComponent from '@/components/TableComponent.vue';\n\nconst { t } = useI18n();\nconst route = useRoute();\nconst orgId = route.params.organizationId as Guid;\nconst loggedOnUser = useCurrentUser();\n\nconst userToDelete = ref<OrganizationUser | null>(null);\nconst isMembershipRequest = ref(false);\nconst showDeleteUserModal = ref(false);\nconst { result: organizationData } = throwOnError(useOrganization(orgId, true));\nconst addUserInput = ref('');\nconst addUserError = ref('');\nconst removeUserError = ref('');\nconst emailValid = ref(false);\n\nwatch(organizationData, () => {\n if (!organizationData.value) return;\n document.title = getRouteTitle(\n `${t('header.items.org')}: ${organizationData.value.name}`,\n );\n});\n\nconst displayDeleteUserModal = (user: OrganizationUser, isRequest: boolean) => {\n showDeleteUserModal.value = true;\n userToDelete.value = user;\n isMembershipRequest.value = isRequest;\n};\n\nconst addUser = async () => {\n addUserError.value = '';\n if (organizationData.value) {\n try {\n const r = await addUserToOrganization(\n orgId,\n addUserInput.value.toLowerCase(),\n );\n if (organizationData.value) {\n organizationData.value.users = r;\n addUserError.value = '';\n }\n addUserInput.value = '';\n } catch (err) {\n if ((err as Error).message) {\n addUserError.value = t((err as Error).message);\n } else {\n throw err;\n }\n }\n }\n};\n\nconst removeUser = () => {\n if (!organizationData.value || !userToDelete.value) return;\n try {\n removeUserFromOrganization(orgId, userToDelete.value.userId);\n if (userToDelete.value.userId === loggedOnUser.value?.id) {\n window.location.reload();\n }\n const filterUsers = (users: OrganizationUser[]) =>\n users.filter(\n (user: OrganizationUser) => user.userId !== userToDelete.value?.userId,\n );\n\n if (isMembershipRequest.value) {\n organizationData.value.requestedUsers = filterUsers(\n organizationData.value.requestedUsers,\n );\n } else {\n organizationData.value.users = filterUsers(organizationData.value.users);\n }\n } catch {\n () => {\n removeUserError.value = t('organization.removeUserError');\n };\n }\n showDeleteUserModal.value = false;\n userToDelete.value = null;\n};\n\nconst approveUserToOrganization = (requestedUser: OrganizationUser) => {\n try {\n acceptMembershipRequest(orgId, requestedUser);\n if (!organizationData.value) return;\n organizationData.value.requestedUsers =\n organizationData.value.requestedUsers.filter(\n (user) => user.userId !== requestedUser.userId,\n );\n organizationData.value.users.push(requestedUser);\n addUserError.value = '';\n } catch {\n addUserError.value = t('organization.unknownAddUserError');\n }\n};\n</script>\n\n<template>\n <ContentPage\n v-if=\"organizationData\"\n :title=\"organizationData.name\"\n class=\"bg-gnist-white pb-4\"\n >\n <div class=\"lg:px-8\">\n <EditOrganizationComponent\n class=\"lg:max-w-1/2\"\n :data=\"organizationData\"\n @on-saved=\"\n (newData) => {\n if (!organizationData) return;\n organizationData = newData;\n }\n \"\n />\n <div>\n <h2 class=\"mt-8\">\n {{ t('organization.associatedUsers') }}\n </h2>\n\n <div class=\"pb-8\">\n <div class=\"w-full max-w-full overflow-x-auto\">\n <ModalComponent\n :show-modal=\"showDeleteUserModal\"\n :title=\"t('organization.removeUser')\"\n @handle-click=\"removeUser()\"\n @close=\"showDeleteUserModal = false\"\n >\n <span class=\"font-bold\">{{ t('organization.name') }}:</span>\n {{ userToDelete?.name }}\n </ModalComponent>\n <TableComponent\n size=\"table-lg\"\n :rows=\"organizationData?.users\"\n show-spinner\n i18n-key=\"organization\"\n :get-key=\"(user) => user.userId\"\n :columns=\"[\n 'name',\n 'email',\n 'removeUser' as keyof OrganizationUser,\n ]\"\n column-header-class=\"font-normal\"\n >\n <template #columnHeader=\"{ item: user }\">\n {{ user.name }}\n </template>\n <template #columns=\"{ item: user }\">\n <td>\n {{ user.email }}\n </td>\n <td class=\"w-1 text-center\">\n <MaterialIcon\n class=\"hover:cursor-pointer\"\n @click=\"displayDeleteUserModal(user, false)\"\n >\n close\n </MaterialIcon>\n </td>\n </template>\n </TableComponent>\n <template v-if=\"organizationData?.requestedUsers.length > 0\">\n <h3 class=\"pt-8\">Medlemsskapsforespørsler</h3>\n <TableComponent\n size=\"table-lg\"\n :rows=\"organizationData.requestedUsers\"\n i18n-key=\"organization\"\n :get-key=\"(user) => user.userId\"\n :columns=\"[\n 'name',\n 'email',\n 'approveUser' as keyof OrganizationUser,\n 'denyUser' as keyof OrganizationUser,\n ]\"\n column-header-class=\"font-normal\"\n >\n <template #columnHeader=\"{ item: requestedUser }\">\n {{ requestedUser.name }}\n </template>\n <template #columns=\"{ item: requestedUser }\">\n <td>\n {{ requestedUser.email }}\n </td>\n <td class=\"w-1 text-center\">\n <MaterialIcon\n class=\"hover:cursor-pointer\"\n @click=\"approveUserToOrganization(requestedUser)\"\n >check\n </MaterialIcon>\n </td>\n <td class=\"w-1 text-center\">\n <MaterialIcon\n class=\"hover:cursor-pointer\"\n @click=\"displayDeleteUserModal(requestedUser, true)\"\n >\n close\n </MaterialIcon>\n </td>\n </template>\n </TableComponent>\n </template>\n <p class=\"mt-2 text-gnist-orange\">\n {{ removeUserError }}\n </p>\n </div>\n </div>\n\n <div class=\"mb-8\">\n <h3>{{ t('organization.addUserHeader') }}</h3>\n <p class=\"py-2\">\n {{ t('organization.addUserDescription') }}\n </p>\n <fieldset\n class=\"flex min-w-0 flex-col items-end gap-4 border p-1 ps-2 md:flex-row\"\n >\n <TextInput\n v-model=\"addUserInput\"\n label=\"organization.addUserLabel\"\n show-validation-message\n type=\"email\"\n class=\"w-96 max-w-full\"\n :placeholder=\"t('organization.email')\"\n @update:valid=\"(valid) => (emailValid = valid)\"\n />\n <ButtonComponent\n :text=\"t('organization.addUserButton')\"\n :onclick=\"addUser\"\n :disabled=\"!addUserInput || !emailValid\"\n class=\"my-2\"\n />\n </fieldset>\n <p class=\"text-gnist-orange\">\n {{ addUserError }}\n </p>\n </div>\n </div>\n <div class=\"mb-4\">\n <h2>{{ t('organization.documents') }}</h2>\n <div class=\"m-4 mb-0 ml-6\">\n <RouterLink\n class=\"gnist-button gnist-button-primary\"\n :to=\"{ name: 'new_block', query: { ownerOrg: orgId } }\"\n data-cy-id=\"NewDocumentButton\"\n >\n {{ t('admin.blockProduction.newBlock') }}\n </RouterLink>\n </div>\n <TableComponent\n v-if=\"organizationData.blocks?.length > 0\"\n size=\"table-lg\"\n :rows=\"organizationData.blocks\"\n i18n-key=\"organization\"\n :get-key=\"(block) => block.blockId\"\n :columns=\"['name']\"\n >\n <template #columns=\"{ item: block }\">\n <td class=\"!py-0\">\n <RouterLink\n class=\"block p-4\"\n :to=\"{\n name: editBlockVersionsRouteId,\n params: { blockId: block.blockId },\n }\"\n >\n {{ translateStringOrLocale(block.name).value }}\n </RouterLink>\n </td>\n </template>\n </TableComponent>\n <p v-else class=\"mt-4\">{{ t('organization.noDocuments') }}</p>\n </div>\n </div>\n </ContentPage>\n</template>\n\n<style scoped>\n:deep(th),\n:deep(td) {\n padding: 1rem 0.5rem;\n text-overflow: ellipsis;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { useRoute } from 'vue-router';\n\nconst route = useRoute();\n\nif (route.query['token']) {\n window.opener.postMessage(\n {\n token: route.query['token'],\n },\n window.location.origin,\n );\n window.close();\n}\n</script>\n\n<template>\n <h1>Kun for teknisk bruk</h1>\n</template>\n","// Source: https://github.com/martinstark/throttle-ts\n/** Runs the given function and returns the result. If a new request comes in before a given cool-down period, just return undefined and don't run the function. */\nexport function throttle<R, A extends unknown[]>(\n delay: number,\n fn: (...args: A) => R,\n): (...args: A) => R | undefined {\n return throttleWithCancel(delay, fn).throttledFn;\n}\n/** Runs the given function and returns the result. If a new request comes in before a given cool-down period, just return undefined and don't run the function. */\nexport function throttleWithCancel<R, A extends unknown[]>(\n delay: number,\n fn: (...args: A) => R,\n): { throttledFn: (...args: A) => R | undefined; cancel: () => void } {\n let wait = false;\n let timeout: undefined | number;\n let cancelled = false;\n\n return {\n throttledFn: (...args: A) => {\n if (cancelled) return undefined;\n if (wait) return undefined;\n\n const val = fn(...args);\n\n wait = true;\n\n timeout = window.setTimeout(() => {\n wait = false;\n }, delay);\n\n return val;\n },\n cancel: () => {\n cancelled = true;\n clearTimeout(timeout);\n },\n };\n}\n\n/** Fires the given function and starts a cool-down timer. If another request comes in before the timer has elapsed, a rerun is requested and will be fired at the end of the waiting time.*/\nexport function throttleFireOnly<A extends unknown[]>(\n delay: number,\n fn: (...args: A) => void,\n): (...args: A) => void {\n let wait = false;\n let newRunRequested = false;\n return (...args: A) => {\n if (wait) {\n newRunRequested = true;\n return;\n }\n wait = true;\n fn(...args);\n window.setTimeout(() => {\n wait = false;\n if (newRunRequested) {\n newRunRequested = false;\n fn(...args);\n }\n }, delay);\n };\n}\n","<script lang=\"ts\">\nexport type selectorList = string | string[];\n</script>\n<script lang=\"ts\" setup>\nimport { assertDefined } from '@/utilities/debugUtils';\nimport { throttleFireOnly } from '@/utilities/throttle';\nimport { useWaitForObservedElement } from '@/utilities/useWaitForObservedElement';\nimport { ref, useAttrs, watch } from 'vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = defineProps<{\n visiblePartSelector?: selectorList;\n markers?: selectorList | selectorList[];\n loadedObserveSelector?: string;\n showPadding?: number;\n markerPadding?: number;\n markerStyle?: string;\n}>();\nconst outerContainer = ref<HTMLElement | null>();\nconst innerContainer = ref<HTMLElement | null>();\nconst loaded = ref(false);\ntype Size = {\n width: number;\n height: number;\n};\ntype OffsetPositions = {\n top: number;\n left: number;\n};\ntype Rect = OffsetPositions & Size;\ntype InsetPositions = OffsetPositions & {\n bottom: number;\n right: number;\n};\ntype RectWithAllInsetPositions = Rect & InsetPositions;\n\nfunction ensureArray<T>(item: T | T[]): T[] {\n return Array.isArray(item) ? item : [item];\n}\n\n/** How far from the `outer container` is the part we want to be visible, also considering that we want all of the `outer container` to be filled with the `inner container` (i.e. don't move the `inner cotainer` **too** far) */\nconst innerContainerActualOffset = ref<OffsetPositions>();\n/** The absolute position of the `outer container` on the page */\nconst outerContainerAbsPos = ref<RectWithAllInsetPositions>();\n/** The absolute position of the `inner container` on the page */\nconst innerContainerAbsPos = ref<RectWithAllInsetPositions>();\n\n/** Get the absolute position of an element within the page */\nfunction getAbsoluteRect(el: Element): RectWithAllInsetPositions {\n const rect = el.getBoundingClientRect();\n const scrollX = window.scrollX;\n const scrollY = window.scrollY;\n return {\n top: Math.round(rect.y + scrollY),\n left: Math.round(rect.x + scrollX),\n bottom: Math.round(rect.y + scrollY + rect.height),\n right: Math.round(rect.x + scrollX + rect.width),\n width: rect.width,\n height: rect.height,\n };\n}\n/** Returns the width and height of a rectangle encompassing all the supplied elements. Also returns the top and left position of this rectangle, relative to the outer container */\nfunction getRelativeRect(elements: Element[]): Rect {\n if (!assertDefined(outerContainerAbsPos.value, true)) throw '';\n if (!assertDefined(innerContainer.value, true)) throw '';\n innerContainerAbsPos.value = getAbsoluteRect(innerContainer.value);\n // Start by guessing that our target is as far from the edge on both sides as possible (i.e. left edge is all over at the right side, right edge is all over at the left side, top edge is all over at the bottom and bottom edge is all over at the top)\n // This starting position just needs to be greater than any of the elements we are looking for (that are inside the inner container), as we will move the position further and further towards the \"correct\" edge as needed.\n const targetAbsPos: InsetPositions = {\n top: innerContainerAbsPos.value.height,\n bottom: innerContainerAbsPos.value.height,\n left: innerContainerAbsPos.value.width,\n right: innerContainerAbsPos.value.width,\n };\n /** Expand `targetAbsPos` if needed, i.e. if the distance from the edge of the outer container to the element is 200 and the _currently wanted distance_ is 500, change it to 200. If the _currently wanted distance_ is 100, keep that value.\\\n * The initial value is \"all the way on the other side\", so this will gradually move us towards the correct position. */\n const getMinRelative = (\n elAbsPos: InsetPositions,\n key: keyof InsetPositions,\n ) => {\n let distanceFromOuterContainerEdge = 0;\n if (key === 'top' || key === 'left') {\n distanceFromOuterContainerEdge =\n elAbsPos[key] - outerContainerAbsPos.value![key]; // For top and left, the relative distance is the absolute position of the element minus the absolute position of the outer container\n } else if (key === 'bottom' || key === 'right') {\n distanceFromOuterContainerEdge =\n outerContainerAbsPos.value![key] - elAbsPos[key]; // For bottom and right, the relative distance is the absolute position of the outer container minus the absolute position of the element\n } else {\n throw new Error('Not implemented');\n }\n return Math.min(targetAbsPos[key], distanceFromOuterContainerEdge);\n };\n for (const element of elements) {\n if (!element.checkVisibility()) {\n console.debug(\n 'Element is not visible when calculating relative rect, skipping',\n element,\n );\n continue;\n }\n /** Absolute position on the page of this element */\n const elAbsPos = getAbsoluteRect(element);\n targetAbsPos.top = getMinRelative(elAbsPos, 'top');\n targetAbsPos.left = getMinRelative(elAbsPos, 'left');\n targetAbsPos.bottom = getMinRelative(elAbsPos, 'bottom');\n targetAbsPos.right = getMinRelative(elAbsPos, 'right');\n }\n return {\n top: targetAbsPos.top,\n left: targetAbsPos.left,\n width:\n outerContainerAbsPos.value.width -\n (targetAbsPos.right + targetAbsPos.left),\n height:\n outerContainerAbsPos.value.height -\n (targetAbsPos.bottom + targetAbsPos.top),\n };\n}\n/** Clip so only what we want to see is visible:\n * 1. Change the outer container to have the height and width of what we want to show (as defined by `showRect`) + a bit of padding.\n * 2. Position the inner container so that what we want to show is in the middle of the image.\n *\n * Also, you may supply a _wanted_ X and/or Y center value. If that is supplied, try to center that value if the visible portion. */\nfunction setVisibilityClipping(\n wantedCenterX = 0,\n wantedCenterY = 0,\n): Element[] {\n if (!assertDefined(outerContainer.value?.parentElement)) return [];\n if (!assertDefined(innerContainer.value)) return [];\n\n // Reset these so the calculations can be correct\n innerContainer.value.style.top = '0px';\n innerContainer.value.style.left = '0px';\n outerContainerAbsPos.value = getAbsoluteRect(outerContainer.value);\n\n if (!props.visiblePartSelector) return [];\n\n const visiblePartSelector = ensureArray(props.visiblePartSelector);\n const visiblePartElements = visiblePartSelector\n .map((selector): Element[] =>\n Array.from(innerContainer.value?.querySelectorAll(selector) ?? []),\n )\n .flat();\n\n /** The relative position (and size) of the part we want to be visible, related to the outer container. */\n const visiblePartRect = getRelativeRect(visiblePartElements);\n const padding = props.showPadding ?? 0;\n\n outerContainer.value.style.height = `${visiblePartRect.height + padding * 2}px`;\n outerContainer.value.style.width = `${visiblePartRect.width + padding * 2}px`;\n\n const wantedTopOffset =\n wantedCenterY > 0\n ? Math.max(wantedCenterY - outerContainer.value.clientHeight / 2, 0) // Try to get the wanted center in the center\n : Math.max(visiblePartRect.top - padding, 0); // Ensure we don't go to an offset beyond 0, even after considering the padding\n // Ensure that the bottom of the inner container is not above the bottom of the outer container\n const maxTopOffset = Math.max(\n innerContainer.value.clientHeight - outerContainer.value.clientHeight,\n 0,\n );\n\n const wantedLeftOffset =\n wantedCenterX > 0\n ? Math.max(wantedCenterX - outerContainer.value.clientWidth / 2, 0) // Try to get the wanted center in the center\n : Math.max(visiblePartRect.left - padding, 0); // Ensure we don't go to an offset beyond 0, even after considering the padding\n\n // Ensure that the right side of the inner container is not to the left of the right side of the outer container\n const maxLeftOffset = Math.max(\n innerContainer.value.clientWidth - outerContainer.value.clientWidth,\n 0,\n );\n innerContainerActualOffset.value = {\n top: Math.min(wantedTopOffset, maxTopOffset),\n left: Math.min(wantedLeftOffset, maxLeftOffset),\n };\n\n innerContainer.value.style.top = `-${innerContainerActualOffset.value.top}px`;\n innerContainer.value.style.left = `-${innerContainerActualOffset.value.left}px`;\n return visiblePartElements;\n}\n\nconst markerDivs = ref<HTMLElement[]>([]);\nfunction addMarker({\n top: offsetFromOuterContainerTop,\n left: offsetFromOuterContainerLeft,\n width,\n height,\n}: Rect) {\n if (!assertDefined(innerContainer.value)) return;\n\n const wantedLeftOffset =\n offsetFromOuterContainerLeft +\n (innerContainerActualOffset.value?.left ?? 0) -\n (props.markerPadding ?? 0);\n const lastVisibleLeft =\n (outerContainerAbsPos.value?.width ?? 0) +\n (innerContainerActualOffset.value?.left ?? 0);\n const markerWidth = width + (props.markerPadding ?? 0) * 2;\n const wantedTopOffset =\n offsetFromOuterContainerTop +\n (innerContainerActualOffset.value?.top ?? 0) -\n (props.markerPadding ?? 0);\n const lastVisibleTop =\n (outerContainerAbsPos.value?.height ?? 0) +\n (innerContainerActualOffset.value?.top ?? 0);\n const markerHeight = height + (props.markerPadding ?? 0) * 2;\n\n // If the marker is outside the visible portion of the window, move the visible portion\n // If we have multiple markers, we simplify and only consider the last marker\n if (\n wantedLeftOffset + markerWidth > lastVisibleLeft ||\n wantedTopOffset + markerHeight > lastVisibleTop\n ) {\n setVisibilityClipping(\n wantedLeftOffset + parseInt(`${markerWidth / 2}`),\n wantedTopOffset + parseInt(`${markerHeight / 2}`),\n );\n }\n\n const markerDiv = document.createElement('div');\n markerDiv.style.position = 'absolute';\n markerDiv.style.top = `${wantedTopOffset}px`;\n markerDiv.style.left = `${wantedLeftOffset}px`;\n markerDiv.style.width = `${markerWidth}px`;\n markerDiv.style.height = `${markerHeight}px`;\n markerDiv.style.border = props.markerStyle ?? '2px solid red';\n innerContainer.value.appendChild(markerDiv);\n markerDivs.value.push(markerDiv);\n}\nfunction setMarkers() {\n if (!props.markers) return;\n if (!assertDefined(innerContainer.value)) return;\n if (markerDivs.value.length > 0) {\n markerDivs.value.forEach((m) => m.remove());\n markerDivs.value = [];\n }\n const markers = ensureArray(props.markers);\n for (const marker of markers) {\n const markerSelectors = ensureArray(marker);\n const markerElements = markerSelectors\n .map((selector) =>\n Array.from(innerContainer.value?.querySelectorAll(selector) ?? []),\n )\n .flat();\n addMarker(getRelativeRect(markerElements));\n }\n}\n\nfunction updateUi(addContentChangedObserver?: boolean) {\n if (!loaded.value) return;\n if (!assertDefined(outerContainer.value)) return;\n if (!assertDefined(innerContainer.value)) return;\n const visiblePartElements = setVisibilityClipping();\n setMarkers();\n if (addContentChangedObserver) {\n // If some javascript in the shown elements changes the DOM, we need to recalculate the markers positions\n for (const target of visiblePartElements) {\n const observer = new MutationObserver(function () {\n setMarkers();\n });\n observer.observe(target, {\n childList: true,\n subtree: true,\n attributes: true,\n });\n }\n }\n}\nwatch(loaded, () => updateUi(true));\n\nwatch(outerContainer, () => {\n if (!outerContainer.value) return;\n if (props.loadedObserveSelector) {\n const loadMarker = useWaitForObservedElement(\n props.loadedObserveSelector,\n outerContainer.value,\n true,\n );\n watch(loadMarker, () => {\n if (loaded.value) return;\n if (loadMarker.value) loaded.value = true;\n });\n } else {\n loaded.value = true;\n }\n});\n\nconst parentContainer = ref<HTMLElement | null>(null);\nwatch(parentContainer, () => {\n if (!parentContainer.value) return;\n const resizeObserver = new ResizeObserver(\n throttleFireOnly(500, () => updateUi()),\n );\n resizeObserver.observe(parentContainer.value);\n});\n\nconst attrs = useAttrs();\n</script>\n<template>\n <div ref=\"parentContainer\" class=\"mx-10 my-2\">\n <div class=\"w-max max-w-full border p-1\" data-id=\"borderContainer\">\n <div\n ref=\"outerContainer\"\n class=\"relative max-w-full overflow-hidden\"\n data-id=\"outerContainer\"\n >\n <!-- Add an overlay that covers the component so it cannot be interacted with-->\n <div class=\"absolute inset-0 z-overlay\"> </div>\n <div\n ref=\"innerContainer\"\n v-bind=\"attrs\"\n data-id=\"innerContainer\"\n class=\"bg-gnist-white\"\n >\n <slot />\n </div>\n </div>\n </div>\n <slot name=\"text\" />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { defineAsyncComponent } from 'vue';\nimport ComponentPreview, { type selectorList } from './ComponentPreview.vue';\nimport { ParagraphShimmer } from 'vue3-shimmer';\n// TORGST, 18.8.23: IMPORTANT! This needs to be loaded async to ensure correct order of CSS (at least in dev)!!!\n\nconst MarkdownEditor = defineAsyncComponent({\n loader: () => import('@/components/admin/MarkdownEditor.vue'),\n loadingComponent: ParagraphShimmer,\n});\n\ndefineProps<{\n visiblePartSelector?: selectorList;\n markers?: selectorList | selectorList[];\n}>();\n</script>\n<template>\n <ComponentPreview\n :visible-part-selector=\"visiblePartSelector\"\n :markers=\"markers\"\n loaded-observe-selector=\".NormalEditor .toastui-editor-defaultUI\"\n :show-padding=\"4\"\n :marker-padding=\"2\"\n marker-style=\"2px solid red\"\n >\n <MarkdownEditor\n model-value=\"\"\n editor-type=\"wysiwyg\"\n editor-height=\"10rem\"\n />\n <template #text>\n <slot />\n </template>\n </ComponentPreview>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from 'vue-i18n';\nimport { computed, ref, watch } from 'vue';\nimport type { supported_locale } from '@/config';\nimport ComponentPreviewMdEditor from '@/components/ComponentPreviewMdEditor.vue';\nimport BlockToc from '@/components/block/BlockToc.vue';\nimport ContentPage from '@/components/ContentPage.vue';\nimport MaterialIcon from '@/components/MaterialIcon.vue';\n\nconst { t, locale } = useI18n();\nconst isNorwegian = computed(() => (locale.value as supported_locale) === 'no');\nconst container = ref<HTMLElement | null>(null);\nconst containers = ref<{ idx: number; el: HTMLElement }[]>([]);\nwatch(container, () => {\n if (!container.value) return;\n containers.value = [{ idx: 0, el: container.value }];\n});\n</script>\n<template>\n <ContentPage\n :title=\"t('header.items.usermanual.rich_text')\"\n class=\"bg-gnist-blue-light-light [&_.max-w-screen-xl]:max-w-screen-2xl\"\n :banner-classes=\"[\n 'w-full max-w-screen-2xl px-8 before:block lg:grid lg:grid-cols-4 lg:gap-10 [&>div]:col-span-3 [&>div]:w-full [&>div]:lg:px-0',\n ]\"\n >\n <div class=\"grow\">\n <div class=\"mx-2 mt-0\">\n <div class=\"w-full text-gnist-black\">\n <div\n :class=\"[\n 'pb-16',\n '2xl:mx-auto',\n 'grow lg:grid lg:grid-cols-4 lg:gap-10',\n ]\"\n >\n <div class=\"relative col-span-1 ml-auto mt-4 lg:pb-24\">\n <BlockToc :containers=\"containers\" />\n </div>\n <div ref=\"container\" class=\"html-render col-span-3 mt-4 pt-5\">\n <h2 v-if=\"isNorwegian\" id=\"edit_modes\">\n Forskjellige redigeringsmoduser\n </h2>\n <h2 v-else id=\"edit_modes\">Different editing modes</h2>\n <p v-if=\"isNorwegian\">\n Redigering av rik tekst er basert på standarden\n <a href=\"https://commonmark.org/help/\">Markdown</a>, men med\n støtte fra en WySiWyG-editor (What You See Is What You Get) som\n gjør det enklere å formatere teksten. Editoren har to\n <span class=\"italic\">moduser</span> som du kan velge med fanene\n nederst:\n </p>\n <p v-else>\n Editing rich text is based on the\n <a href=\"https://commonmark.org/help/\">Markdown</a> standard,\n with added support from a WySiWyG editor (What You See Is What\n You Get) which makes it easier to format the text. The editor\n has two <span class=\"italic\">modes</span> which you can choose\n with the tabs at the bottom:\n </p>\n <ComponentPreviewMdEditor\n visible-part-selector=\".toastui-editor-mode-switch\"\n markers=\".toastui-editor-mode-switch .tab-item\"\n class=\"max-w-full\"\n />\n <template v-if=\"isNorwegian\">\n <p>\n <span class=\"italic\">Formatert</span> er standardmodusen, og\n viser teksten stort sett som den vil se ut når den publiseres.\n I denne modusen må du bruke verktøylinjen øverst for å\n formatere teksten.\n </p>\n <p>\n <span class=\"italic\">Markdown</span> er en visning hvor du\n skriver markdown, men også ser omtrent hvordan resultatet vil\n bli. Du kan fortsatt bruke verktøylinjen i denne modusen.\n </p>\n </template>\n <template v-else>\n <p>\n <span class=\"italic\">WYSIWYG</span> is the default mode, and\n shows the text mostly as it will look when published. In this\n mode you have to use the toolbar at the top to format the\n text.\n </p>\n <p>\n <span class=\"italic\">Markdown</span> is a view where you write\n markdown, but also see approximately how the result will look.\n You can still use the toolbar in this mode.\n </p>\n </template>\n <p v-if=\"isNorwegian\">\n Hvis du vil skrive markdown direkte uten noen innblanding fra\n editoren, trykk på kildekodeknappen\n <span class=\"inline-flex\">\n (\n <MaterialIcon>data_object</MaterialIcon>\n ):\n </span>\n </p>\n <p v-else>\n If you want to write markdown directly without any interference\n from the editor, press the source code button\n <span class=\"inline-flex\">\n (\n <MaterialIcon>data_object</MaterialIcon>\n ):\n </span>\n </p>\n <ComponentPreviewMdEditor\n visible-part-selector=\".toastui-editor-toolbar-group:has(.ViewSourceButton)\"\n markers=\".ViewSourceButton\"\n class=\"min-w-[63rem]\"\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n </ContentPage>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from 'vue-i18n';\nimport { ref, watchEffect } from 'vue';\nimport BlockToc from '@/components/block/BlockToc.vue';\nimport ContentPage from '@/components/ContentPage.vue';\nimport MarkdownRenderer from '@/components/block/MarkdownRenderer.vue';\nimport type { Schema } from '@/api/types';\nimport { useRoute } from 'vue-router';\nimport { nextTick } from 'vue';\nimport { getRouteTitle } from '@/utilities/routeUtils';\n\nconst { t, locale } = useI18n();\nconst container = ref<HTMLElement | null>(null);\nconst containers = ref<{ idx: number; el: HTMLElement }[]>([]);\nconst route = useRoute();\nconst titleId = `header.items.usermanual.${route.params.filename}`;\nconst md = ref<string | undefined>();\n\nwatchEffect(async () => {\n if (!container.value) return;\n const fileurl = `/documentation/${route.params.filename}_${locale.value}.md`;\n const resp = await fetch(fileurl);\n if (!resp.ok) {\n throw new Error(\n `Failed to fetch ${fileurl}: ${resp.status} ${resp.statusText}`,\n );\n } else if (!resp.headers.get('content-type')?.includes('text/markdown')) {\n throw new Error(\n `Invalid content-type: ${resp.headers.get('content-type')}`,\n );\n }\n md.value = await resp.text();\n await nextTick();\n document.title = getRouteTitle(t(titleId));\n containers.value = [{ idx: 0, el: container.value }];\n});\n</script>\n<template>\n <ContentPage\n :title=\"t(titleId)\"\n class=\"bg-gnist-blue-light-light [&_.max-w-screen-xl]:max-w-screen-2xl\"\n :banner-classes=\"[\n 'w-full max-w-screen-2xl px-8 before:block lg:grid lg:grid-cols-4 lg:gap-10 [&>div]:col-span-3 [&>div]:w-full [&>div]:lg:px-0',\n ]\"\n >\n <div class=\"grow\">\n <div class=\"mx-2 mt-0\">\n <div class=\"w-full text-gnist-black\">\n <div\n :class=\"[\n 'pb-16',\n '2xl:mx-auto',\n 'grow lg:grid lg:grid-cols-4 lg:gap-10',\n ]\"\n >\n <div class=\"relative col-span-1 ml-auto mt-4 lg:pb-24\">\n <BlockToc :containers=\"containers\" />\n </div>\n <div ref=\"container\" class=\"html-render col-span-3 mt-4 pt-5\">\n <MarkdownRenderer\n v-if=\"md\"\n :schema=\"{ showTitle: false } as Schema\"\n :value=\"md\"\n blob-location=\"public\"\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n </ContentPage>\n</template>\n","<script setup lang=\"ts\">\nimport ButtonComponent from '@/components/ButtonComponent.vue';\nimport TextInput from '@/components/forms/InputText.vue';\nimport Dropdown, {\n toDropdownItems,\n} from '@/components/forms/InputDropdown.vue';\nimport InputBlockPicker from './forms/InputBlockPicker.vue';\nimport { useI18n } from 'vue-i18n';\nimport {\n type Tag,\n type KeyOfRecursiveBelow,\n removeParentKey,\n type KeyOfRecursive,\n type TagGroup,\n} from '@/api/types';\nimport { computed, ref, watch } from 'vue';\nimport { SUPPORTED_LOCALES } from '@/config';\nimport { useNestedMV } from '@/utilities/useInternalState';\nimport { arrayEquals } from '@/utilities/arrayEquals';\nimport { translateStringOrLocale } from '@/i18n';\n\nconst props = defineProps<{\n modelValue: Tag;\n localeKeys: KeyOfRecursiveBelow<Tag, 'text'>[];\n quickEdit: boolean;\n tagGroups: TagGroup[];\n}>();\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: typeof props.modelValue): void;\n (e: 'update:changed', changed: boolean): void;\n (e: 'remove'): void;\n}>();\n\nconst value = useNestedMV(props, (val) => emit('update:modelValue', val));\n\nfunction getSource(): Omit<Tag, 'id'> {\n return {\n text: { ...value.value.text },\n tagGroups: [...(value.value.tagGroups ?? [])],\n primaryTagGroupId: value.value.primaryTagGroupId,\n homePageId: value.value.homePageId,\n };\n}\nconst source = ref<Omit<Tag, 'id'>>(getSource());\ndefineExpose({\n resetSource: () => {\n source.value = getSource();\n },\n});\n\nconst { t } = useI18n();\n\nconst tagGroupOptions = computed(() =>\n toDropdownItems(props.tagGroups, (u) => [\n u.id.toString(),\n translateStringOrLocale(u.label).value,\n u,\n ]),\n);\nconst primaryTagGroupOptions = computed(() =>\n toDropdownItems(value.value.tagGroups, (u) => [\n u.id.toString(),\n translateStringOrLocale(u.label).value,\n u.id,\n ]),\n);\nwatch([primaryTagGroupOptions, () => value.value.primaryTagGroupId], () => {\n if (\n !primaryTagGroupOptions.value.find(\n (o) => o.value === value.value.primaryTagGroupId,\n )\n ) {\n value.value.primaryTagGroupId = undefined;\n }\n if (\n value.value.primaryTagGroupId === undefined &&\n primaryTagGroupOptions.value.length > 0\n ) {\n value.value.primaryTagGroupId = primaryTagGroupOptions.value[0].value;\n }\n});\n\nconst editing = ref<KeyOfRecursive<Tag>>();\nconst changed = ref(false);\nwatch(\n [value, source],\n () => {\n changed.value =\n !!SUPPORTED_LOCALES.find(\n (l) => value.value.text[l] !== source.value.text[l],\n ) ||\n !arrayEquals(value.value.tagGroups, source.value.tagGroups, (u) => u.id) ||\n value.value.primaryTagGroupId !== source.value.primaryTagGroupId ||\n value.value.homePageId !== source.value.homePageId;\n },\n { deep: true },\n);\nwatch(changed, () => emit('update:changed', changed.value));\n\nfunction getLocaleKey(locale: KeyOfRecursive<Tag>) {\n return removeParentKey(locale, 'text');\n}\n</script>\n\n<template>\n <component\n :is=\"index === 0 ? 'th' : 'td'\"\n v-for=\"(localeKey, index) in localeKeys\"\n :key=\"localeKey\"\n class=\"bg-[inherit] pl-8 hover:border hover:border-black md:max-w-full\"\n :class=\"{\n 'ColumnHeader z-10': index === 0,\n 'material-symbols-rounded-before': index === 0 && changed,\n }\"\n @click.self=\"editing = undefined\"\n >\n <form class=\"flex h-9 items-center\" @click.prevent=\"editing = localeKey\">\n <TextInput\n v-model=\"value.text[getLocaleKey(localeKey)]\"\n :label=\"\n t(`language.values.${getLocaleKey(localeKey)}`) +\n t('tagEditor.columns.text')\n \"\n sr-only\n class=\"w-full\"\n input-class=\"my-0 truncate\"\n :no-chrome=\"editing !== localeKey\"\n required\n @focus=\"editing = localeKey\"\n @blur=\"editing = undefined\"\n />\n </form>\n </component>\n <td class=\"whitespace-nowrap bg-[inherit] hover:border hover:border-black\">\n <Dropdown\n v-model=\"value.tagGroups\"\n label=\"tagEditor.columns.tagGroups\"\n sr-only\n :options=\"tagGroupOptions\"\n :multiple=\"{ emptyLabel: '' }\"\n :getkey=\"(u) => u?.id\"\n class=\"[&_button]:my-0\"\n :no-chrome=\"editing !== 'tagGroups'\"\n @focus=\"editing = 'tagGroups'\"\n @blur=\"editing = undefined\"\n />\n </td>\n <td class=\"whitespace-nowrap bg-[inherit] hover:border hover:border-black\">\n <Dropdown\n v-model=\"value.primaryTagGroupId\"\n label=\"tagEditor.columns.tagGroups\"\n sr-only\n :options=\"primaryTagGroupOptions\"\n :getkey=\"(u) => u\"\n class=\"[&_button]:my-0\"\n :no-chrome=\"editing !== 'primaryTagGroupId'\"\n :disabled=\"primaryTagGroupOptions.length < 2\"\n @focus=\"editing = 'primaryTagGroupId'\"\n @blur=\"editing = undefined\"\n />\n </td>\n <td class=\"whitespace-nowrap bg-[inherit] hover:border hover:border-black\">\n <InputBlockPicker\n v-model=\"value.homePageId\"\n label=\"tagEditor.columns.homePageId\"\n sr-only\n class=\"[&_[data-combobox]]:my-0 [&_[data-combobox]]:min-h-0\"\n :no-chrome=\"editing !== 'homePageId'\"\n @focus=\"editing = 'homePageId'\"\n @blur=\"editing = undefined\"\n />\n </td>\n <td>\n <ButtonComponent\n text=\"tagEditor.delete\"\n icon=\"delete\"\n type=\"danger\"\n icon-class=\"text-2xl leading-6\"\n @click=\"emit('remove')\"\n />\n </td>\n</template>\n\n<style scoped>\n.material-symbols-rounded-before::before {\n content: 'pending_actions';\n @apply absolute;\n @apply z-10;\n @apply text-3xl;\n @apply left-0;\n @apply text-gnist-red;\n}\n</style>\n","<script setup lang=\"ts\">\nimport ContentPage from '@/components/ContentPage.vue';\nimport ButtonComponent from '@/components/ButtonComponent.vue';\nimport Checkbox from '@/components/forms/InputCheckbox.vue';\nimport TagEditor from '@/components/TagEditor.vue';\nimport { useI18n } from 'vue-i18n';\nimport {\n createTag,\n deleteTag,\n updateTag,\n useTagGroups,\n useTags,\n} from '@/api/tags';\nimport {\n removeParentKey,\n type KeyOfRecursive,\n type KeyOfRecursiveBelow,\n type Tag,\n} from '@/api/types';\nimport { SUPPORTED_LOCALES, type supported_locale } from '@/config';\nimport { computed, ref } from 'vue';\nimport TableComponent from '@/components/TableComponent.vue';\n\nconst { t, locale } = useI18n();\n\nconst { result: tags } = useTags();\nconst { result: tagGroups } = useTagGroups();\n\nconst tagEditors = ref<InstanceType<typeof TagEditor>[]>([]);\n\nconst changeList = ref<{ [id: number]: boolean }>({});\nconst hasChanges = computed(\n () =>\n Object.values(changeList.value).includes(true) ||\n removedTags.value.length > 0,\n);\n\nasync function save() {\n if (!hasChanges.value) return;\n if (!tags.value) return;\n for (const [id, hasChange] of Object.entries(changeList.value)) {\n if (!hasChange) continue;\n const tagToSave = tags.value.find((u) => `${u.id}` === id);\n if (!tagToSave) throw new Error('Should not happen');\n if (tagToSave.id === -1) {\n const newTag = await createTag(tagToSave);\n tagToSave.id = newTag.id;\n } else {\n await updateTag(tagToSave);\n }\n }\n changeList.value = {};\n for (const tagToDelete of removedTags.value) {\n await deleteTag(tagToDelete);\n }\n removedTags.value.length = 0;\n tagEditors.value?.forEach((e) => e.resetSource());\n}\n\nconst textPropPrefix: `${keyof Pick<Tag, 'text'>}.` = 'text.';\nconst locales = [...SUPPORTED_LOCALES]\n .sort((a, b) => (a === locale.value ? -1 : b === locale.value ? 1 : 0))\n .map((i): KeyOfRecursiveBelow<Tag, 'text'> => `${textPropPrefix}${i}`);\n\nconst columns = computed(() => {\n const cols: (KeyOfRecursive<Tag> | null)[] = [...locales];\n cols.push('tagGroups');\n cols.push('primaryTagGroupId');\n cols.push('homePageId');\n cols.push(null);\n return cols;\n});\n\nfunction getColumnHeader(column: KeyOfRecursive<Tag>) {\n if (!locales.includes(column as KeyOfRecursiveBelow<Tag, 'text'>)) {\n return t(`tagEditor.columns.${column}`);\n } else {\n return (\n t(`language.values.${removeParentKey(column, 'text')}`) +\n t('tagEditor.columns.text')\n );\n }\n}\nconst quickEdit = ref(false);\n\nconst removedTags = ref<number[]>([]);\nfunction removeTag(tagId: number) {\n if (!tags.value) return;\n removedTags.value.push(tagId);\n tags.value = tags.value.filter((t) => t.id !== tagId);\n}\n</script>\n\n<template>\n <ContentPage :title=\"t('tagEditor.title')\" class=\"bg-gnist-gray-light-light\">\n <section class=\"py-8\">\n <div class=\"w-full max-w-full\">\n <div class=\"my-6 flex justify-between\">\n <Checkbox\n v-model=\"quickEdit\"\n label=\"tagEditor.quickEdit\"\n direction=\"horizontal\"\n mode=\"toggle\"\n class=\"grow-0\"\n />\n <ButtonComponent\n :text=\"t('tagEditor.save')\"\n type=\"primary\"\n :disabled=\"!hasChanges\"\n @click=\"() => save()\"\n />\n </div>\n <TableComponent\n size=\"table-xs\"\n :rows=\"tags\"\n show-spinner\n i18n-key=\"tagEditor.columns\"\n :get-key=\"(tag) => tag.id\"\n :columns=\"columns\"\n :get-column-header=\"getColumnHeader\"\n :sort-fields=\"locales as KeyOfRecursive<Tag>[]\"\n :default-sortfield=\"`text.${locale as supported_locale}`\"\n skip-sort-on-content-change\n >\n <template #columns=\"{ item: tag, rowIndex: idx, items }\">\n <TagEditor\n :ref=\"\n (ref) => tagEditors.push(ref as InstanceType<typeof TagEditor>)\n \"\n v-model=\"items[idx]\"\n :locale-keys=\"locales\"\n :quick-edit=\"quickEdit\"\n :tag-groups=\"tagGroups ?? []\"\n @update:changed=\"(val) => (changeList[tag.id] = val)\"\n @remove=\"removeTag(tag.id)\"\n />\n </template>\n </TableComponent>\n </div>\n </section>\n </ContentPage>\n</template>\n","<script setup lang=\"ts\">\nimport ButtonComponent from '@/components/ButtonComponent.vue';\nimport TextInput from '@/components/forms/InputText.vue';\nimport Dropdown from '@/components/forms/InputDropdown.vue';\nimport { useI18n } from 'vue-i18n';\nimport {\n type KeyOfRecursiveBelow,\n removeParentKey,\n type KeyOfRecursive,\n type TagGroup,\n colorList,\n} from '@/api/types';\nimport { ref, watch } from 'vue';\nimport { SUPPORTED_LOCALES } from '@/config';\nimport { useNestedMV } from '@/utilities/useInternalState';\nimport InputBlockPicker from './forms/InputBlockPicker.vue';\nimport { mapValueList } from '@/utilities/mapValueList';\n\nconst props = defineProps<{\n modelValue: TagGroup;\n localeKeys: KeyOfRecursiveBelow<TagGroup, 'label'>[];\n}>();\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: typeof props.modelValue): void;\n (e: 'update:changed', changed: boolean): void;\n (e: 'remove'): void;\n}>();\n\nconst value = useNestedMV(props, (val) => emit('update:modelValue', val));\n\nfunction getSource(): Omit<TagGroup, 'id'> {\n return {\n label: { ...value.value.label },\n homePageId: value.value.homePageId,\n color: value.value.color,\n };\n}\nconst source = ref<Omit<TagGroup, 'id'>>(getSource());\ndefineExpose({\n resetSource: () => {\n source.value = getSource();\n },\n});\n\nconst { t } = useI18n();\n\nconst editing = ref<KeyOfRecursive<TagGroup>>();\nconst changed = ref(false);\nwatch(\n [value, source],\n () => {\n changed.value =\n !!SUPPORTED_LOCALES.find(\n (l) => value.value.label[l] !== source.value.label[l],\n ) ||\n value.value.homePageId != source.value.homePageId ||\n value.value.color != source.value.color;\n },\n { deep: true },\n);\nwatch(changed, () => emit('update:changed', changed.value));\n\nconst colorOptions = mapValueList(colorList, 'categoryAdmin.colors', true);\n\nfunction getLocaleKey(locale: KeyOfRecursive<TagGroup>) {\n return removeParentKey(locale, 'label');\n}\n</script>\n\n<template>\n <component\n :is=\"index === 0 ? 'th' : 'td'\"\n v-for=\"(localeKey, index) in localeKeys\"\n :key=\"localeKey\"\n class=\"bg-[inherit] pl-8 md:max-w-full\"\n :class=\"{\n 'ColumnHeader z-10': index === 0,\n 'material-symbols-rounded-before': index === 0 && changed,\n }\"\n @click.self=\"editing = undefined\"\n >\n <form class=\"flex h-9 items-center\" @click.prevent=\"editing = localeKey\">\n <TextInput\n v-model=\"value.label[getLocaleKey(localeKey)]\"\n :label=\"\n t(`language.values.${getLocaleKey(localeKey)}`) +\n t('tagEditor.tagGroupColumns.label')\n \"\n sr-only\n class=\"w-full\"\n input-class=\"my-0 truncate\"\n :no-chrome=\"editing !== localeKey\"\n required\n @focus=\"editing = localeKey\"\n @blur=\"editing = undefined\"\n />\n </form>\n </component>\n <td class=\"whitespace-nowrap bg-[inherit] hover:border hover:border-black\">\n <InputBlockPicker\n v-model=\"value.homePageId\"\n label=\"tagEditor.tagGroupColumns.homePageId\"\n sr-only\n class=\"[&_[data-combobox]]:my-0 [&_[data-combobox]]:min-h-0\"\n :no-chrome=\"editing !== 'homePageId'\"\n @focus=\"editing = 'homePageId'\"\n @blur=\"editing = undefined\"\n />\n </td>\n <td class=\"bg-[inherit] hover:border hover:border-black\">\n <Dropdown\n v-model=\"value.color\"\n label=\"tagEditor.tagGroupColumns.color\"\n :multiple=\"{ emptyLabel: '', maxItems: 1 }\"\n sr-only\n class=\"[&_button]:my-0\"\n :no-chrome=\"editing !== 'color'\"\n :options=\"colorOptions\"\n :getkey=\"(val) => val ?? 'empty'\"\n @focus=\"editing = 'color'\"\n @blur=\"editing = undefined\"\n >\n <template #button=\"{ selectedItems: [selColor] }\">\n <span\n class=\"decoration items-center whitespace-nowrap underline decoration-4 underline-offset-4\"\n :class=\"[`decoration-gnist-${selColor}`]\"\n >\n {{ selColor ? t('categoryAdmin.colors.values.' + selColor) : '' }}\n </span>\n </template>\n <template #option=\"{ item: color }\">\n <span\n class=\"mx-4 my-1 flex items-center whitespace-nowrap\"\n :class=\"[\n color.value\n ? `decoration underline decoration-4 underline-offset-4 decoration-gnist-${color.value}`\n : '',\n ]\"\n >\n {{ color.text ? t(color.text) : ' ' }}\n </span>\n </template>\n </Dropdown>\n </td>\n <td class=\"bg-[inherit]\">\n <div class=\"flex justify-center\">\n <ButtonComponent\n text=\"tagEditor.deleteTagGroup\"\n icon=\"delete\"\n type=\"danger\"\n icon-class=\"text-2xl leading-6\"\n @click=\"emit('remove')\"\n />\n </div>\n </td>\n</template>\n\n<style scoped>\n.material-symbols-rounded-before::before {\n content: 'pending_actions';\n @apply absolute;\n @apply z-10;\n @apply text-3xl;\n @apply left-0;\n @apply text-gnist-red;\n}\n</style>\n","<script setup lang=\"ts\">\nimport ContentPage from '@/components/ContentPage.vue';\nimport ButtonComponent from '@/components/ButtonComponent.vue';\nimport TagGroupEditor from '@/components/TagGroupEditor.vue';\nimport { useI18n } from 'vue-i18n';\nimport {\n createTagGroup,\n deleteTagGroup,\n updateTagGroup,\n useTagGroups,\n} from '@/api/tags';\nimport {\n removeParentKey,\n type KeyOfRecursive,\n type KeyOfRecursiveBelow,\n type TagGroup,\n getEmptyLocaleValue,\n} from '@/api/types';\nimport { SUPPORTED_LOCALES, type supported_locale } from '@/config';\nimport { computed, ref } from 'vue';\nimport TableComponent from '@/components/TableComponent.vue';\n\nconst { t, locale } = useI18n();\n\nconst { result: tagGroups } = useTagGroups();\n\nconst tagGroupEditors = ref<InstanceType<typeof TagGroupEditor>[]>([]);\n\nconst changeList = ref<{ [id: number]: boolean }>({});\nconst hasChanges = computed(\n () =>\n Object.values(changeList.value).includes(true) ||\n removedTagGroups.value.length > 0,\n);\n\nasync function save() {\n if (!hasChanges.value) return;\n if (!tagGroups.value) return;\n for (const [id, hasChange] of Object.entries(changeList.value)) {\n if (!hasChange) continue;\n const tagGroupToSave = tagGroups.value.find((u) => `${u.id}` === id);\n if (!tagGroupToSave) throw new Error('Should not happen');\n if (tagGroupToSave.id === -1) {\n const newTagGroup = await createTagGroup(tagGroupToSave);\n tagGroupToSave.id = newTagGroup.id;\n } else {\n await updateTagGroup(tagGroupToSave.id, tagGroupToSave);\n }\n }\n changeList.value = {};\n for (const tagGroupToDelete of removedTagGroups.value) {\n await deleteTagGroup(tagGroupToDelete);\n }\n removedTagGroups.value.length = 0;\n tagGroupEditors.value?.forEach((e) => e.resetSource());\n}\n\nconst textPropPrefix: `${keyof Pick<TagGroup, 'label'>}.` = 'label.';\nconst locales = [...SUPPORTED_LOCALES]\n .sort((a, b) => (a === locale.value ? -1 : b === locale.value ? 1 : 0))\n .map((i): KeyOfRecursiveBelow<TagGroup, 'label'> => `${textPropPrefix}${i}`);\n\nconst columns = computed(() => {\n const cols: (KeyOfRecursive<TagGroup> | null)[] = [...locales];\n cols.push('homePageId');\n cols.push('color');\n cols.push(null);\n return cols;\n});\n\nfunction getColumnHeader(column: KeyOfRecursive<TagGroup>) {\n if (!locales.includes(column as KeyOfRecursiveBelow<TagGroup, 'label'>)) {\n return t(`tagEditor.tagGroupColumns.${column}`);\n } else {\n return (\n t(`language.values.${removeParentKey(column, 'label')}`) +\n t('tagEditor.tagGroupColumns.label')\n );\n }\n}\n\nfunction onCreateButtonClick() {\n if (!tagGroups.value) return;\n const minId = Math.min(...tagGroups.value.map((u) => u.id), 0);\n tagGroups.value.push({\n id: minId - 1,\n label: getEmptyLocaleValue(),\n });\n}\n\nconst removedTagGroups = ref<number[]>([]);\nfunction removeTagGroup(tagGroupId: number) {\n if (!tagGroups.value) return;\n removedTagGroups.value.push(tagGroupId);\n tagGroups.value = tagGroups.value.filter((u) => u.id !== tagGroupId);\n}\n</script>\n\n<template>\n <ContentPage\n :title=\"t('tagEditor.tagGroupTitle')\"\n class=\"bg-gnist-gray-light-light\"\n >\n <section class=\"py-8\">\n <div class=\"w-full max-w-full\">\n <div class=\"my-6 flex justify-between\">\n <ButtonComponent\n :text=\"t('tagEditor.createTagGroup')\"\n @click=\"onCreateButtonClick\"\n />\n <ButtonComponent\n :text=\"t('tagEditor.save')\"\n type=\"primary\"\n :disabled=\"!hasChanges\"\n @click=\"() => save()\"\n />\n </div>\n <TableComponent\n size=\"table-xs\"\n :rows=\"tagGroups\"\n show-spinner\n i18n-key=\"tagEditor.tagGroupColumns\"\n :get-key=\"(tagGroup) => tagGroup.id\"\n :columns=\"columns\"\n :get-column-header=\"getColumnHeader\"\n :sort-fields=\"locales as KeyOfRecursive<TagGroup>[]\"\n :default-sortfield=\"`label.${locale as supported_locale}`\"\n skip-sort-on-content-change\n >\n <template #columns=\"{ item: tagGroup, rowIndex: idx, items }\">\n <TagGroupEditor\n :ref=\"\n (ref) =>\n tagGroupEditors.push(ref as InstanceType<typeof TagGroupEditor>)\n \"\n v-model=\"items[idx]\"\n :locale-keys=\"locales\"\n @update:changed=\"(val) => (changeList[tagGroup.id] = val)\"\n @remove=\"removeTagGroup(tagGroup.id)\"\n />\n </template>\n </TableComponent>\n </div>\n </section>\n </ContentPage>\n</template>\n","import { apiUrl } from '@/config';\nimport type { ContactFormDTO } from './types';\n\nconst contactFormUrl = apiUrl + '/contactform';\n\nexport async function submitContactForm(dto: ContactFormDTO): Promise<void> {\n const response = await fetch(`${contactFormUrl}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify(dto),\n });\n if (!response.ok) throw new Error(await response.text());\n}\n","<script setup lang=\"ts\" generic=\"T = string\">\nimport ContentPage from '../components/ContentPage.vue';\nimport { ParagraphShimmer } from 'vue3-shimmer';\nimport LoadingSpinner from '@/components/LoadingSpinner.vue';\nimport ButtonComponent from '@/components/ButtonComponent.vue';\nimport TextInput from '@/components/forms/InputText.vue';\nimport Dropdown, {\n toDropdownItems,\n} from '@/components/forms/InputDropdown.vue';\nimport MaterialIcon from '@/components/MaterialIcon.vue';\nimport { useI18n } from 'vue-i18n';\nimport type { IInputLabelProps } from '@/components/forms/InputLabel.vue';\nimport { allFieldSets } from '@/api/field_labels';\nimport {\n getEmptyLocaleValue,\n type AlzFormData,\n type FieldLabel,\n} from '@/api/types';\nimport { alzFormTopics, useDynamicText } from '@/api/masterdata';\nimport { useRouter } from 'vue-router';\nimport { computed, ref, watch } from 'vue';\nimport { throwUnauthorized } from '@/utilities/throwErrorPageTrigger';\nimport { translateStringOrLocale } from '@/i18n';\nimport { useCurrentUser } from '@/api/auth';\nimport { submitContactForm } from '@/api/contactForm';\nimport { useValidationTracking } from '@/utilities/useValidationTracking';\n\nconst { t } = useI18n();\nconst router = useRouter();\n\nconst user = useCurrentUser();\n\nwatch(\n user,\n () => {\n if (!user.value) {\n throwUnauthorized();\n }\n },\n { immediate: true },\n);\n\nconst contactFieldKeys = allFieldSets.kssContactFieldKeys.fields;\n\nconst { loaded: textLoaded, result: texts } = useDynamicText(\n allFieldSets.alzFieldKeys.group,\n undefined,\n undefined,\n router,\n);\nconst dbFieldLookup = computed(() => {\n const lookup: { [key: string]: FieldLabel } = {};\n for (const fld of texts.value?.dbFieldLabels ?? []) {\n lookup[`${fld.group}.${fld.field}`] = fld;\n }\n return lookup;\n});\nfunction getDynamicLabelProps(\n key: keyof typeof contactFieldKeys,\n): Pick<IInputLabelProps, 'dynamicTextKey' | 'mdDescription' | 'link'> {\n return {\n dynamicTextKey: contactFieldKeys[key],\n mdDescription:\n dbFieldLookup.value[contactFieldKeys[key]]?.richTextDescription,\n link: dbFieldLookup.value[contactFieldKeys[key]]?.link,\n };\n}\n\nconst topicOptions = toDropdownItems(\n alzFormTopics.result.value,\n (topic) => [topic.key, translateStringOrLocale(topic.label).value, topic],\n true,\n);\n\nconst data = ref<AlzFormData>({\n topic: { key: '', label: getEmptyLocaleValue(), recipient: '' },\n senderEmail: user.value?.email ?? '',\n senderName: user.value\n ? (user.value.fullName ?? `${user.value.firstName} ${user.value.lastName}`)\n : '',\n subject: '',\n request: '',\n});\n\nconst showValidationMessages = ref<boolean>(false);\nconst { formRef, isValid } = useValidationTracking(\n data,\n showValidationMessages,\n true,\n true,\n);\n\nconst submitting = ref(false);\nconst submitted = ref(false);\nconst submitFailed = ref(false);\nfunction submit() {\n submitting.value = true;\n submitted.value = false;\n submitFailed.value = false;\n try {\n submitContactForm({\n recipients: data.value.topic.recipient\n .split(';')\n .map((email) => ({ email })),\n subject: data.value.subject,\n sender: {\n email: data.value.senderEmail,\n name: data.value.senderName ? data.value.senderName : undefined,\n },\n mainBody: data.value.request,\n });\n submitted.value = true;\n } catch (err) {\n // TODO: better error handling\n console.error(err);\n submitFailed.value = true;\n }\n submitting.value = false;\n}\n</script>\n\n<template>\n <ContentPage\n :title=\"t('header.items.contact.kss')\"\n class=\"bg-gnist-gray-light-light\"\n >\n <ParagraphShimmer\n v-if=\"!textLoaded\"\n :lines=\"6\"\n :random-size=\"true\"\n class=\"mx-auto w-full max-w-5xl\"\n />\n <form v-else ref=\"formRef\" class=\"mx-2 md:mx-auto\">\n <Dropdown\n v-model=\"data.topic\"\n v-bind=\"getDynamicLabelProps('topic')\"\n :options=\"topicOptions\"\n :getkey=\"(t) => t?.key\"\n required\n />\n <TextInput\n v-model=\"data.senderEmail\"\n v-bind=\"getDynamicLabelProps('senderEmail')\"\n required\n />\n <TextInput\n v-model=\"data.senderName\"\n v-bind=\"getDynamicLabelProps('senderName')\"\n />\n <TextInput\n v-model=\"data.subject\"\n v-bind=\"getDynamicLabelProps('title')\"\n required\n />\n <TextInput\n v-model=\"data.request\"\n v-bind=\"getDynamicLabelProps('request')\"\n multiline\n :rows=\"10\"\n required\n />\n <div class=\"flex items-center justify-end gap-4\">\n <MaterialIcon\n v-if=\"submitted\"\n icon=\"check_circle\"\n label=\"orders.alz.buttons.values.submitted\"\n class=\"material-symbols-rounded ml-1 cursor-default text-3xl font-extrabold text-gnist-green\"\n />\n <MaterialIcon\n v-if=\"submitFailed\"\n icon=\"error_outline\"\n label=\"orders.alz.buttons.values.submitted\"\n class=\"material-symbols-rounded ml-1 cursor-default text-3xl font-extrabold text-gnist-red\"\n />\n <LoadingSpinner v-if=\"submitting\" class=\"h-9 w-9\" />\n <ButtonComponent\n text=\"contact.kss.buttons.values.send\"\n class=\"my-2 w-auto self-end justify-self-start\"\n :disabled=\"submitting || submitted || !isValid\"\n @click.prevent=\"submit\"\n />\n </div>\n </form>\n </ContentPage>\n</template>\n","<script setup lang=\"ts\">\nimport { useBreadcrumbs } from '@/api/breadcrumbs';\nimport BreadCrumbTree from '@/components/BreadCrumbTree.vue';\nimport ContentPage from '@/components/ContentPage.vue';\nimport { useI18n } from 'vue-i18n';\n\nconst { t } = useI18n();\nconst { result: breadcrumbData } = useBreadcrumbs();\n</script>\n<template>\n <ContentPage\n :title=\"t('header.items.breadcrumbEdit')\"\n class=\"bg-gnist-gray-light-light\"\n >\n <BreadCrumbTree v-if=\"breadcrumbData\" :model-value=\"breadcrumbData\" edit />\n </ContentPage>\n</template>\n","import 'vue-router';\ndeclare module 'vue-router' {\n interface RouteMeta {\n title: string;\n /** Used by blocks view */\n titleTranslations?: localeValue;\n translationid?: string;\n hideSearchBar?: boolean;\n targetDoc?: Guid;\n isDocsListRoute?: boolean;\n fullScreen?: boolean;\n customOptions?: RouteCustomOptions;\n }\n}\n\nimport {\n createRouter,\n createWebHistory,\n type RouteRecordRaw,\n} from 'vue-router';\nimport {\n hardcodedStaticRoutes,\n hasOnlyOptionalParamsRe,\n setRouter,\n setStaticRoutes,\n} from './routeUtils';\nimport ProfileView from '../views/ProfileView.vue';\nimport FavouriteView from '../views/FavouriteView.vue';\nimport SocialView from '@/views/SocialView.vue';\nimport SocialThreadView from '@/views/SocialThreadView.vue';\nimport ModeratorView from '@/views/ModeratorView.vue';\nimport SocialPageView from '@/views/SocialPageView.vue';\nimport AnalyticsView from '@/views/AnalyticsView.vue';\nimport MyOrganizationsView from '@/views/MyOrganizationsView.vue';\nimport SuggestionsListView from '@/views/SuggestionsListView.vue';\nimport SuggestionDetailsView from '@/views/SuggestionDetailsView.vue';\nimport SuggestionEditView from '@/views/SuggestionEditView.vue';\nimport MasterDataEditorView from '@/views/MasterDataEditorView.vue';\nimport AlzOrderView from '@/views/AlzOrderView.vue';\nimport AlzMySystemsView from '@/views/AlzMySystemsView.vue';\n\nimport AccountView from '../views/AccountView.vue';\nimport SubscriptionsView from '@/views/SubscriptionsView.vue';\nimport ApimProductsView from '@/views/ApimProductsView.vue';\nimport NewsView from '@/views/NewsView.vue';\nimport LoadingView from '@/views/LoadingView.vue';\nimport NotFoundView from '@/views/Errors/NotFoundView.vue';\nimport NotificationsView from '@/views/NotificationsView.vue';\n\nimport AdminView from '@/views/AdminView.vue';\nimport BlockAdminView from '@/views/BlockAdminView.vue';\nimport MyDocumentsView from '@/views/MyDocumentsView.vue';\nimport BlockDetailsEditorView from '@/views/BlockDetailsEditorView.vue';\nimport BlockVersionsView from '@/views/BlockVersionsView.vue';\nimport UserAdministrationView from '@/views/UserAdministration.vue';\nimport RouteAdministrationView from '@/views/RouteAdministration.vue';\nimport CategoryAdministrationView from '@/views/CategoryAdministration.vue';\n\nimport ApiConsoleView from '@/views/ApiConsoleView.vue';\nimport ApiMAnalyticsView from '@/views/ApiMAnalyticsView.vue';\nimport ViewCountAnalyticsview from '@/views/ViewCountAnalyticsview.vue';\nimport ContentAnalyticsView from '@/views/ContentAnalyticsView.vue';\nimport OrganizationAdministrationView from '@/views/OrganizationAdministrationView.vue';\nimport { getRoute, getRouteItems } from '@/utilities/routeUtils';\nimport type { Guid, localeValue, RouteCustomOptions } from '@/api/types';\nimport TokenReceiver from '@/views/TokenReceiver.vue';\nimport { suggestionPageParam } from '@/api/commentoTypes';\nimport AboutRichtextView from '@/views/Documentation/AboutRichtextView.vue';\nimport MarkdownDocumentationView from '@/views/Documentation/MarkdownDocumentationView.vue';\nimport { setSocialPageBasePath } from '@/enums/SocialPageType';\nimport {\n apimproductsRouteId,\n editBlocksRouteId,\n editBlockVersionsRouteId,\n notFoundRouteName,\n socialPageRouteId,\n mySubscriptionsRouteId,\n} from '@/config';\nimport TagsEditorView from '@/views/TagsEditorView.vue';\nimport TagGroupEditorView from '@/views/TagGroupEditorView.vue';\nimport ContactFormView from '@/views/ContactFormView.vue';\nimport BreadCrumbAdminView from '@/views/BreadCrumbAdminView.vue';\n\n// these are dynamically loaded since they otherwise increase the main bundle\n// size a lot\nconst BlockView = () => import('../views/BlockView.vue');\nconst BlockContentEditorView = () =>\n import('@/views/BlockContentEditorView.vue');\n\nconst routes: RouteRecordRaw[] = [\n {\n path: '/social',\n name: 'social',\n meta: { title: 'header.items.social' },\n component: SocialView,\n children: [\n {\n path: 'threads',\n name: 'threads',\n component: SocialThreadView,\n },\n {\n path: '',\n name: 'social_startpage',\n meta: { title: 'header.items.socialStartpage' },\n component: SocialPageView,\n props: true,\n },\n {\n path: 'page/:pageId/:blockId?/:commentId?',\n name: socialPageRouteId,\n component: SocialPageView,\n props: true,\n },\n {\n path: `page/:pageId(${suggestionPageParam})/:discussionId?/:commentId?`,\n name: socialPageRouteId + suggestionPageParam,\n component: SocialPageView,\n props: true,\n },\n ],\n },\n {\n path: '/usermanual',\n meta: { title: 'header.items.usermanual.rich_text' },\n children: [\n {\n path: 'rich_text',\n component: AboutRichtextView,\n },\n {\n path: ':filename',\n component: MarkdownDocumentationView,\n },\n ],\n },\n {\n path: '/social/moderator',\n name: 'social_moderator',\n meta: { title: 'header.items.moderator' },\n component: ModeratorView,\n },\n {\n path: '/admin',\n meta: {\n title: 'admin.blockProduction.title',\n cardTemplateId: 'searchCard',\n },\n children: [\n {\n path: '',\n name: editBlocksRouteId,\n component: AdminView,\n alias: [''],\n },\n {\n path: 'editor_management',\n name: 'editor_management',\n meta: {\n title: 'admin.management.overviewTitle',\n cardTemplateId: 'searchCard',\n },\n component: BlockAdminView,\n },\n {\n path: 'my_documents',\n name: 'owner_management',\n meta: { title: 'admin.management.mydocsTitle' },\n component: MyDocumentsView,\n },\n {\n path: 'block',\n name: 'new_block',\n component: BlockDetailsEditorView,\n },\n {\n path: 'block/:blockId/details',\n name: 'edit_block',\n meta: { title: 'admin.blockProduction.detailsTitle' },\n component: BlockDetailsEditorView,\n },\n {\n path: 'block/:blockId/versions',\n name: editBlockVersionsRouteId,\n meta: { title: 'admin.blockProduction.versionsTitle' },\n component: BlockVersionsView,\n },\n {\n path: 'block/:blockId/versions/:versionId',\n name: 'edit_version',\n component: BlockContentEditorView,\n },\n ],\n },\n {\n path: '/users',\n name: 'userAdmin',\n meta: { title: 'header.items.userAdmin' },\n component: UserAdministrationView,\n },\n {\n path: '/routes',\n name: 'route_edit',\n component: RouteAdministrationView,\n meta: { title: 'routeAdmin.title' },\n },\n {\n path: '/categories',\n name: 'category_edit',\n component: CategoryAdministrationView,\n meta: { title: 'categoryAdmin.title' },\n },\n {\n path: '/tags',\n children: [\n {\n path: 'edit',\n name: 'tags_edit',\n meta: { title: 'tagEditor.title' },\n component: TagsEditorView,\n },\n {\n path: 'tagGroups',\n name: 'tagGroup_edit',\n meta: { title: 'tagEditor.tagGroupTitle' },\n component: TagGroupEditorView,\n },\n ],\n },\n {\n path: '/analytics',\n name: 'analytics',\n meta: { title: 'header.items.analytics' },\n component: AnalyticsView,\n children: [\n {\n path: '',\n meta: { title: 'analytics.siteUsage' },\n name: 'viewCount',\n component: ViewCountAnalyticsview,\n },\n {\n path: 'apim',\n meta: { title: 'analytics.apiM' },\n name: 'apiM',\n component: ApiMAnalyticsView,\n },\n {\n path: 'content',\n meta: { title: 'analytics.siteContent' },\n name: 'siteContent',\n component: ContentAnalyticsView,\n },\n ],\n },\n {\n path: '/profile',\n component: ProfileView,\n children: [\n {\n path: '',\n meta: { title: 'header.items.mypage' },\n name: 'profile',\n component: AccountView,\n },\n {\n path: 'favourites',\n meta: { title: 'profile.favorite' },\n name: 'favourites',\n component: FavouriteView,\n },\n {\n path: 'subscriptions',\n meta: { title: 'profile.subscriptions' },\n name: mySubscriptionsRouteId,\n component: SubscriptionsView,\n },\n ],\n },\n {\n path: '/apimproducts',\n name: apimproductsRouteId,\n component: ApimProductsView,\n meta: { title: 'apimproducts.title' },\n },\n {\n path: '/notifications',\n name: 'notifications',\n component: NotificationsView,\n meta: { title: 'header.items.notifications' },\n },\n {\n path: '/console',\n meta: { title: 'header.items.console' },\n name: 'apiconsole',\n children: [\n {\n path: 'block/:blockId/:selectedOperation',\n meta: { title: 'header.items.console' },\n name: 'console',\n component: ApiConsoleView,\n },\n ],\n },\n {\n path: '/news/:articleId?',\n meta: { title: 'header.items.news' },\n name: 'news',\n component: NewsView,\n },\n {\n path: '/organizations',\n meta: { title: 'header.items.myOrgs' },\n name: 'myorganizations',\n component: MyOrganizationsView,\n },\n {\n path: '/organization/:organizationId',\n meta: { title: 'header.items.org' },\n name: 'organization',\n component: OrganizationAdministrationView,\n },\n {\n path: '/suggestions', // Used by email templates, don't change unless templates are also changed\n meta: { title: 'header.items.suggestions' },\n name: 'suggestion_list',\n component: SuggestionsListView,\n },\n {\n path: '/suggestions/edit/:suggestionId',\n meta: { title: 'header.items.suggestions' },\n name: 'suggestion_edit',\n component: SuggestionEditView,\n },\n {\n path: '/suggestions/add/:type?',\n meta: { title: 'header.items.suggestions' },\n name: 'suggestion_add',\n component: SuggestionEditView,\n },\n {\n path: '/suggestions/:suggestionId',\n name: 'suggestion_details',\n component: SuggestionDetailsView,\n },\n {\n path: '/masterdata',\n children: [\n {\n path: 'edit',\n meta: { title: 'header.items.masterdataEdit' },\n name: 'masterdata_edit',\n component: MasterDataEditorView,\n },\n {\n path: 'breadcrumbs',\n meta: { title: 'header.items.breadcrumbEdit' },\n name: 'breadcrumbs_edit',\n component: BreadCrumbAdminView,\n },\n ],\n },\n {\n path: '/orders/alz',\n children: [\n {\n path: '',\n meta: { title: 'header.items.orders.my_alz_applications' },\n name: 'my_alz_applications',\n component: AlzMySystemsView,\n },\n {\n path: 'application_form/:systemId?',\n meta: { title: 'header.items.orders.alz_order_form' },\n name: 'alz_order_form',\n component: AlzOrderView,\n },\n ],\n },\n {\n path: '/contact',\n children: [\n {\n path: 'kss',\n meta: { title: 'header.items.contact.kss' },\n name: 'kss_contact_form',\n component: ContactFormView,\n },\n ],\n },\n];\nsetStaticRoutes(routes);\n\nexport async function setupRouter() {\n const routeItems = await getRouteItems();\n // Update hardcoded routes\n for (const route of hardcodedStaticRoutes) {\n if (!route.name) continue; // If the route has no name, we should not try to match it against routeItems\n const item = routeItems.find((r) => r.routeBaseName === route.name);\n if (!item) continue;\n\n route.meta = { ...route.meta, ...item.meta, title: item.text };\n route.alias = [route.path]\n .concat(item.aliases ?? [])\n .concat(route.alias ?? []);\n const optionalParam = route.path.match(hasOnlyOptionalParamsRe)?.[1]; // This only captures the last param, if there are routes with multiple we need another solution\n route.fullPath = item.targetPath + route.fullPath;\n item.targetPath = route.fullPath.replace(optionalParam ?? '', '');\n }\n // Add page routes\n routes.push(\n ...routeItems\n .filter((i) => i.routeType == 'page')\n .map((s): RouteRecordRaw[] => [\n getRoute(s, BlockView, { addAliases: true }),\n ])\n .flat(),\n );\n // Add block routes\n routes.push(\n ...routeItems\n .filter((i) => i.isDocsListRoute)\n .map((s) => [\n getRoute(s, BlockView, {\n isListRoute: true,\n meta: { hideSearchBar: false, isDocsListRoute: true },\n }),\n getRoute(s, BlockView, { pathSuffix: '/:blockId' }),\n ])\n .flat(),\n );\n\n router.removeRoute(notFoundRouteName);\n router.addRoute({\n path: '/:pathMatch(.*)*',\n name: notFoundRouteName,\n meta: { title: 'header.items.notFound' },\n component: NotFoundView,\n });\n router.addRoute({\n path: '/token_reply',\n name: 'token',\n meta: { title: 'header.items.token' },\n component: TokenReceiver,\n });\n for (const route of routes) {\n router.addRoute(route);\n }\n setSocialPageBasePath(\n router\n .resolve({ name: socialPageRouteId, params: { pageId: 'marker' } })\n .fullPath.replace('/marker', ''),\n );\n await router.isReady();\n setRouter(router);\n router.replace(router.currentRoute.value.fullPath);\n const finalRoutes = router.getRoutes();\n const missingRoutes = routeItems.filter((i) => {\n if (i.routeType !== 'hardcoded') return false;\n return !finalRoutes.find((r) => r.name === i.routeBaseName);\n });\n if (missingRoutes.length > 0) {\n console.warn(\n 'The following routes points to hardcoded routes that could not be found in the list of final routes',\n missingRoutes,\n );\n }\n}\nconst router = createRouter({\n history: createWebHistory(import.meta.env.BASE_URL),\n routes: [\n {\n path: '/:pathMatch(.*)*',\n name: notFoundRouteName,\n meta: { title: 'Laster...' },\n component: LoadingView,\n },\n ],\n scrollBehavior(_to, _from, savedPosition) {\n if (_to.hash) {\n return {\n el: _to.hash,\n };\n } else if (savedPosition) {\n return savedPosition;\n } else {\n return { top: 0 };\n }\n },\n});\n\nexport default router;\n","import { createApp } from 'vue';\nimport { abilitiesPlugin } from '@casl/vue';\n\nimport App from '@/App.vue';\nimport router, { setupRouter } from '@/router';\nimport {\n addRouterTitleTranslation,\n loadDynamicLocaleMessages,\n loadLocaleMessages,\n setupI18n,\n} from '@/i18n';\n\nimport '@/assets/main.css';\nimport { refreshCurrentUser } from '@/api/auth';\nimport { defineAbilities } from '@/abilities';\nimport { registerLanguagesForHighlight } from '@/utilities/templates';\nimport { DEFAULT_LOCALE, SUPPORTED_LOCALES } from '@/config';\nimport { menuLocaleData } from '@/api/menu';\n\nregisterLanguagesForHighlight();\n\n(async () => {\n console.time('Startup');\n const user = await refreshCurrentUser();\n const abilities = defineAbilities(user.value);\n const i18n = setupI18n();\n\n const app = createApp(App);\n app.use(abilitiesPlugin, abilities);\n app.use(router);\n app.use(i18n);\n addRouterTitleTranslation(router);\n console.timeLog('Startup', 'mounting');\n app.mount('#app');\n\n // Load stuff that might take some time\n // make sure messages for the user's current locale are loaded\n const localePromise = loadLocaleMessages(i18n, DEFAULT_LOCALE);\n // load messages for fallback locales\n const fallbackLocalePromises: Promise<void>[] = SUPPORTED_LOCALES.filter(\n (l) => l != DEFAULT_LOCALE,\n ).map((l) => loadLocaleMessages(i18n, l));\n const routerPromise = setupRouter();\n await Promise.all([localePromise, ...fallbackLocalePromises, routerPromise]);\n console.timeLog('Startup', 'routed around');\n loadDynamicLocaleMessages(menuLocaleData, router);\n})();\n"],"file":"assets/index-DwMwZEin.js"}