@divkitframework/divkit 27.3.0 → 28.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/dist/browser/client-devtool.js +1 -1
- package/dist/browser/client-devtool.js.map +1 -1
- package/dist/browser/client-hydratable.js +1 -1
- package/dist/browser/client-hydratable.js.map +1 -1
- package/dist/browser/client.js +1 -1
- package/dist/browser/client.js.map +1 -1
- package/dist/client-devtool.js +1 -1
- package/dist/client-devtool.js.map +1 -1
- package/dist/client-hydratable.js +1 -1
- package/dist/client-hydratable.js.map +1 -1
- package/dist/client.css +1 -1
- package/dist/client.css.map +1 -1
- package/dist/client.js +1 -1
- package/dist/client.js.map +1 -1
- package/dist/esm/client-devtool.mjs +1 -1
- package/dist/esm/client-devtool.mjs.map +1 -1
- package/dist/esm/client-hydratable.mjs +1 -1
- package/dist/esm/client-hydratable.mjs.map +1 -1
- package/dist/esm/client.mjs +1 -1
- package/dist/esm/client.mjs.map +1 -1
- package/dist/esm/server.mjs +1 -1
- package/dist/esm/server.mjs.map +1 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/package.json +11 -12
- package/typings/client-devtool.d.ts +4 -1
- package/typings/client-hydratable.d.ts +4 -1
- package/typings/client.d.ts +4 -1
- package/typings/common.d.ts +2 -0
package/dist/esm/server.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.mjs","mappings":"AACA,IAAIA,EAAsB,CCA1BA,EAAwB,CAACC,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXF,EAAoBI,EAAEF,EAAYC,KAASH,EAAoBI,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDH,EAAwB,CAACS,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,I,KCAlF,SAASI,IAAS,CAkBlB,SAASC,EAAIC,GACT,OAAOA,GACX,CAIA,SAASC,EAAQC,GACbA,EAAIC,QAAQJ,EAChB,CACA,SAASK,EAAYC,GACjB,MAAwB,mBAAVA,CAClB,CAuBA,SAASC,EAAUC,KAAUC,GACzB,GAAa,MAATD,EACA,OAAOT,EAEX,MAAMW,EAAQF,EAAMD,aAAaE,GACjC,OAAOC,EAAMC,YAAc,IAAMD,EAAMC,cAAgBD,CAC3D,CA6FA,SAASE,EAAgBJ,EAAOK,EAAKC,GAEjC,OADAN,EAAMO,IAAID,GACHD,CACX,CA+wBA,IAmIIG,EACJ,SAASC,EAAsBC,GAC3BF,EAAoBE,CACxB,CACA,SAASC,IACL,IAAKH,EACD,MAAM,IAAII,MAAM,oDACpB,OAAOJ,CACX,CAuCA,SAASK,EAAUpB,GACfkB,IAAwBG,GAAGC,WAAWC,KAAKvB,EAC/C,CAsCA,SAASwB,EAAWrC,EAAKsC,GAErB,OADAP,IAAwBG,GAAGI,QAAQX,IAAI3B,EAAKsC,GACrCA,CACX,CAOA,SAASC,EAAWvC,GAChB,OAAO+B,IAAwBG,GAAGI,QAAQjC,IAAIL,EAClD,C,sCA79Bc,IAAIwC,IAsvBK,IAAIC,IAsQ3B,MAAMC,EAAmB,GAEnBC,EAAoB,GAC1B,IAAIC,EAAmB,GACvB,MAAMC,EAAkB,GAClBC,EAAmCC,QAAQC,UACjD,IAAIC,GAAmB,EAOvB,SAASC,IAEL,OAPKD,IACDA,GAAmB,EACnBH,EAAiBK,KAAKC,IAKnBN,CACX,CACA,SAASO,EAAoBxC,GACzB+B,EAAiBR,KAAKvB,EAC1B,CAsBA,MAAMyC,EAAiB,IAAId,IAC3B,IAAIe,EAAW,EACf,SAASH,IAIL,GAAiB,IAAbG,EACA,OAEJ,MAAMC,EAAkB5B,EACxB,EAAG,CAGC,IACI,KAAO2B,EAAWb,EAAiBe,QAAQ,CACvC,MAAM3B,EAAYY,EAAiBa,GACnCA,IACA1B,EAAsBC,GACtB4B,EAAO5B,EAAUI,GACrB,CACJ,CACA,MAAOyB,GAIH,MAFAjB,EAAiBe,OAAS,EAC1BF,EAAW,EACLI,CACV,CAIA,IAHA9B,EAAsB,MACtBa,EAAiBe,OAAS,EAC1BF,EAAW,EACJZ,EAAkBc,QACrBd,EAAkBiB,KAAlBjB,GAIJ,IAAK,IAAIkB,EAAI,EAAGA,EAAIjB,EAAiBa,OAAQI,GAAK,EAAG,CACjD,MAAMC,EAAWlB,EAAiBiB,GAC7BP,EAAeS,IAAID,KAEpBR,EAAeU,IAAIF,GACnBA,IAER,CACAlB,EAAiBa,OAAS,CAC9B,OAASf,EAAiBe,QAC1B,KAAOZ,EAAgBY,QACnBZ,EAAgBe,KAAhBf,GAEJI,GAAmB,EACnBK,EAAeW,QACfpC,EAAsB2B,EAC1B,CACA,SAASE,EAAOxB,GACZ,GAAoB,OAAhBA,EAAGgC,SAAmB,CACtBhC,EAAGwB,SACH5C,EAAQoB,EAAGiC,eACX,MAAMC,EAAQlC,EAAGkC,MACjBlC,EAAGkC,MAAQ,EAAE,GACblC,EAAGgC,UAAYhC,EAAGgC,SAASG,EAAEnC,EAAGoC,IAAKF,GACrClC,EAAGqC,aAAavD,QAAQqC,EAC5B,CACJ,CAyBiB,IAAIb,IA+Vc,oBAAXgC,OAClBA,OACsB,oBAAfC,WACHA,WACAC,OAiJV,MA+BMC,EAAqB,IAAInC,IAAI,CA9B/B,kBACA,sBACA,QACA,YACA,WACA,UACA,WACA,UACA,QACA,WACA,iBACA,SACA,QACA,QACA,OACA,WACA,QACA,WACA,aACA,OACA,cACA,WACA,WACA,WACA,aAcEoC,EAAmC,gVAGzC,SAASC,EAAOC,EAAMC,GAClB,MAAMC,EAAa9E,OAAO+E,OAAO,CAAC,KAAMH,GACxC,GAAIC,EAAc,CACd,MAAMG,EAAiBH,EAAaI,QAC9BC,EAAgBL,EAAaM,OAC/BH,IACwB,MAApBF,EAAWM,MACXN,EAAWM,MAAQJ,EAGnBF,EAAWM,OAAS,IAAMJ,GAG9BE,IACwB,MAApBJ,EAAWO,MACXP,EAAWO,MAAQC,EAAuBJ,GAG1CJ,EAAWO,MAAQC,EAqBnC,SAA0BC,EAAiBC,GACvC,MAAMC,EAAe,CAAC,EACtB,IAAK,MAAMC,KAAoBH,EAAgBI,MAAM,KAAM,CACvD,MAAMC,EAAcF,EAAiBG,QAAQ,KACvCC,EAAOJ,EAAiBK,MAAM,EAAGH,GAAaI,OAC9CxE,EAAQkE,EAAiBK,MAAMH,EAAc,GAAGI,OACjDF,IAELL,EAAaK,GAAQtE,EACzB,CACA,IAAK,MAAMsE,KAAQN,EAAiB,CAChC,MAAMhE,EAAQgE,EAAgBM,GAC1BtE,EACAiE,EAAaK,GAAQtE,SAGdiE,EAAaK,EAE5B,CACA,OAAOL,CACX,CAzC0DQ,CAAiBnB,EAAWO,MAAOH,IAGzF,CACA,IAAIgB,EAAM,GAeV,OAdAlG,OAAOmG,KAAKrB,GAAYhE,SAAQgF,IAC5B,GAAIpB,EAAiC0B,KAAKN,GACtC,OACJ,MAAMtE,EAAQsD,EAAWgB,IACX,IAAVtE,EACA0E,GAAO,IAAMJ,EACRrB,EAAmBZ,IAAIiC,EAAKO,eAC7B7E,IACA0E,GAAO,IAAMJ,GAEH,MAATtE,IACL0E,GAAO,IAAIJ,MAAStE,KACxB,IAEG0E,CACX,CAsBA,MAAMI,EAAa,QACbC,EAAgB,QAKtB,SAAS,EAAO/E,EAAOgF,GAAU,GAC7B,MAAMN,EAAMO,OAAOjF,GACbkF,EAAUF,EAAUF,EAAaC,EACvCG,EAAQC,UAAY,EACpB,IAAIC,EAAU,GACVC,EAAO,EACX,KAAOH,EAAQN,KAAKF,IAAM,CACtB,MAAMvC,EAAI+C,EAAQC,UAAY,EACxBG,EAAKZ,EAAIvC,GACfiD,GAAWV,EAAIa,UAAUF,EAAMlD,IAAa,MAAPmD,EAAa,QAAkB,MAAPA,EAAa,SAAW,QACrFD,EAAOlD,EAAI,CACf,CACA,OAAOiD,EAAUV,EAAIa,UAAUF,EACnC,CACA,SAASG,EAAuBxF,GAG5B,MADuC,iBAAVA,GAAuBA,GAA0B,iBAAVA,EAC7C,EAAOA,GAAO,GAAQA,CACjD,CACA,SAASyF,EAAc7G,GACnB,MAAM8G,EAAS,CAAC,EAChB,IAAK,MAAMpH,KAAOM,EACd8G,EAAOpH,GAAOkH,EAAuB5G,EAAIN,IAE7C,OAAOoH,CACX,CACA,SAASC,EAAKC,EAAOzG,GACjB,IAAIuF,EAAM,GACV,IAAK,IAAIvC,EAAI,EAAGA,EAAIyD,EAAM7D,OAAQI,GAAK,EACnCuC,GAAOvF,EAAGyG,EAAMzD,GAAIA,GAExB,OAAOuC,CACX,CACA,MAAMmB,EAAoB,CACtBC,SAAU,IAAM,IAEpB,SAASC,EAAmB3F,EAAWkE,GACnC,IAAKlE,IAAcA,EAAU0F,SAGzB,KAFa,qBAATxB,IACAA,GAAQ,eACN,IAAIhE,MAAM,IAAIgE,sMAAyMA,OAEjO,OAAOlE,CACX,CAMA,IAAIK,EA+KAuF,EA9KJ,SAASC,EAAqB9G,GAC1B,SAAS2G,EAASJ,EAAQQ,EAAOC,EAAUC,EAAOxF,GAC9C,MAAMyF,EAAmBnG,EAUzBC,EAAsB,CAAEK,GATb,CACPC,aACAG,QAAS,IAAIG,IAAIH,IAAYyF,EAAmBA,EAAiB7F,GAAGI,QAAU,KAE9E0F,SAAU,GACV7D,cAAe,GACfI,aAAc,GACdlD,UAn7DDnB,OAAO+H,OAAO,SAs7DjB,MAAMC,EAAOrH,EAAGuG,EAAQQ,EAAOC,EAAUC,GAEzC,OADAjG,EAAsBkG,GACfG,CACX,CACA,MAAO,CACHC,OAAQ,CAACP,EAAQ,CAAC,GAAKQ,UAAU,CAAC,EAAG9F,UAAU,IAAIG,KAAU,CAAC,KAC1DN,EAAa,GACb,MAAMiF,EAAS,CAAEiB,MAAO,GAAIC,KAAM,GAAIC,IAAK,IAAI/F,KACzC0F,EAAOV,EAASJ,EAAQQ,EAAO,CAAC,EAAGQ,EAAS9F,GAElD,OADAxB,EAAQqB,GACD,CACH+F,OACAK,IAAK,CACDC,KAAMC,MAAMC,KAAKtB,EAAOmB,KAAKI,KAAIJ,GAAOA,EAAIC,OAAMI,KAAK,MACvDD,IAAK,MAETL,KAAMlB,EAAOiB,MAAQjB,EAAOkB,KAC/B,EAELd,WAER,CACA,SAASqB,EAAc7C,EAAMtE,EAAOoH,GAChC,OAAa,MAATpH,GAAkBoH,IAAYpH,EACvB,GAEJ,IAAIsE,IADS8C,IAAqB,IAAVpH,EAAkB,GAAK,KAAK,EAAOA,GAAO,OAE7E,CAIA,SAAS8D,EAAuBG,GAC5B,OAAOzF,OAAOmG,KAAKV,GACdoD,QAAO/I,GAAO2F,EAAa3F,KAC3B2I,KAAI3I,GAAO,GAAGA,MAAQkH,EAAuBvB,EAAa3F,SAC1D4I,KAAK,IACd,CACA,SAASI,EAAWrD,GAChB,MAAMN,EAASG,EAAuBG,GACtC,OAAON,EAAS,WAAWA,KAAY,EAC3C,CA0H2B,mBAAhB4D,cACPvB,EAAgB,cAAcuB,YAC1BC,cACIC,QACAC,KAAKC,aAAa,CAAEC,KAAM,QAC9B,CACAC,oBACI,MAAM,SAAEvB,GAAaoB,KAAKlH,GAC1BkH,KAAKlH,GAAGsH,cAAgBxB,EAASW,IAAI/H,GAAKmI,OAAO9H,GAEjD,IAAK,MAAMjB,KAAOoJ,KAAKlH,GAAGuH,QAEtBL,KAAKM,YAAYN,KAAKlH,GAAGuH,QAAQzJ,GAEzC,CACA2J,yBAAyBC,EAAMC,EAAWC,GACtCV,KAAKQ,GAAQE,CACjB,CACAC,uBACIjJ,EAAQsI,KAAKlH,GAAGsH,cACpB,CACAQ,YAzGR,SAA2BlI,EAAWmI,GAClC,MAAM/H,EAAKJ,EAAUI,GACD,OAAhBA,EAAGgC,WApwBX,SAAgCnD,GAC5B,MAAMmJ,EAAW,GACXC,EAAU,GAChBvH,EAAiB5B,SAASoJ,IAA0B,IAApBrJ,EAAIgF,QAAQqE,GAAYF,EAAS9H,KAAKgI,GAAKD,EAAQ/H,KAAKgI,KACxFD,EAAQnJ,SAASoJ,GAAMA,MACvBxH,EAAmBsH,CACvB,CA+vBQG,CAAuBnI,EAAGqC,cAC1BzD,EAAQoB,EAAGC,YACXD,EAAGgC,UAAYhC,EAAGgC,SAASoG,EAAEL,GAG7B/H,EAAGC,WAAaD,EAAGgC,SAAW,KAC9BhC,EAAGoC,IAAM,GAEjB,EA+FYiG,CAAkBnB,KAAM,GACxBA,KAAKY,SAAWrJ,CACpB,CACA6J,IAAIC,EAAM3G,GAEN,IAAK7C,EAAY6C,GACb,OAAOnD,EAEX,MAAMU,EAAa+H,KAAKlH,GAAGb,UAAUoJ,KAAUrB,KAAKlH,GAAGb,UAAUoJ,GAAQ,IAEzE,OADApJ,EAAUe,KAAK0B,GACR,KACH,MAAM4G,EAAQrJ,EAAU0E,QAAQjC,IACjB,IAAX4G,GACArJ,EAAUsJ,OAAOD,EAAO,EAAE,CAEtC,CACAE,KAAKC,GAxmEb,IAAkBvK,EAymEF8I,KAAK0B,QAzmEHxK,EAymEsBuK,EAxmED,IAA5B3K,OAAOmG,KAAK/F,GAAKmD,UAymEZ2F,KAAKlH,GAAG6I,YAAa,EACrB3B,KAAK0B,MAAMD,GACXzB,KAAKlH,GAAG6I,YAAa,EAE7B,ICvpER,MAAMC,EAAmB,GAgBzB,SAASC,EAASvJ,EAAOwJ,EAAQvK,GAC7B,IAAIwK,EACJ,MAAMC,EAAc,IAAI5I,IACxB,SAASb,EAAI0J,GACT,GDOmBC,ECPOD,IDOVE,ECPG7J,IDQX6J,EAAID,GAAKA,EAAIC,IAAMD,GAAOC,GAAkB,iBAANA,GAAgC,mBAANA,KCPpE7J,EAAQ2J,EACJF,GAAM,CACN,MAAMK,GAAaR,EAAiBvH,OACpC,IAAK,MAAMgI,KAAcL,EACrBK,EAAW,KACXT,EAAiB5I,KAAKqJ,EAAY/J,GAEtC,GAAI8J,EAAW,CACX,IAAK,IAAI3H,EAAI,EAAGA,EAAImH,EAAiBvH,OAAQI,GAAK,EAC9CmH,EAAiBnH,GAAG,GAAGmH,EAAiBnH,EAAI,IAEhDmH,EAAiBvH,OAAS,CAC9B,CACJ,CDPZ,IAAwB8H,EAAGD,CCSvB,CAmBA,MAAO,CAAE3J,MAAK+B,OAlBd,SAAgB7C,GACZc,EAAId,EAAGa,GACX,EAgBsBP,UAftB,SAAmBP,EAAK8K,EAAa/K,GACjC,MAAM8K,EAAa,CAAC7K,EAAK8K,GAMzB,OALAN,EAAYpH,IAAIyH,GACS,IAArBL,EAAYO,OACZR,EAAOD,EAAMvJ,IAAQhB,GAEzBC,EAAIc,GACG,KACH0J,EAAYQ,OAAOH,GACM,IAArBL,EAAYO,MAAcR,IAC1BA,IACAA,EAAO,KACX,CAER,EAEJ,CACA,SAASU,EAAQC,EAAQjL,EAAIkL,GACzB,MAAMC,GAAUvD,MAAMwD,QAAQH,GACxBI,EAAeF,EACf,CAACF,GACDA,EACAK,EAAOtL,EAAG4C,OAAS,EACzB,MAxDO,CACHtC,UAAW8J,EAuDCc,GAAgBpK,IAC5B,IAAIyK,GAAU,EACd,MAAMC,EAAS,GACf,IAAIC,EAAU,EACVC,EAAU5L,EACd,MAAM6L,EAAO,KACT,GAAIF,EACA,OAEJC,IACA,MAAMnF,EAASvG,EAAGmL,EAASK,EAAO,GAAKA,EAAQ1K,GAC3CwK,EACAxK,EAAIyF,GAGJmF,EAAUtL,EAAYmG,GAAUA,EAASzG,CAC7C,EAEE8L,EAAgBP,EAAavD,KAAI,CAACvH,EAAOyC,IAAM1C,EAAUC,GAAQM,IACnE2K,EAAOxI,GAAKnC,EACZ4K,KAAa,GAAKzI,GACduI,GACAI,GACJ,IACD,KACCF,GAAY,GAAKzI,CAAE,MAIvB,OAFAuI,GAAU,EACVI,IACO,WACH1L,EAAQ2L,GACRF,IAIAH,GAAU,CACd,CAAC,IA3FiCjL,UA6F1C,CCvGA,QAAwD,eAAxD,EAAuG,eAAvG,EAA2I,eAA3I,EAA4P,eAA5P,EAAwS,eCQ3RuL,EAAWC,OAAO,QCFxB,SAASC,EAAUC,EAAcC,EAGpC,CAAC,GACD,MAAMC,EAAUF,EAQhB,OANAE,EAAQC,MAAQF,EAAOE,OAAS,QAE5BF,EAAOG,aACPF,EAAQE,WAAaH,EAAOG,YAGzBF,CACX,CCnBA,SAAgB,aAAa,eAAe,KAAO,eAAe,iBAAmB,eAAe,mBAAqB,eAAe,kBAAoB,eAAe,gBAAkB,eAAe,mBAAqB,eAAe,mBAAqB,eAAe,qBAAuB,eAAe,YAAc,eAAe,gBAAkB,eAAe,mBAAqB,eAAe,eAAiB,eAAe,qBAAuB,eAAe,YAAc,eAAe,mBAAqB,gBCAphB,IAAgB,MAAQ,eAAe,8BAA8B,eAAe,0BAA0B,eAAe,2BAA2B,eAAe,wBAAwB,eAAe,4BAA4B,eAAe,0BAA0B,eAAe,2BAA2B,eAAe,wBAAwB,eAAe,4BAA4B,eAAe,6BAA6B,eAAe,+BAA+B,eAAe,6BAA6B,eAAe,oBAAsB,eAAe,qBAAuB,eAAe,0BAA0B,eAAe,oBAAoB,eAAe,2BAA2B,eAAe,uBAAuB,eAAe,gCAAgC,eAAe,2BAA2B,eAAe,0BAA0B,eAAe,cAAgB,eAAe,2BAA6B,eAAe,sBAAwB,eAAe,6BAA6B,eAAe,yBAAyB,gBCI7jC,SAASG,GAAU7H,GACtB,IAAKA,EACD,OAGJ,IAAI8H,EAAM,GACV,IAAK,MAAMnN,KAAOqF,EACd,GAAIA,EAAO5E,eAAeT,GAAM,CAC5B,IAAKqF,EAAOrF,IAAwB,IAAhBqF,EAAOrF,GACvB,SAEAmN,IACAA,GAAO,KAEXA,GAAOnN,EAAM,IAAM2G,OAAOtB,EAAOrF,GACrC,CAEJ,OAAOmN,QAAOC,CAClB,CClBO,SAASC,GAAO3L,GACnB,GAAqB,iBAAVA,GAAuC,iBAAVA,IAAuBA,EAC3D,MAAO,IAGX,MAAM4L,EAASC,OAAO7L,GAEtB,OAAI8L,MAAMF,GACC,IAGHG,KAAKC,KAAc,IAATJ,GAAiB,IAAS,IAChD,CAEO,SAASK,GAAgBjM,GAC5B,IAAIyL,EAAME,GAAO3L,GAMjB,MAJY,MAARyL,IACAA,GAAO,MAGJA,CACX,CC3BO,SAASS,GAAQC,EAAaC,GACjC,KAAOD,EAAIpK,OAASqK,GAChBD,EAAM,IAAMA,EAEhB,OAAOA,CACX,CCIO,SAASE,GAAaC,EAA2BC,EAAQ,EAAGC,EAAe,eAG9E,GAAwB,OAFxBF,GAA0B,iBAAVA,GAAsBA,GAAS,IAAIzH,eAEzC4H,OAAO,GACb,OAAOD,EAGX,MAAME,EAAcC,GAAWL,GAC/B,OAAII,GACAA,EAAY7C,GAAK0C,EAczB,SAA6BD,GACzB,OAAgB,MAAZA,EAAMzC,EACE,IAAG,CAACyC,EAAMM,EAAGN,EAAMO,EAAGP,EAAM1C,GAAG3C,KAAI6F,GAChCZ,GAAQH,KAAKgB,MAAMD,GAAIE,SAAS,IAAK,KAC7C9F,KAAK,MAGJ,QAAOoF,EAAMM,KAAKN,EAAMO,KAAKP,EAAM1C,MAAM0C,EAAMzC,EAAI,KAAKoD,QAAQ,KAC5E,CArBeC,CAAoBR,IAGxBF,CACX,CAmBO,SAASG,GAAWL,GACvB,MAAMa,EAEFb,EAAMc,MAAM,6DAEZd,EAAMc,MAAM,iDAEZd,EAAMc,MAAM,gDAEZd,EAAMc,MAAM,sCAGhB,GAAID,EAAY,CAEZ,GAA0B,IAAtBA,EAAWpL,OAAc,CACzB,MAAOsL,EAAGxD,EAAG+C,EAAGC,EAAGjD,GAAKuD,EAClBG,EAAuB,IAAbV,EAAE7K,OAAe6K,EAAIA,EAAIA,EACnCW,EAAyB,IAAbV,EAAE9K,OAAe8K,EAAIA,EAAIA,EACrCW,EAAwB,IAAb5D,EAAE7H,OAAe6H,EAAIA,EAAIA,EACpC6D,EAAyB,IAAb5D,EAAE9H,OAAe8H,EAAIA,EAAIA,EAE3C,MAAO,CACHA,EAAG6D,SAASD,EAAW,IACvBb,EAAGc,SAASJ,EAAS,IACrBT,EAAGa,SAASH,EAAW,IACvB3D,EAAG8D,SAASF,EAAU,IAE9B,CAEA,MAAOH,EAAGT,EAAGC,EAAGjD,GAAKuD,EACfG,EAAuB,IAAbV,EAAE7K,OAAe6K,EAAIA,EAAIA,EACnCW,EAAyB,IAAbV,EAAE9K,OAAe8K,EAAIA,EAAIA,EACrCW,EAAwB,IAAb5D,EAAE7H,OAAe6H,EAAIA,EAAIA,EAE1C,MAAO,CACHC,EAAG,IACH+C,EAAGc,SAASJ,EAAS,IACrBT,EAAGa,SAASH,EAAW,IACvB3D,EAAG8D,SAASF,EAAU,IAE9B,CAEA,OAAO,IACX,CChFO,SAASG,GAAWjJ,GACvB,IAAIkJ,EAAO3I,OAAOP,GAelB,OAbIkJ,EAAKvJ,QAAQ,MAAQ,IACrBuJ,EAAOA,EAAKC,QAAQ,KAAM,UAE1BD,EAAKvJ,QAAQ,MAAQ,IACrBuJ,EAAOA,EAAKC,QAAQ,KAAM,SAE1BD,EAAKvJ,QAAQ,MAAQ,IACrBuJ,EAAOA,EAAKC,QAAQ,KAAM,SAE1BD,EAAKvJ,QAAQ,MAAQ,IACrBuJ,EAAOA,EAAKC,QAAQ,KAAM,WAGvBD,CACX,CCtBO,MAAME,GAASC,QCgBf,SAASC,GAAcC,GAM1B,GAAmB,IAAfA,EAAIlM,QAAgC,UAAhBkM,EAAI,GAAGlF,KAC3B,MAuEG,CACHuD,MAHUD,GApEF4B,EAAI,GAoEmB3B,OAAS,eAIxCrC,KAAM,OACNiE,SAAU,WArEd,MAAMzC,EAAMwC,EACPhH,KAAIkH,GACe,UAAZA,EAAGpF,KAuCnB,SAAeqF,GAOX,MAAM9B,EAAQD,GAAa+B,EAAKD,GAAG7B,OAAS,eAE5C,MAAO,CACHrC,UAAMyB,EACN2C,SAAK3C,EACL4C,MAAQ,6BAA4BhC,KAASA,KAErD,CApDuBiC,CAAM,CACTJ,OAEe,aAAZA,EAAGpF,KAmE1B,SAAkBqF,GAMJ,IAAAI,EACV,IAAKzH,MAAMwD,QAAe,QAARiE,EAACJ,EAAKD,UAAE,IAAAK,OAAA,EAAPA,EAASC,QACxB,OAGJ,MAAMA,EAASL,EAAKD,GAAGM,OAAOpH,OAAOyG,IACrC,OAAKW,EAAO1M,OAIL,CACHkI,UAAMyB,EACN2C,SAAK3C,EACL4C,MACI,oBACC,GAAKzC,OAAOuC,EAAKD,GAAGO,OAAS,IAD9B,OAGAD,EACKxH,KAAIqF,GAASD,GAAaC,KAC1BpF,KAAK,KACV,UAdR,CAgBJ,CA9FuByH,CAAS,CACZR,OAEe,UAAZA,EAAGpF,KA2J1B,SAAeqF,GAMD,IAAAQ,EACV,MAAMN,EAAe,QAAVM,EAAGR,EAAKD,UAAE,IAAAS,OAAA,EAAPA,EAASC,UAEvB,GAAKP,EAIL,MAAO,CACHrE,KAAM6E,GAAUV,EAAKD,GAAGY,OACxBV,IAAKW,GAASZ,EAAKD,IACnBG,MAAO,QAAUX,GAAWW,GAAS,KAE7C,CA5KuBA,CAAM,CACTH,OAEe,oBAAZA,EAAGpF,KA4G1B,SAAgBqF,GAMF,IAAAa,EACV,IAAKlI,MAAMwD,QAAe,QAAR0E,EAACb,EAAKD,UAAE,IAAAc,OAAA,EAAPA,EAASR,QACxB,OAGJ,MAAMA,EAASL,EAAKD,GAAGM,OAAOpH,OAAOyG,IACrC,IAAKW,EAAO1M,OACR,OAGJ,MAAMmN,EAAUd,EAAKD,GAAGgB,OACxB,IAAIlF,EACAiF,GAA8B,iBAAZA,GAAwB,SAAUA,QAA6BxD,IAAlBwD,EAAQlP,QAClD,UAAjBkP,EAAQnG,KACRkB,EAAOgC,GAAgBiD,EAAQlP,OACP,aAAjBkP,EAAQnG,OACfkB,EAAOmF,GAAkBF,EAAQlP,SAOzC,MAAO,CACHiK,UAAMyB,EACN2C,SAAK3C,EACL4C,MAEK,0BAASrE,GAAQ,wBARVoF,GAAkBjB,EAAKD,GAAGmB,aAC1BD,GAAkBjB,EAAKD,GAAGoB,aASlCd,EACKxH,KAAIqF,GAASD,GAAaC,KAC1BpF,KAAK,KACV,IAEZ,CApJuBsI,CAAO,CACVrB,YAFD,IAMV9G,OAAOyG,IACP2B,UACAC,QAAO,SAASC,EAAKC,GAKlB,OAJAD,EAAIrB,MAAM5N,KAAKkP,EAAKtB,OACpBqB,EAAI1F,KAAKvJ,KAAKkP,EAAK3F,MAAQ,QAC3B0F,EAAIzB,SAASxN,KAAKkP,EAAKvB,KAAO,WAEvBsB,CACX,GAAG,CACCrB,MAAO,GACPrE,KAAM,GACNiE,SAAU,KAGlB,MAAO,CACHI,MAAO7C,EAAI6C,MAAMpH,KAAK,KACtB+C,KAAMwB,EAAIxB,KAAK/C,KAAK,KACpBgH,SAAUzC,EAAIyC,SAAShH,KAAK,KAEpC,CAgEA,MAAMkI,GAAoB,CACtBS,eAAgB,iBAChBC,gBAAiB,kBACjBC,aAAc,eACdC,cAAe,iBAGnB,SAASX,GAAkBY,GACvB,GAAIA,GAA4B,iBAAXA,GAAuB,SAAUA,QAA2BvE,IAAjBuE,EAAOjQ,MAAqB,CACxF,GAAoB,UAAhBiQ,EAAOlH,KACP,OAAOkD,GAAgBgE,EAAOjQ,OAC3B,GAAoB,aAAhBiQ,EAAOlH,KACd,OAAiC,IAAvB8C,OAAOoE,EAAOjQ,OAAhB,GAEhB,CAEA,MAAO,KACX,CAiEO,SAAS8O,GAAUC,GACtB,MAAc,QAAVA,EACO,UACU,YAAVA,EACA,OACU,aAAVA,EACA,OAIJ,OACX,CAEO,SAASC,GAASpQ,GAIrB,IAAIsR,EACAC,EAkBJ,OAfID,EADqC,SAArCtR,EAAIwR,6BACG,KACqC,UAArCxR,EAAIwR,6BACJ,OAEA,MAIPD,EADmC,QAAnCvR,EAAIyR,2BACG,KACmC,WAAnCzR,EAAIyR,2BACJ,OAEA,MAGJH,EAAO,IAAMC,CACxB,CC1PO,SAASG,GAAaC,GACzB,MAAMnD,EAAQ,gBAAgBoD,KAAKD,GAEnC,OAAOnD,GAASA,EAAM,IAAM,EAChC,CAEO,SAASqD,GAAgBC,EAAgBC,GAC5C,OAAOA,EAAetO,IAAIqO,EAC9B,C,6+BCJA,SAASE,GAAgBC,EAAuB1E,EAAyB2E,GACrE,MAAmB,iBAAR3E,IAEH0E,GAAgB1E,EAAM,GAAKA,GAAO,MACjC0E,GAAgB1E,GAAO,GAAKA,EAAM,KAE5BA,EAGR2E,CACX,CCZA,SAASpQ,GAAKqQ,EAAgB5E,GACtBA,GACA4E,EAAKrQ,KAAKyL,EAElB,CAEO,SAAS6E,GACZ5Q,EACAyG,EACAoK,GAEA,MAAMxF,EAAgB,GAEtB/K,GAAK+K,EAAK5E,EAAIzG,IAEd,IAAK,MAAM9B,KAAO2S,EACd,GAAIA,EAAKlS,eAAeT,GAAM,CAC1B,MAAM6N,EAAM8E,EAAK3S,GACb6N,GAGAzL,GAAK+K,EAAK5E,EAFM,GAAEzG,KAAa9B,KAAwB,iBAAR6N,EAAoB,IAAGA,IAAQ,KAItF,CAGJ,OAAOV,EAAIvE,KAAK,IACpB,CCIO,MC7BMgK,GAAYjG,OAAO,SCDzB,SAASkG,GAAiBC,GAC7B,OAAOzF,GAAOyF,EAAWC,KAAO,GAC5B,IACA1F,GAAOyF,EAAWE,OAAS,GAC3B,IACA3F,GAAOyF,EAAWG,QAAU,GAC5B,IACA5F,GAAOyF,EAAWI,MAAQ,EAClC,CCXO,SAASC,GAAStF,GACrB,GAAmB,iBAARA,GAAmC,iBAARA,EAClC,OAAO,EAGX,MAAMuF,EAAM7F,OAAOM,GAEnB,OAAQL,MAAM4F,EAClB,CCNO,SAASC,GAAoBxF,GAChC,OAAOsF,GAAStF,IAAQA,GAAO,CACnC,CCAO,SAASyF,GAAmBR,EAAoCN,GACnE,IAAKM,EACD,OAAON,EAGX,MAAMC,EAAO,CACTK,EAAWC,IACXD,EAAWE,MACXF,EAAWG,OACXH,EAAWI,MAGf,IAAK,IAAIrP,EAAI,EAAGA,EAAI4O,EAAKhP,SAAUI,EAC/B,GAAI4O,EAAK5O,KAAOwP,GAAoBZ,EAAK5O,IACrC,OAAO2O,EAIf,OAAOK,GAAiBC,EAC5B,CCvBO,SAASS,GAAyB1F,EAAyB2E,GAC9D,MAAMY,EAAM7F,OAAOM,GACnB,OAAIL,MAAM4F,IAAQA,EAAM,EACbZ,EAEJY,CACX,CCNA,MAAM3S,GAAiBP,OAAOM,UAAUC,eAEjC,SAAS+S,GAAkBjI,EAAMD,GACpC,GAAIpL,OAAOuT,GAAGlI,EAAGD,GACb,OAAO,EAGX,GACiB,iBAANC,GACD,OAANA,GACa,iBAAND,GACD,OAANA,EAEA,OAAOpL,OAAOuT,GAAGlI,EAAGD,GAGxB,MAAMoI,EAAQxT,OAAOmG,KAAKkF,GACpBoI,EAAQzT,OAAOmG,KAAKiF,GAE1B,GAAIoI,EAAMjQ,SAAWkQ,EAAMlQ,OACvB,OAAO,EAGX,IAAK,IAAII,EAAI,EAAGA,EAAI6P,EAAMjQ,OAAQI,IAAK,CACnC,MAAM7D,EAAM0T,EAAM7P,GAElB,IAAKpD,GAAeC,KAAK4K,EAAGtL,KAASwT,GAAYjI,EAAEvL,GAAiBsL,EAAEtL,IAClE,OAAO,CAEf,CAEA,OAAO,CACX,CC9BO,SAAS4T,GAAwBC,EAAWrB,GAC/C,OAAIgB,GAAYK,EAAQrB,GACbA,EAEJqB,CACX,CCLO,SAASC,GACZC,EACAvB,GAEA,MACqB,WAAjBuB,GACiB,SAAjBA,GACiB,gBAAjBA,GACiB,YAAjBA,GACiB,aAAjBA,EAEOA,EAGJvB,CACX,CCjBO,SAASwB,GAAcnG,EAAyB2E,GACnD,MAAMY,EAAM7F,OAAOM,GACnB,OAAIL,MAAM4F,GACCZ,EAEJY,CACX,CCJO,SAASa,GAAiBC,GAC7B,MAAM/G,EAAsB,GAU5B,MARuB,QAAnB+G,EAAUlO,MACTkO,EAAU5M,OAAS,IAAItG,SAAQsQ,IAC5BnE,EAAI/K,QAAQ6R,GAAiB3C,GAAM,IAGvCnE,EAAI/K,KAAK8R,GAGN/G,CACX,CCXO,SAASgH,GACZrB,EACAN,GAEA,IAAKM,GAAoC,iBAAfA,EACtB,OAAON,EAGX,MAAMC,EAAO,CACT,MACA,QACA,SACA,QAGJ,IAAK,IAAI5O,EAAI,EAAGA,EAAI4O,EAAKhP,SAAUI,EAC/B,GAAIiP,EAAWL,EAAK5O,MAAQwP,GAAoBP,EAAWL,EAAK5O,KAC5D,OAAO2O,EAIf,OAAOM,CACX,CCtBO,SAASsB,GAAaC,EAA8BC,EAAgB,EAAGC,EAAW,IACrF,MAAO,CACHF,EAAc,YACdA,EAAc,aACdA,EAAc,gBACdA,EAAc,gBAEb1L,KAAI6F,GAAMnB,IAAQmB,GAAM8F,GAAiBC,EAAW,MACpD3L,KAAK,IACd,CCXO,SAAS4L,KAAmB,CCD5B,MAAMC,GAAa9H,OAAO,U,8BCclB+H,GAAuD7J,G,iBACvD8J,GAAgE9J,G,eAChE+J,GAA8D/J,G,IAC9DgK,EAAM,IAAEhK,G,MACRtF,EAAuB,MAAIsF,G,MAC3BiK,GAAiEjK,G,IACjEkK,EAAoDP,IAAS3J,G,aAC7DmK,EAAmD,MAAInK,G,wBACvDoK,GAA0B,GAAIpK,E,MAEnCqK,EAAU3S,EAAyBmK,GACnCyI,EAAY5S,EAA2BkS,IAE7CpS,EAA2BoS,GAAY,CACnCW,UAASA,IACE3F,QAAQ0F,EAAUC,cAAeV,aAApD,EAAoDA,EAASjR,W,IAQrD4R,EADAC,EAAO,GAKPC,GAAc,E,skBAGV9M,MAAMwD,QAAQyI,KAAYA,aAAtC,EAAsCA,EAASjR,Q,QAC1BI,EAAI,EAAGA,EAAI6Q,EAAQjR,SAAUI,EAAG,C,MAC/BoO,EAAMyC,EAAQ7Q,GAAGoO,I,GAEnBA,EAAK,CACLqD,EAAOrD,EACPoD,EAASX,EAAQ7Q,GAAGwR,aAAUjI,E,cAMtC3E,MAAMwD,QAAQyI,KAAYA,aAAtC,EAAsCA,EAASjR,SAAU0R,EAAUC,cACvDE,EAAO,GACPJ,EAAQM,SAAS5I,EAAU,IAAI5K,MAAM,mEAAoE,CACrGgL,MAAO,OACPC,WAAY,CACRyH,eAKZa,EAAc9F,QAAQuF,GAClBM,IAASnD,GAAgBH,GAAasD,GAAOJ,EAAQO,wBACrDH,EAAO,GACPC,GAAc,IACND,GAAQ7M,MAAMwD,QAAQyI,KAAYA,aAAtD,EAAsDA,EAASjR,UACnD8R,GAAc,EACdL,EAAQM,SAAS5I,EAAU,IAAI5K,MAAM,wEAAyE,CAC1GgL,MAAO,OACPC,WAAY,CACRyH,eAyGfY,EAAI,S,+CAMOT,GAAG,OAAAa,EAAGT,EAA0BU,EAA0BA,GAAwC,SAAGf,SAAAA,EAAgBnR,OAASkS,EAAwC,IAAE,I,EAW5Kb,IAAK,sD,YAQDD,GAAG,GAAAa,EAAEH,EAAc,IAAIN,EAA0BU,EAA0BA,KAA4CA,IAA+B,IAAE,SAAGf,SAAAA,EAAgBnR,OAASkS,EAAwC,IAAE,I,qBAEhOJ,EAAc,SAAW,O,YACrBA,EAAc,EAAI,O,EAWxBT,IAAK,8CC1NjB,GAAkH,eCC3G,SAASc,GAAiB/H,GAC7B,OAAOsF,GAAStF,IAAQA,EAAM,CAClC,CCEO,SAASgI,GAAaC,EAAiCN,GAC1D,OAAOM,EAAQnN,KAAII,IACf,GAAqB,UAAjBA,aAAM,EAANA,EAAQ0B,OACR,GAAImL,GAAiB7M,EAAO8H,QACxB,MAAQ,QAAOlD,GAAgB5E,EAAO8H,OAAS,WAGnD2E,EAAS5I,EAAU,IAAI5K,MAAM,kBAAmB,CAC5CgL,MAAO,OACPC,WAAY,CACRlE,OAAQA,aAAM,EAANA,EAAQ0B,QAG5B,IACD1B,OAAO0G,SAAS7G,KAAK,IAC5B,C,0CCRemN,EAAU,IAAAlL,G,OACVgG,EAAS,IAAEhG,E,MAEhBqK,EAAU3S,EAAyBmK,G,6HAEtCrH,EAAS0Q,EAAWpN,KAAIkH,I,MACjBmG,EAAG,GACH1V,EAAG,CAILiF,MAAOyQ,G,GAGK,qBAAZnG,EAAGpF,MAA+BoF,EAAGoG,OACrCD,EAAI,gBAAkB,QAAQnG,EAAGU,eAAeV,EAAGoG,OAAOlD,KAAO,KAAKlD,EAAGoG,OAAOjD,OAAS,KAAKnD,EAAGoG,OAAOhD,QAAU,KAAKpD,EAAGoG,OAAO/C,MAAQ,SACzI8C,EAAI,sBAAwB,W,OAEtB7I,EAAMuC,GAAc,CAACG,IAEX,UAAZA,EAAGpF,OACHuL,EAAI,oBAAsB7I,EAAIa,OAElB,aAAZ6B,EAAGpF,OACHuL,EAAI,oBAAsB7I,EAAI6C,OAElB,UAAZH,EAAGpF,OACHuL,EAAIE,QAAU3I,OAAOsC,EAAG5B,OACxB3N,EAAIiQ,UAAYV,EAAGU,UACnByF,EAAI,cAAgB7I,EAAIxB,KACxBqK,EAAI,mBAAqB7I,EAAIyC,SAEzBnH,MAAMwD,QAAQ4D,EAAGiG,UAAYjG,EAAGiG,QAAQrS,SACxCuS,EAAIjN,OAAS8M,GAAahG,EAAGiG,QAASZ,EAAQM,W,QAKnDlV,CAAG,I,kBHlDiB,gBG6DGuQ,EAAS,gBAAqC,IAAE,KAAA7H,EAAA,iBAC7D6H,OAAMxJ,EAEpBhC,GAAMiM,GACJA,EAAKf,UAAS,eAENe,EAAKf,UAAS,+DAAA1H,EAAA,QAKZN,GAA6B,KAADM,EAAA,QAC5BqE,GAAUoE,EAAK/L,OAAK,wBAEVgD,GAA6B,KAADM,EAAA,QAAUqE,GAAUoE,EAAK/L,OAAK,uB,iOC5E1E4Q,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,G,SA6CFC,GAAI,IAAA5L,G,SACJ6L,IAAyC7L,G,gBACzC8L,IAAgC9L,G,IAChCgK,GAAM,IAAEhK,G,MACRtF,IAAoCsF,G,aACpC+L,GAAY,IAAA/L,G,kBACZgM,IAAoB,GAAKhM,G,eACzBiM,IAAiB,GAAKjM,G,cACtBkM,GAAgB,IAAElM,G,mBAClBmM,GAAwC,MAAInM,G,eAC5CoM,IAAiB,GAAKpM,G,SACtBqM,IAA+CrM,G,aAC/CsM,IAAsEtM,E,MAE3EuM,GAA8B,CAChClE,KAAM,QACNvB,OAAQ,SACRqB,MAAO,OAGLqE,GAA4B,CAC9BtE,IAAK,QACLpB,OAAQ,SACRsB,OAAQ,MACRqE,SAAU,YAGRpC,GAAU3S,EAAyBmK,GACnC6K,GAAWhV,EAA0BqQ,I,IAEvC4E,GACA1C,GACA2C,GAAoC,KAEpCC,GAAU,G,SAkBLC,GAAYC,EAAYtQ,G,IACxBmB,MAAMwD,QAAQiL,MAAcC,G,aAI3BzM,EAAQwM,GAASW,WAAUpB,IAAQA,aAAjD,EAAiDA,EAAMmB,MAAOA,IAChDE,EAAWZ,GAASjR,QAC1B6R,EAASnN,OAAOD,EAAO,KAAOpD,GAAS,IAEvC4P,GAAWY,EAEXX,GAAaW,E,KAkGbC,GACAC,GACAC,GAkGAC,GACAC,GACAC,GAgHAlC,GAgBAH,GACAsC,GACAC,GApUAC,GAAW,GACXC,GAAe,GACfC,IAAY,EACZC,GAAc,EACdC,GAAc,cACdC,GAAe,EACfvE,GAAa,CACb,WAAY,EACZ,YAAa,EACb,eAAgB,EAChB,cAAe,GAEfwE,GAAmB,GAgEnBC,GAAiC,KAQjCC,GAAS,GAOTC,GAAS,GAITC,GAAW,EACXC,GAAgB,EAChBC,GAAkB,EAClBC,IAAY,EACZC,IAAgB,EA4FhBC,GAAU,GAIVC,GAAY,EACZC,GAAiB,EACjBC,GAAmB,EACnBC,IAAa,EACbC,IAAiB,EA0GjB1L,GAAQ,E,MAwCN2L,GAAyBhD,GAAaiD,YAAW,GAElDpD,GAAKqD,qBAAuB,CAAC,eAAgB,qBAC5CC,IAA4E,IAApDH,GAAuB7T,QAAQ,iBAA0B0Q,GAAKmB,GACtFoC,IAAsF,IAAzDJ,GAAuB7T,QAAQ,sBAA+B0Q,GAAKmB,G,IAElGqC,GACAC,GACAC,GAgFAC,GACAC,GACAC,GACAC,GAqHAC,GACAC,GA6JAC,GAjVAhG,GAAO,GACPC,GAAgB,GAChBC,GAAc,GACd+F,GAAY,GACZC,GAAW,GAqDXC,GAAmB,GACnBC,GAA4B,GA6C5BC,IAAqB,EACrBC,GAAyB,UAyEzBC,GAAY,EACZC,GAAY,E,SAkKPC,KACA1E,GAAK2E,QAILC,IACDX,IAAiB,GAGrBxF,GAAQoG,eAAeX,I,UAGlBY,KACA9E,GAAK2E,QAIVV,IAAiB,EACjBxF,GAAQoG,eAAeV,I,CAG3B3Y,GAAU,KACNyV,GAAW1W,SAAQ4W,IACf1C,GAAQsG,mBAAmB5D,EAAG,IAElCF,GAAa,EAAE,S,y4BApwBfA,GAAW1W,SAAQ4W,IACf1C,GAAQsG,mBAAmB5D,EAAG,IAElCF,GAAa,GACTR,IACAA,GAASlW,SAAQsQ,IACTA,EAAKsG,KACLF,GAAWtV,KAAKkP,EAAKsG,IACrB1C,GAAQuG,iBAAiBnK,EAAKsG,GAAI,CAC9BD,iB,IAqBjB+D,EAAYxG,GAAQyG,mBAAmBlF,GAAK2E,O,sBAE5CQ,EAAa1G,GAAQyG,mBAAmBlF,GAAKoF,Q,8BAetCA,EAASnB,KAAkBoB,aAAzC,EAAyCA,EAAYD,QAASC,EAAWD,OAASE,G,IACtEC,EAAc,GACdC,EAAkB,GAClBC,GAAe,EACfC,EAAsB,G,GAEtBN,EAAQ,C,GACJA,EAAOO,WAAY,C,MACbC,EAASR,EAAOQ,OAElBL,EAAe,cADfK,EAEIhP,IAAxB,QAAA+I,GAAA,QAAAD,GAA+BkG,EAAOC,cAAtC,IAAAnG,QAAA,EAAAA,GAA8CoG,SAA9C,IAAAnG,QAAA,EAAAA,GAAiD1U,QAAS,GAAK,IACvC2L,IAAxB,QAAAiJ,GAAA,QAAAD,GAA+BgG,EAAOC,cAAtC,IAAAjG,QAAA,EAAAA,GAA8CmG,SAA9C,IAAAlG,QAAA,EAAAA,GAAiD5U,QAAS,GAAK,IACvC2L,GAAxB,QAAAkJ,GAA+B8F,EAAOI,YAAtC,IAAAlG,GAAAA,GAA8C,GAAK,IAC3BxI,GAAasO,EAAOrO,OAAS,UAArD,QAAAwI,GAAgE6F,EAAOpO,aAAvE,IAAAuI,GAAAA,GAAgF,KAE7B,wD,IAGnCqF,EAAOa,SACPR,GAAe,EACfxD,GAAcnF,GAAyBsI,EAAOa,OAAO3E,MAAOW,IAC5DC,GAAc5K,GAAa8N,EAAOa,OAAO1O,MAAO,EAAG2K,IACnDsD,EAAmBJ,OAAS,GAAGxO,GAAOqL,aAAsBC,MAE5DkD,EAAOc,gBACPtI,GCvJT,SACHA,EACA7B,GAEA,MAAMC,EAAO,CACT4B,EAAc,YACdA,EAAc,aACdA,EAAc,gBACdA,EAAc,gBAGlB,IAAK,IAAIxQ,EAAI,EAAGA,EAAI4O,EAAKhP,SAAUI,EAC/B,GAAI4O,EAAK5O,KAAOwP,GAAoBZ,EAAK5O,IACrC,OAAO2O,EAIf,OAAO6B,CACX,CDqIgCuI,CAA0Bf,EAAOc,eAAgBtI,IACjE4H,EAAmB,iBAAmBD,EAAe,iBAAmB5H,GAAaC,KAC9EwH,EAAOgB,gBACdjE,GAAerF,GAAyBsI,EAAOgB,cAAejE,IAC9DvE,GAAgB,CACZ,WAAYuE,GACZ,YAAaA,GACb,eAAgBA,GAChB,cAAeA,IAEnBqD,EAAmB,iBAAmBD,EAAe,iBAAmB3O,GAAOuL,KAI/EsD,GAAgBxD,KAAgBmD,EAAOc,gBAAkBd,EAAOgB,eAAgB,C,IAC5EhM,EAApB3Q,OAAA+E,OAAA,GAAiDoP,I,CAG7B,WACA,YACA,eACA,eACQrT,SAAQ8b,IAChBjM,EAAOiM,IAAWjM,EAAOiM,IAAW,GAAKpE,GAAc,CAAC,IAG5DyD,EAAsB/H,GAAavD,E,EAG3C0H,GAAc3E,GAAkBoI,EAAgBzD,IAChDC,GAAkB5E,GAAkBqI,EAAoBzD,IACxDC,GAAYyD,EACZrD,GAAmBsD,C,CAGpBY,EAAe7H,GAAQyG,mBAAmBlF,GAAKuG,U,uBAG9ClE,GAAc3E,GAA0B8I,KAAkBnG,GAAkBmG,QAAgB7P,EAAW0L,IAGxGoE,EAAUrK,GEjMV,SAAuBtH,EAAsBD,GAChD,IAAKC,IAAMD,EACP,MAAO,CAAC,EAGZ,IAAKA,EACD,OAAOC,EAGX,IAAKA,EACD,OAAOD,EAGX,MAAM6B,EAAkB,CAAC,EAkBzB,MAhBC,CACG,MACA,QACA,SACA,QACQnM,SAAQmc,IAChB,MAAMC,EAAO7R,EAAE4R,GACXC,IACAjQ,EAAIgQ,GAAQC,GAEhB,MAAMC,EAAO/R,EAAE6R,GACXE,IACAlQ,EAAIgQ,IAAShQ,EAAIgQ,IAAS,GAAKE,EACnC,IAGGlQ,CACX,CFiKkCmQ,CAAcxE,GAAa9B,KAEtDuG,EAAcrI,GAAQyG,mBAAmBlF,GAAK+G,S,uBAG7CzE,GAASzF,GAAmBmK,GAAc1E,IAG3C2E,EAAYxI,GAAQyG,mBAAmBlF,GAAKsB,O,sBAC5C4F,EAA0BzI,GAAQyG,mBAAmBlF,GAAKmH,sB,4BAWrDC,EACAC,EACAC,EACAC,EACAC,EAAY,GACZC,EAAc,EACdC,EAAgB,EAChBC,GAAe,EACfC,GAAgB,E,MAEd5T,EAAO6T,aAArB,EAAqBA,EAAY7T,K,GAEZ,UAATA,EACAwO,GAAW1F,GAAyB+K,aAAhD,EAAgDA,EAAY5c,MAAOuX,IACvD6E,EAAWzQ,GAAO4L,S,GAET,iBAATxO,IACCmM,GAAa2H,eAA2B,iBAAT9T,GAA4BA,IAASmM,GAAa4H,6BA6BlFX,EAAY,SACoC,aAA5CjH,GAAa6H,4BAA6C7H,GAAa8H,sBACvEL,GAAgB,EAChBnJ,GAAQM,SAAS5I,EAAU,IAAI5K,MAAM,+DAAgE,CACjGgL,MAAO,YAG8B,aAAzC4J,GAAa+H,wBACbb,EAAW,eAAenQ,KAAiB8P,cAA3D,EAA2DA,GAAcvK,OAAQ,KAAMuK,cAAvF,EAAuFA,GAAczK,QAAS,OAC3C,eAA5C4D,GAAa6H,6BACpBP,EAAcI,GAAc,WAAYA,GAAcA,EAAWM,QAAU,EACvEhI,GAAa8H,sBACbN,GAAe,QAzCsF,C,GAE7GP,EAAY,WAEC,iBAATpT,IAA2B6T,aAD3C,EAC2CA,EAAYO,eAC7B,iBAATpU,IAA4BA,IAASmM,GAAa4H,+BAEnDP,EAAa,sBAAuB,EACY,eAA5CrH,GAAa6H,6BACbN,EAAgB,IAIX,iBAAT1T,EAAyB,C,MACnBsN,EAAQuG,EACVvG,EAAM+G,UAAYzL,GAAoB0E,EAAM+G,SAASpd,SACrDqc,EAAc1Q,GAAO0K,EAAM+G,SAASpd,QAEpCqW,EAAMgH,UAAY1L,GAAoB0E,EAAMgH,SAASrd,SACrDsc,EAAc3Q,GAAO0K,EAAMgH,SAASrd,O,CAI/B,iBAAT+I,GAA4BA,GAC5ByK,GAAQM,SAAS5I,EAAU,IAAI5K,MAAM,iEAAkE,CACnGgL,MAAO,S,IAqBD,WAAd6Q,EACAI,EAAa,eAAiB,c,OAExBe,EAAQC,GAEVhB,EAAa,eADH,SAAVe,GAA8B,WAAVA,GAAgC,UAAVA,EACZ5H,GAA4B4H,GAE5BpI,GAAasI,cAAgB,O,CAI/DrB,IACAI,EAAalG,MAAQ8F,GAGzB9F,GAAQ+F,EACR9F,GAAW+F,EACX9F,GAAW+F,EACX9E,GAAgBgF,EAChB/E,GAAkBgF,EAClBnF,GAAYpF,GAAkBqK,EAAcjF,IAC5CI,GAAYgF,EACZ/E,GAAgBgF,C,CAGjBc,EAAajK,GAAQyG,mBAAmBlF,GAAKyB,Q,sBAC7CkH,EAAwBlK,GAAQyG,mBAAmBlF,GAAK4I,oB,2BAWnDC,EACAC,EACAC,EACAC,EACAC,EAAa,GACbxB,EAAc,EACdC,EAAgB,EAChBwB,GAAgB,EAChBC,GAAiB,E,MAEfnV,EAAOoV,aAArB,EAAqBA,EAAapV,K,GAEtBwM,S,GAGgB,UAATxM,EACP8O,GAAYhG,GAAyBsM,aAAjD,EAAiDA,EAAane,MAAO6X,IACzDgG,EAAYlS,GAAOkM,S,GACH,iBAAT9O,IAA4BmM,GAAa2H,eAAkB3H,GAAakJ,0B,IAiB/ER,EAAa,WAEA,iBAAT7U,IAA2BoV,aAD3C,EAC2CA,EAAahB,cAC/B,iBAATpU,GAA2BmM,GAAakJ,6BAExCJ,EAAc,uBAAwB,EACU,aAA5C9I,GAAa6H,6BACbN,EAAgB,IAIX,iBAAT1T,EAAyB,C,MACnByN,EAAS2H,GACX3H,aAApB,EAAoBA,EAAQ4G,WAAYzL,GAAoB6E,EAAO4G,SAASpd,SACxD8d,EAAenS,GAAO6K,EAAO4G,SAASpd,SAEtCwW,aAApB,EAAoBA,EAAQ6G,WAAY1L,GAAoB6E,EAAO6G,SAASrd,SACxD+d,EAAepS,GAAO6K,EAAO6G,SAASrd,O,CAIjC,iBAAT+I,GACAyK,GAAQM,SAAS5I,EAAU,IAAI5K,MAAM,iEAAkE,CACnGgL,MAAO,S,MAvCfsS,EAAa,SACmC,eAA5C1I,GAAa6H,4BAA+C7H,GAAa8H,sBACzEkB,GAAiB,EACjB1K,GAAQM,SAAS5I,EAAU,IAAI5K,MAAM,+DAAgE,CACjGgL,MAAO,YAG8B,eAAzC4J,GAAa+H,wBACbY,EAAY,eAAe5R,KAAiB8P,cAA5D,EAA4DA,GAAc1K,MAAO,KAAM0K,cAAvF,EAAuFA,GAAcxK,SAAU,OAC5C,aAA5C2D,GAAa6H,6BACpBP,GAAc2B,aAA9B,EAA8BA,EAAajB,SAAU,EACjChI,GAAa8H,sBACbiB,GAAgB,I,GAgCT,WAAfL,EACAI,EAAc,eAAiB,c,OAEzBV,EAAQe,EAEA,QAAVf,GACU,WAAVA,GACU,WAAVA,GACU,aAAVA,GAAoE,eAA5CpI,GAAa6H,2BAErCiB,EAAc,eAAiBrI,GAA0B2H,GAEzDU,EAAc,eAAiB9I,GAAaoJ,cAAgB,O,CAIhEV,IACAI,EAAcxH,OAASoH,GAG3BpH,GAASqH,EACTpH,GAAYqH,EACZpH,GAAYqH,EACZjG,GAAiB0E,EACjBzE,GAAmB0E,EACnB7E,GAAa1F,GAAkB8L,EAAepG,IAC9CI,GAAaiG,EACbhG,GAAiBiG,C,CGnZlB,IAAsB/R,GAAyB2E,GH4iBtBC,G,GAtJzBwN,IAAmBrJ,GAAa2H,oBAAuBnR,EAEvD8S,EAA2BtJ,GAAa2H,iBACrCD,GAAkC,iBAApBA,EAAW7T,OACL,kBAAtBoV,aAAR,EAAQA,EAAapV,MAEd0V,EAAWvJ,GAAauJ,SAAQ,GAC5BvJ,GAAauJ,SAAS3D,EAAI,KAAK5F,GAAauJ,SAAS5D,EAAI,UAAU3F,GAAauJ,SAASC,gBAAgBxJ,GAAauJ,SAASE,eAClIjT,EAEDkT,EAAYpL,GAAQyG,mBAAmBlF,GAAKxI,O,sBGhaGuE,GHoabvE,GAAjCA,IGnaCoF,GADoBxF,GHoaA0S,SGnagBnT,IAARS,IAAqBA,GAAM,EACjD2E,GAEJjF,OAAOM,IHiaVqI,GAAoB,IAAVjI,QAAcb,EAAYa,GAGrCuS,EAAoBtL,GAAQyG,mBAAmBlF,GAAKgK,e,sBAEnD3L,QAAQ1H,EACJsT,IAAuB7J,IAAqB6J,EAAmBC,cAC/D7L,GAAQ,CAAC,EACTA,GAAM,cAAgB4L,EAAmBC,aAI9CC,EAAiB1L,GAAQyG,mBAAmBlF,GAAKV,Y,sBAKhDA,GAAa2E,KAAkBoB,aAAvC,EAAuCA,EAAY/F,YAAa+F,EAAW/F,WAAa8K,EAChFxI,GAAkB,CAAC,EACnBC,IAAgB,EACZ7P,MAAMwD,QAAQ8J,MACduC,GACIvC,GAAW+K,MAAKtS,GAAkB,UAAZA,EAAG/D,MAAgC,qBAAZ+D,EAAG/D,QAChDgF,QAAQoJ,KAEPP,IAAe,C,MACVnL,EAAMuC,GAAcqG,IAC1BsC,GAAgB,oBAAsBlL,EAAIa,MAC1CqK,GAAgB,oBAAsBlL,EAAI6C,MAC1CqI,GAAgB,mBAAqBlL,EAAIxB,KACzC0M,GAAgB,uBAAyBlL,EAAIyC,SAC7CyI,GAAgB,qBAAuB,W,CAe/C4B,QAA0B7M,EACtB2M,IAAyBtD,GAAKsK,eAAiB7L,GAAQ8L,UAAU,iBACjE/G,IAA0B,GAI9BE,QAA6B/M,EAEzB2M,IAAyBtD,GAAKwK,mBAC9B/L,GAAQ8L,UAAU,gBAAkBzJ,GAAS2J,oBAAoBzK,GAAKmB,MAEtEuC,IAA6B,GAIlCgH,EAAajM,GAAQyG,mBAAmBlF,GAAK2K,Q,sBAC7CC,EAAcnM,GAAQyG,mBAAmBlF,GAAK/B,S,sBAC9C4M,EAAuBpM,GAAQyG,mBAAmBlF,GAAK8K,mB,sBACvDC,EAAqBtM,GAAQyG,mBAAmBlF,GAAKgL,iB,2BAOhDC,EAAaC,GAAgBC,GAAe,CAACA,IAAgB,GAC7DC,EAAsBC,GAAyB,GAC/CC,EAAoBC,GAAuB,GAC3CC,GAAkBnG,aAA9B,EAA8BA,EAAYoG,WAAQ,GACtCC,GAAiBrG,aAA7B,EAA6BA,EAAYsG,UAAO,GAEpCxL,GAAaiD,aACb6H,EAAa,GACbG,EAAsB,GACtBE,EAAoB,GACpBE,EAAkB,GAClBE,EAAiB,KAEZ1Z,MAAMwD,QAAQyV,KACfA,EAAa,GACbxM,GAAQM,SAAS5I,EAAU,IAAI5K,MAAM,8BAEpCyG,MAAMwD,QAAQ4V,KACfA,EAAsB,GACtB3M,GAAQM,SAAS5I,EAAU,IAAI5K,MAAM,uCAEpCyG,MAAMwD,QAAQ8V,KACfA,EAAoB,GACpB7M,GAAQM,SAAS5I,EAAU,IAAI5K,MAAM,qCAEpCyG,MAAMwD,QAAQgW,KACfA,EAAkB,GAClB/M,GAAQM,SAAS5I,EAAU,IAAI5K,MAAM,mCAEpCyG,MAAMwD,QAAQkW,KACfA,EAAiB,GACjBjN,GAAQM,SAAS5I,EAAU,IAAI5K,MAAM,oCAIxC0f,EAAWje,QAAUoe,EAAoBpe,QAAUse,EAAkBte,SAAWsT,KACjF2K,EAAa,GACbG,EAAsB,GACtBE,EAAoB,GACpB7M,GAAQM,SAAS5I,EAAU,IAAI5K,MAAM,mCAAmC+U,UAI5ErC,GAAUgN,EACV/M,GAAmBkN,EACnBjN,GAAiBmN,EACjBpH,GAAesH,EACfrH,GAAcuH,C,CAGfE,EAAsBnN,GAAQyG,mBAAmBlF,GAAK6L,kB,sBAQjDC,IACA1H,GAAsB5G,GAAiBsO,GACvCzH,GAA4BD,GAAoBlS,K,SAQ1BuL,G,MACpBsO,EAAaxO,GAAcE,EAAUuO,YAAa,GAClDC,EAAW1O,GAAcE,EAAUyO,UAAW,GAC9CC,EAAQrP,GAAyBW,EAAU2O,YAAa,GACxDC,EAAWvP,GAAyBW,EAAU4O,SAAU,KACxD/O,EAAeD,GAAuBI,EAAUH,aAAc,eAAexE,QAAQ,KAAM,K,OAEzF2E,EAAUlO,M,IACT,O,OACDoU,GAAwBoI,EACxBnI,GAAsBqI,E,WACJI,OAAc/O,KAAgB6O,M,IAC/C,Q,OACDtI,GAAsBkI,EACtBjI,GAAoBmI,E,aACAI,OAAc/O,KAAgB6O,M,IACjD,S,IACA,e,MACM,G,eAEP1N,GAAQM,SAAS5I,EAAU,IAAI5K,MAAM,iCAAkC,CACnEiL,WAAY,CACRiH,UAAWA,EAAUlO,SAGtB,G,IAjC+D+C,OAAO0G,SAAS7G,KAAK,OAuCpGma,EAAiB7N,GAAQyG,mBAAmBlF,GAAKuE,Y,6BAE1CgI,EAAiBhI,GACjBiI,EIllBP,SAA2BjI,EAAgCxI,GAC9D,MACmB,YAAfwI,GACe,cAAfA,GACe,SAAfA,EAEOA,EAGJxI,CACX,CJwkB+B0Q,CAAkBC,EAAiBnI,IAEtDgI,IAAmBC,KACflI,IAAsC,YAAfC,IAA+C,YAAnBiI,EAGnDjI,GAAaiI,E,eASSA,GAC9BjI,GAAaiI,E,MAEPG,EAA+B,YAAnBH,EAA+B,KAAO,MAClDI,EAA2B,OAAdD,EAAqB3M,GAAKsK,cAAgBtK,GAAK6M,eAG9DtJ,IACAqJ,UAEMngB,IAEY,OAAdkgB,IACAlJ,IAA+B,GAEnC3C,GAASgM,wBACLrjB,OADhB+E,OAAA/E,OAAA+E,OAAA,GAEuBwR,IAAI,CACPuE,WAAY,YAEhBrE,GACA0M,EACA7L,GACA4L,GACFjgB,MAAK,KACe,OAAdigB,IACAlJ,IAA+B,E,IAEpCsJ,OAAM7f,I,KACa,OAAdyf,IACAlJ,IAA+B,GAE7BvW,CAAC,I,CA3CP8f,CAAmBR,IAMtBlI,KACDA,IAAqB,E,IAyC1BpI,EAAPzS,OAAA+E,OAAA/E,OAAA+E,OAAA/E,OAAA+E,OAAA,GACW+T,IACAM,IAAU,CACb,iBAAkB2G,EAClB,0BAA2BC,EAC3B,cAAetJ,GAAa8M,WAC5B,wBAAyBzJ,IACrBC,IACAC,GACJa,cACA,uBAAwBvL,QAAQqL,IAChC,cAAelE,GAAa6H,iCAA8BrR,EAC1D,cAAeqC,QAAQmH,GAAauJ,gBAAa/S,EACjD,mBAAoBqC,QAAQiL,IAAkBjE,GAAK2E,SAGpDuI,EAAgBzO,GAAQyG,mBAAmBlF,GAAKgE,W,sBAM3CmJ,QAA8CxW,IAA5BwW,EAAeC,SAAwB,C,MACnDC,EAASF,EAAeG,SAAW,CACrCtZ,KAAM,mBACN/I,MAAO,IAEXuZ,GAAYjH,GAAc8P,EAAOpiB,MAAOuZ,I,MAClC+I,EAAiC,gBAAhBF,EAAOrZ,KAAyB4C,GAAO4N,IAAa,GAAGA,MACxEgJ,EAASL,EAAeM,SAAW,CACrCzZ,KAAM,mBACN/I,MAAO,IAEXwZ,GAAYlH,GAAciQ,EAAOviB,MAAOwZ,IAExCV,GAAkB,GAAGwJ,KADkB,gBAAhBC,EAAOxZ,KAAyB4C,GAAO6N,IAAa,GAAGA,QAE9ET,GAAY,UAAUmJ,EAAeC,c,QAK1CM,EAAa/K,IAAaM,GACzB,OACER,IAAiBM,GAAkB,OAAIpM,EAE1C4I,EAAP9V,OAAA+E,OAAA/E,OAAA+E,OAAA/E,OAAA+E,OAAA/E,OAAA+E,OAAA,GACWM,IACA8S,IACAE,IAAW,CACdR,SACA,YAAaC,GACb,YAAaC,GACbC,UACA,aAAcC,GAEd,aAAcC,KAAa7S,cAAnC,EAAmCA,GAAQ,eACnC,YAAa4a,EACbjD,UACAnE,UACA7C,WACAmN,WAAYvI,GACZ,mBAAoBN,GACpBC,aACA,YAAavB,IAAiBM,SAAkBpM,EAChD,cAAgB+L,IAAmBM,GAAoB,OAAIrM,EAC3D,aAAc+W,EACd,mCAAoC/J,GACpC,iCAAkCC,GAClC,iCAAkCC,GAClC,+BAAgCC,KA6GjC6J,EAAiBlP,GAAQkP,e,qHA+B1B/K,IAAkBM,G,GAAc,kC,aAzIf0K,GACf7M,GAAc6M,EACVtK,IAAyBtD,GAAKsK,eAC9BxJ,GAAS+M,8BACL7N,GACAE,GACAF,GAAKsK,cACLsD,GACFlhB,MAAK,KACH8W,IAA0B,CAAK,IAChCuJ,OAAM7f,I,MACLsW,IAA0B,EACpBtW,CAAC,IAGXoW,IAAyBtD,GAAK6M,gBAC9B/L,GAASgN,+BACL9N,GACAE,GACAF,GAAK6M,eACLe,GAGJtK,IAAyBtD,GAAKwK,mBAC9B1J,GAASiN,kCACL/N,GACAE,GACAF,GAAKwK,kBACLoD,GACFlhB,MAAK,KACHgX,IAA6B,CAAK,IACnCqJ,OAAM7f,I,MACLwW,IAA6B,EACvBxW,CAAC,I,MAIT8gB,EAAoB7N,GAAaiD,YAAW,GAG1CpD,GAAKiO,oBACLjO,GAAKkO,mBAAqB,CAAClO,GAAKkO,mBAGlCC,EAAmBhO,GAAaiD,YAAc,GAAKpD,GAAKoO,mBAG1Dpc,MAAMwD,QAAQwY,IAAsBA,EAAkBhhB,QACtDgF,MAAMwD,QAAQ2Y,IAAqBA,EAAiBnhB,SvBhvBzD,SAA0B4gB,GAAmB,kBAChDI,EAAiB,iBACjBG,EAAgB,QAChB1P,IAMA,MAAM4P,EAQA,GAEFL,GACAA,EAAkBzjB,SAAQwN,IACtBsW,EAAiB1iB,KAAK,CAClBqI,KAAM,aACNC,MAAOoa,EAAiBrhB,OACxB2d,OAAQ5S,EACRuW,SAAS,EACTjX,MAAO,EACPkX,UAAU,GACZ,IAINJ,GACAA,EAAiB5jB,SAAQwN,IACrBsW,EAAiB1iB,KAAK,CAClBqI,KAAM,YACNC,MAAOoa,EAAiBrhB,OACxB2d,OAAQ5S,EACRuW,SAAS,EACTjX,MAAO,EAEPkX,UAAU,GACZ,IAIV,MAAMC,EAIAH,EAAiBnc,KAAI6F,IACvB,MAAM+D,EAA2B,eAAZ/D,EAAG/D,KAClBya,EAAShQ,EAAQiQ,gBAAgB,CACnCC,sBAAuB5W,EAAG4S,OAAOgE,sBACjCC,oBAAqB9S,EAChB/D,EAAG4S,OAA4BiE,oBAC/B7W,EAAG4S,OAA2BkE,mBACnCC,UAAW/W,EAAG4S,OAAOmE,YAGzB,OAAAC,GAAAA,GAAA,GACON,GAAM,IACTE,sBAAuB9S,GACnBC,EACA2S,EAAOE,sBACP7S,EAAe,GAAK,IACvB,IAIHkT,EAAa,IAAI,IAAIjjB,IAAIyiB,EAAWtc,KAAI6F,GAC1CA,EAAG4W,sBAAwB,QAGd,IAAIM,sBAAqBC,IACtCA,EAAQ3kB,SAAQ4kB,IACZd,EAAiB9jB,SAAQ6kB,IACrB,MAAMC,EAAeb,EAAWY,EAAOnb,OACjC6H,EAA+B,eAAhBsT,EAAOpb,KAC5B,IAAIsb,EAEAA,EADuC,IAAvCD,EAAaV,sBACAQ,EAAMI,mBAAqB,MAE3BJ,EAAMI,mBAAsBF,EAAaV,sBAAwB,IAElF,MAAMa,EAAa1T,GACdsT,EAAOd,SAAWgB,EACnBF,EAAOd,UAAYgB,EACjBG,EAAc3T,GACfwT,EACDA,EAEAE,EACKJ,EAAOb,WACRa,EAAOM,MAAQC,YAAW,OACpBP,EAAO/X,MAET,MAAMuY,EAAmC,IAA3BP,EAAaP,UAAkBe,IAAYR,EAAaP,WAAa,IAC7EM,EAAO/X,OAASuY,IAClBR,EAAOb,UAAW,GAGtB,MAAMuB,EAAerR,EAAQiQ,gBAAgBU,EAAOzE,QAC9CoF,EAAYD,EAAatU,IAC/B,GAAIuU,EAAW,CACX,MAAMpU,EAASJ,GAAawU,GACxBpU,IAAWD,GAAgBC,EAAQ8C,EAAQO,yBAC5B,eAAXrD,EACA8C,EAAQuR,WAAWF,GACZA,EAAaG,QACpBxR,EAAQyR,iBAAiBJ,GAGrC,CAEArR,EAAQ0R,QAAQrU,EAAe,UAAY,YAAagU,EAAa,GACtEtB,EAAWY,EAAOnb,OAAO2a,qBAAuB,MAEhDa,GACHL,EAAOM,OACPU,aAAahB,EAAOM,OAG5BN,EAAOd,QAAUgB,CAAU,GAC7B,GACJ,GACH,CACCe,UAAWrB,IAGNsB,QAAQ1C,EAarB,CuBmmBY2C,CAAiB3C,EAAM,CACnBI,oBACAG,mBACA1P,a,MAIF0C,EAAKnB,GAAKmB,GACZA,GACAL,GAAS0P,cAAcrP,G,IAGvBsP,EAA4B,K,GAW5Bze,MAAMwD,QAAQwK,GAAKgB,YAAa,C,MAC1BnT,EAAM4Q,GAAQiS,sBACpB1P,GAAahB,GAAKgB,WAAW9O,KAAI6F,I,YACvB4Y,EAAWlS,GAAQmS,aAAa7Y,EAAGoJ,GAAIpJ,EAAG1B,Q,OAE5Csa,IACpB,QAAAjR,EAAoBiR,EAASE,iBAA7B,IAAAnR,GAAAA,EAAAzV,KAAA0mB,EAAyC/C,EAAM/f,IAGxB8iB,CAAQ,IAChBre,OAAOyG,G,QAIV+X,U,GACQ3P,GACAL,GAASiQ,gBAAgB5P,GAEzBH,GAAY,C,MACNnT,EAAM4Q,GAAQiS,sBACpB1P,GAAWzW,SAAQwN,I,MACvC,QAAA2H,EAAwB3H,EAAGiZ,mBAA3B,IAAAtR,GAAAA,EAAAzV,KAAA8N,EAAyC6V,EAAM/f,EAAI,IAE/BmT,GAAa,I,CAEbyP,GACAA,EAAIK,S,QAyCV1S,GAAG,IAAGnC,GAAa,QAASnK,GAAKoK,G,MAChCzF,GAAU8I,G,mFAKS6E,GAAoBpX,SApTtBgP,GAoTmDoI,GAnTpEpI,GAAKqO,MAAKtS,GAAkB,WAAZA,EAAGxI,S,mBAuTrBsS,GAAa,uCAA8BvC,cAAUlF,OAAUgI,IAAgB,mC,wDAAoEJ,GAAS,kBAAclQ,GAAAA,cAAiB,KAAAM,EAAA,QAASqE,GAAUsL,IAAe,qB,UKr2B1O,IAAgB,aAAa,eAAe,wBAAwB,eAAe,yBAAyB,eAAe,6BAA6B,eAAe,kCAAkC,eAAe,+BAA+B,eAAe,6BAA6B,gBCD5R,SAASkP,GAAsB7Z,EAAyB2E,GAC3D,MAAMY,EAAM7F,OAAOM,GACnB,OAAIL,MAAM4F,IAAQA,GAAO,EACdZ,EAEJY,CACX,CCJO,SAASuU,GAAgBC,GAC5B,GACmB,UAAfA,GACe,WAAfA,GACe,SAAfA,GACe,YAAfA,EAEA,MAAmB,WAAfA,EACO,IACe,SAAfA,EACA,IACe,UAAfA,EACA,IAGJ,GAEf,CChBO,SAASC,GACZD,EACApV,GAEA,OAAOmV,GAAgBC,IAAepV,CAC1C,C,0CCRiB2D,EAAAC,E,SAmBF0R,GAAYjd,G,aACZkd,GAAoBld,G,WACpBmd,EAAU,IAAAnd,G,WACVod,GAAa,GAAKpd,G,QAClB6J,GAAuD7J,E,MAE5DqK,EAAU3S,EAAyBmK,G,IAsCrCkb,EApCAM,EAAa,OAiBb3T,EAAW,GAKX4T,EAAa,KAObC,EAAgB,GAQhBC,EAAa,GAYbra,EAAQ,GASR6N,EAGO,U,gTA3DHyM,EAAgB,QAEhBN,EAAWO,WAAaP,EAAWQ,UACN,WAAzBR,EAAWO,WAAgD,WAAtBP,EAAWQ,OAChDF,EAAgB,OACgB,WAAzBN,EAAWO,UAClBD,EAAgB,YACa,WAAtBN,EAAWQ,SAClBF,EAAgB,WAIxBJ,EAAaI,C,QAKb/T,EAAWmT,GAAsBM,EAAWS,UAAWlU,GAKnDqB,GAAiBoS,EAAWU,eAC5BP,EAAa5a,OAAOya,EAAWU,aAAenU,GAM9ClB,GAAoB2U,EAAWW,kBAC/BP,EAAgB/a,GAAO2a,EAAWW,iBAOtCf,EAAaC,GAAkBG,EAAWY,YAAahB,GAEnDS,EADkC,iBAA3BL,EAAWa,aAA4Bb,EAAWa,YAC5C3T,EAAQ4T,iBAAiBd,EAAWa,YAAa,CAC1DjB,WAAYA,GAAc,MAGjB,GAMjB5Z,EAAQD,GAAaia,EAAWe,WAAY,EAAG/a,GAGhDgb,EAAYhB,EAAWiB,WAAa5b,GAAO2a,EAAWiB,YAAc,GAEpEpZ,EAAKmY,EAAWjS,WAAarG,GAAc,CAACsY,EAAWjS,aAAe,KAOrE8F,GADR,QAAA1F,EAAW6R,EAAWnM,cAAtB,IAAA1F,OAAA,EAAAA,EAA8BuG,SAA2D,gBAAjD3O,GAAaia,EAAWnM,OAAOa,OAAO1O,QAA4B4H,GAAiBoS,EAAWnM,OAAOa,OAAO3E,OACnI,CACL/J,MAAOga,EAAWnM,OAAOa,OAAO1O,MAChC+J,MAAOiQ,EAAWnM,OAAOa,OAAO3E,OAG3B,KAGV3D,EAAesT,GAAtB,QAAAtR,EAA4C4R,EAAWnM,cAAvD,IAAAzF,OAAA,EAAAA,EAA+DyG,cAAe,GAEvElK,EAAO,CACNsV,aACAC,cAGD3iB,EAAQ,CACP,YAAa8H,GAAmB,GAAXkH,EAAiBwT,GACtC,cAAeI,EACf,iBAAkBC,EAClB,cAAeR,EACf,cAAeS,EACfra,QACA+H,YAAYlG,aAApB,EAAoBA,EAAI7B,aAASZ,EAMzB,aAAcyO,EAAS,eAAexO,GAAOwO,EAAO9D,UAAU8D,EAAO7N,aAAUZ,EAC/E,gBAAiBgH,EAAe/G,GAAO+G,QAAgBhH,G,GAI1D4b,EAAS,kBAAczgB,GAAAA,0BAA6B,KAADS,EAAA,cAAqBggB,cAAS,oC,IAC7EtW,GAAa,aAAcnK,GAAKoK,G,gBAE9BzF,GAAU3H,I,qBAEhBuiB,Q,UC9HE,SAASoB,GACZC,EACA3W,GAEA,MACoB,SAAhB2W,GACgB,WAAhBA,GACgB,UAAhBA,EAEOA,EAGJ3W,CACX,CCbO,SAAS4W,GACZD,EACA3W,GAEA,MACoB,QAAhB2W,GACgB,WAAhBA,GACgB,WAAhBA,GACgB,aAAhBA,EAEOA,EAGJ3W,CACX,CChBO,SAAS6W,GAAkBxb,EAAmC2E,GACjE,OAAY,IAAR3E,GAAqB,IAARA,IAAqB,IAARA,IAAyB,IAARA,EACpC4B,QAAQ5B,GAEZ2E,CACX,CCHO,SAAS8W,GAAgBC,EAAgC/W,GAC5D,MACiB,cAAb+W,GACa,gBAAbA,GACa,WAAbA,GACa,YAAbA,GACa,aAAbA,GACa,WAAbA,EAEOA,EAGJ/W,CACX,C,0KCeeiE,GAAI,IAAA5L,G,gBACJ8L,IAAgC9L,G,SAChC6L,IAAyC7L,G,aACzC+L,IAAkD/L,E,MAEvDqK,GAAU3S,EAAyBmK,G,IAErC8c,IAAW,EAEX1B,GAAO,GAyBPvT,GAAW,GAMX4T,GAAa,KACbsB,IAAmB,EAanBC,GAAY,GACZC,GAA6B,GAC7BC,IAAY,EAuBZC,GAA8B,OAM9BC,GAA4B,MAkB5BC,GAAgB,GAgBhBC,GAAiB,GAUjB3Z,GAAW,GAeX4Z,IAAa,EAKbC,GAAU,GAaVC,GAAc,GC9Lf,IAAsBtc,GAAgC2E,GDsYzDvQ,GAAU,KACNkoB,GAAenpB,SAAQ,EAAEgN,EAAO1E,MAC5B4L,GAAQkV,gBAAgBpc,EAAO1E,EAAK,G,6QApWzC+gB,EAAWnV,GAAQyG,mBAAmBlF,GAAKqR,M,sBCpCrBja,GDuCDyc,ECvCiC9X,GDuCtBsV,GAA/BA,GCtCgBnhB,OAAOkH,SAAAA,GAAO,KAEZ2E,GDqCbsV,GAID0B,IAAW,GAHXA,IAAW,EACXtU,GAAQM,SAAS5I,EAAU,IAAI5K,MAAM,yCAK1CuoB,EAAarV,GAAQyG,mBAAmBlF,GAAK+T,Q,oBAC7CC,EAAavV,GAAQyG,mBAAmBlF,GAAKiU,Q,oBAE7CC,EAAqBzV,GAAQyG,mBAAmB,CAC/C8M,UAAWhS,GAAKgS,UAChBE,eAAgBlS,GAAKkS,eACrBC,YAAanS,GAAKmS,YAClBC,YAAapS,GAAKoS,YAClBE,WAAYtS,GAAKsS,WACjBR,UAAW9R,GAAK8R,UAChBC,OAAQ/R,GAAK+R,OACbE,YAAajS,GAAKiS,c,oBAGnBkC,EAAe1V,GAAQyG,mBAAmBlF,GAAKgS,W,sBAG9ClU,GAAWmT,GAAsBmD,EAAetW,IAGjDuW,EAAiB5V,GAAQyG,mBAAmBlF,GAAKiS,a,6BAI1CqC,EAAgBC,EAClBpV,GAAiBmV,IACjB5C,GAAa5a,OAAOwd,GAAiBxW,GACrCkV,IAAmB,GAEnBA,IAAmB,C,CAIxBwB,EAAe/V,GAAQyG,mBAAmBlF,GAAKyU,W,sBAC/CjD,EAA+B,IAAlBkD,E,KAKRC,EAAe,GACfC,EAAgC,GAChCC,GAAe,E,GAEfH,GAAiBA,EAAgB,EAAG,C,IAChCI,EAAQhe,OAAO4d,GAEnBC,EAAeG,EAAQpD,GAAa,KAG/BqD,GAAgBC,IACjBJ,EAAeE,EACfD,GAAe,E,CAIvB5B,GAAY0B,EACZzB,GAAY0B,EACZzB,GAAY0B,C,CAIbI,EAAaxW,GAAQyG,mBAAmBlF,GAAKkV,2B,sBAE5C9B,GAASX,GAA2B0C,EAAa/B,IAIlDgC,EAAa3W,GAAQyG,mBAAmBlF,GAAKqV,yB,sBAE5ChC,GAASV,GAAyB2C,EAAajC,IAGhDkC,GACER,GAEG1D,IAA+B,IAAvB0D,EAAY/nB,QAAgB+nB,EAAY,IACvB,IAAzBA,EAAY,GAAGtgB,OAA6C,iBAAvBsgB,EAAY,GAAGS,KAAoBT,EAAY,GAAGS,KAAOnE,GAAKrkB,OAGxGyoB,EAAgBhX,GAAQyG,mBAAmBlF,GAAKsS,Y,sBAEhDoD,EAAwB1c,QAAQ2c,KAC/B3c,QAAQ+b,GAAeA,EAAY,IAAMA,EAAY,GAAGzC,Y,KAIpDsD,EAAmB,GAEnBlB,GAAiBa,GAAsBG,IAEvCE,EAAmBte,GACdqe,GAAmBZ,GAAeA,EAAY,IAAMA,EAAY,GAAGzC,WACpE,EACAgB,KAIRA,GAAgBsC,C,CAIjBC,EAAqBpX,GAAQyG,mBAAmBlF,GAAK8V,oB,sBAEpDvC,GAAiBjc,GAAaye,EAAqB,EAAGxC,IAGvDyC,EAAevX,GAAQyG,mBAAmBlF,GAAKiW,U,sBAC/CA,EAA6B,SAAlBC,EAA2B,OAAS,GAE/CC,EAAmB1X,GAAQyG,mBAAmBlF,GAAKoW,e,2BAG9CC,EAAc,G,GAEdC,EAAmB,C,MACbld,EAAKH,GAAc,CAACqd,IACtBld,EAAGG,QACH8c,EAAcjd,EAAGG,M,CAIzBK,GAAWyc,C,QAGZE,EAAiB9X,GAAQyG,mBAAmBlF,GAAKwT,Y,oBAGhDA,GAAaZ,GAAkB4D,EAAiBhD,I,SAmBhDnC,EACAoF,EACAC,G,IAEIC,EAAa,G,GAEjBjD,GAAenpB,SAAQ,EAAEgN,EAAO1E,MAC5B4L,GAAQkV,gBAAgBpc,EAAO1E,EAAK,IAExC6gB,GAAiB,KAEX1hB,MAAMwD,QAAQihB,IAAeA,EAAWzpB,QAAUgF,MAAMwD,QAAQkhB,IAAeA,EAAW1pB,QAAUqkB,G,YACtGoC,GAAa,I,MAIXmD,EAAUvF,E,IACZ0C,EAAS0C,GAAc,CAAC,CAEpBhiB,MAAO,EACP+gB,IAAKoB,EAAQ5pB,SAGjBinB,EAASyC,GAAc,GACvBG,EAAY,EACZC,EAAY,GACZ9a,EAAI,GAkBR+X,EAAOxpB,SAAQwsB,SACSpgB,IAAhBogB,EAAMtiB,YAAqCkC,IAAdogB,EAAMvB,MACnCxZ,EAAKrQ,KAAK,CACNsI,MAAO8iB,EAAMtiB,MACNsiB,QAIP/iB,KAAM,aACNgjB,SAAS,IAEbhb,EAAKrQ,KAAK,CACNsI,MAAO8iB,EAAMvB,IACNuB,QAIP/iB,KAAM,a,IAIlBigB,EAAO1pB,SAAQ,CAACgP,EAAOtF,UACC0C,IAAhB4C,EAAM9E,OAAuB8E,EAAMiC,KAAOjC,EAAM9E,OAASmiB,EAAQ5pB,QACjEgP,EAAKrQ,KAAK,CACNsI,MAAOsF,EAAM9E,MACN8E,QAIPvF,KAAM,QACNijB,WAAYhjB,G,IAIxB+H,EAAKkb,MAAK,CAACpiB,EAAGD,IACNC,EAAEb,QAAUY,EAAEZ,MACVa,EAAEd,OAASa,EAAEb,KACE,UAAXc,EAAEd,MACM,EACU,UAAXa,EAAEb,KACF,EAGJc,EAAEd,KAAOa,EAAEb,MAAQ,EAAI,EACZ,UAAXc,EAAEd,MAA+B,UAAXa,EAAEb,KACxBa,EAAEoiB,WAAaniB,EAAEmiB,WACN,eAAXniB,EAAEd,MAAoC,eAAXa,EAAEb,KAC7Bc,EAAEiiB,MAAMvB,IAAM3gB,EAAEkiB,MAAMvB,IACX,eAAX1gB,EAAEd,KACF,EACW,eAAXa,EAAEb,MACD,EAEG,UAAXc,EAAEd,MAA+B,UAAXa,EAAEb,KACjBc,EAAEiiB,MAAMtiB,MAAQI,EAAEkiB,MAAMtiB,MAE5B,EAGJK,EAAEb,MAAQY,EAAEZ,QAEvB+H,EAAKzR,SAAQsQ,I,UACLkc,EAAsB,UAAdlc,EAAK7G,KAAmB,KAAO6G,EAAKkc,MAC5C9iB,EAAQ4G,EAAK5G,M,GAEbA,EAAQ4iB,EAAW,C,IACftF,EAAa9nB,OAAO+E,OAAxC/E,OAAA+E,OAAA,GAAoD2oB,MAA0BL,GAC9DH,EAAchrB,KAAK,CACf0lB,KAAMuF,EAAQpmB,UAAUqmB,EAAW5iB,GACnCsd,aACAtT,QAAuB,aAAdpD,EAAK7G,OAAlC,QAAA0L,EAAyD7E,EAAKkc,aAA9D,IAAArX,OAAA,EAAAA,EAAqEzB,eAAWtH,G,IAIlD,eAAdkE,EAAK7G,MAAyB+iB,EAC9BD,EAAanrB,KAAKorB,Q,GACG,aAAdlc,EAAK7G,KACZ8iB,EAAeA,EAAaxkB,QAAOykB,GAASA,IAAUlc,EAAKkc,a,GACtC,UAAdlc,EAAK7G,KAAkB,C,IAC1BojB,EAAc3tB,OAAO+E,OAAzC/E,OAAA+E,OAAA,GAAqD2oB,MAA0BL,GAC3DO,EAAazgB,GAC2C,IAArDiE,EAAKtB,MAAM+H,OAASzG,EAAKtB,MAAM+H,MAAMrW,OAAU,KAAamsB,EAAYpF,WAAa,KAExFsF,EAAc1gB,GAC4C,IAAvDiE,EAAKtB,MAAMkI,QAAU5G,EAAKtB,MAAMkI,OAAOxW,OAAU,KAAamsB,EAAYpF,WAAa,K,MAExFuF,EAAY,CACd,YAAa3gB,GAAgD,IAAvCE,OAAOsgB,EAAYpF,YAAc,IAAYlU,K,IAGnE0Z,EAAc,G,MACZC,EAAY5c,EAAKtB,MAAMme,WACvB5E,EAAWD,GAAgBhY,EAAKtB,MAAMoe,UAAW,a,GACnDF,EAAW,C,MACLlgB,EAAQD,GAAauD,EAAKtB,MAAMme,YACtCF,EAAc/Y,GAAQmZ,aAAargB,EAAOub,GAC1CY,GAAe/nB,KAAK,CAAC4L,EAAOub,G,CAGhC6D,EAAchrB,KAAK,CACf4N,MAAO,CACHiC,IAAKX,EAAKtB,MAAMiC,IAChB8F,MAAO+V,EACP5V,OAAQ6V,EACRC,eACAC,gB,CAKZX,EAAY5iB,CAAK,IAGjB4iB,EAAYD,EAAQ5pB,QACpB2pB,EAAchrB,KAAK,CACf0lB,KAAMuF,EAAQpmB,UAAUqmB,GACxBtF,WAAY9nB,OAA5B+E,OAAA,GAAiC2oB,KAIzB1D,GAAakD,C,CAGdkB,CAAiBxG,GAAM0D,EAAaC,GAEpC9Y,EAAO,CACNsV,aACA2B,aACAC,UACAC,UACA4C,YAGD6B,EAAY,CACXle,SAAUZ,QAAQY,KAGnB9K,EAAQ,CACP,YAAa8H,GAAOkH,IACpB,cAAe4T,GACf,aAAcuB,GACd,qBAAsBC,GACtB3b,MAAO+b,GACP,mBAAoB1Z,GACpB,4BAA6B2Z,I,kEAgB/BR,G,GAAQ,6B,IAEA9W,GAAa,OAAQnK,EAAKoK,GAAI,KAAIsX,GAAa,GAAKtU,G,0FAM7CjD,GAAa,cAAenK,EAAKgmB,GAAS,KAAA1lB,EAAA,QAAUqE,GAAU3H,GAAK,MACvE2kB,GAAWzmB,OAAM,KACXymB,IAAU,CAAA5Y,EAAA5G,IACR,SAAU4G,EACNA,EAAKwW,KAAI,qC,KAEAxW,EAAKwW,K,aACGvT,G,WACFjD,EAAK0W,W,qBAER1W,EAAKoD,S,YAGhBpD,EAAKtB,MAAK,kBACH9C,GAAUoE,EAAKtB,MAAMge,cAAY,UAAAnlB,EAAA,QAC/BN,EAAAA,YAAe,KAAAM,EAAA,MACjByI,EAAKtB,MAAMiC,IAAG,+DAAApJ,EAAA,QAKZqE,GAAU,CACb6K,MAAOzG,EAAKtB,MAAM+H,MAClBG,OAAQ5G,EAAKtB,MAAMkI,OAEnB,aAAcuR,GAAmB,IAAInY,EAAKtB,MAAMkI,cAAW9K,EAC3D,gBAAiBqc,GAAmB,IAAInY,EAAKtB,MAAMkI,cAAW9K,EAC9DrE,OAAQuI,EAAKtB,MAAMie,YAAc,QAAQ3c,EAAKtB,MAAMie,oBAAiB7gB,I,8EASvEmH,G,WACFqZ,E,6CE3bhC,IAAgB,UAAY,eAAe,eAAiB,eAAe,+BAAiC,eAAe,qBAAuB,eAAe,wBAA0B,eAAe,wBAA0B,eAAe,iCAAiC,eAAe,gCAAgC,eAAe,gCAAgC,eAAe,sBAAwB,eAAe,wBAA0B,eAAe,uBAAyB,eAAe,iCAAiC,eAAe,gCAAgC,eAAe,gCAAgC,eAAe,iCAAmC,eAAe,8BAAgC,gBCoBltB,SAASY,GAAehR,GAC3B,MAAO,CACHzK,IAAKxF,OAAOiQ,aAAO,EAAPA,EAASzK,MAAQ,EAC7BC,MAAOzF,OAAOiQ,aAAO,EAAPA,EAASxK,QAAU,EACjCC,OAAQ1F,OAAOiQ,aAAO,EAAPA,EAASvK,SAAW,EACnCC,KAAM3F,OAAOiQ,aAAO,EAAPA,EAAStK,OAAS,EAEvC,CAEA,SAASub,GACLxY,EACAyY,EACAC,GAEA,MAAMC,IAAWF,aAAS,EAATA,EAAWlR,QAAQtK,OAAQ,KAAMwb,aAAS,EAATA,EAAWlR,QAAQxK,QAAS,GACxE6b,IAAWH,aAAS,EAATA,EAAWlR,QAAQzK,MAAO,KAAM2b,aAAS,EAATA,EAAWlR,QAAQvK,SAAU,GAE1Eyb,SAAAA,EAAWI,gBACPH,EACA1Y,EAAOlD,IAAM2b,EAAUnpB,MAAM2S,OAAS2W,EAEtC5Y,EAAO/C,KAAOwb,EAAUnpB,MAAMwS,MAAQ6W,GAI1CF,SAAAA,EAAWK,cACPJ,EACA1Y,EAAOhD,OAASyb,EAAUnpB,MAAM2S,OAAS2W,EAEzC5Y,EAAOjD,MAAQ0b,EAAUnpB,MAAMwS,MAAQ6W,EAGnD,CAeO,SAASI,GACZ7F,EACAuF,EACAO,GAEA,IAAIC,EACJ,MAAMC,IAAqBT,aAAS,EAATA,EAAWlR,QAAQtK,OAAQ,KAAMwb,aAAS,EAATA,EAAWlR,QAAQxK,QAAS,GAClFoc,IAAqBV,aAAS,EAATA,EAAWlR,QAAQzK,MAAO,KAAM2b,aAAS,EAATA,EAAWlR,QAAQvK,SAAU,GAClFoc,IAAyBJ,aAAa,EAAbA,EAAezR,QAAQtK,OAAQ,KAAM+b,aAAa,EAAbA,EAAezR,QAAQxK,QAAS,GAC9Fsc,IAAyBL,aAAa,EAAbA,EAAezR,QAAQzK,MAAO,KAAMkc,aAAa,EAAbA,EAAezR,QAAQvK,SAAU,GAcpG,OAXIic,EADgB,eAAhB/F,EACO,CACH8F,SAAAA,EAAeM,aAAgBN,EAAc1pB,MAAM2S,OAASoX,EAAyB,EACrFZ,SAAAA,EAAWa,aAAgBb,EAAUnpB,MAAMwS,MAAQoX,EAAqB,GAGrE,CACHT,SAAAA,EAAWa,aAAgBb,EAAUnpB,MAAM2S,OAASkX,EAAqB,EACzEH,SAAAA,EAAeM,aAAgBN,EAAc1pB,MAAMwS,MAAQsX,EAAyB,GAIrFH,EAAKvmB,IAAI0E,IAAQzE,KAAK,IACjC,CCxBO,SAAS4mB,GACZC,EACAC,EACAC,GAEA,KACKF,GAAaA,EAASG,OACtBH,EAASG,MAAMnlB,MAASilB,EAAYG,SAASJ,EAASG,MAAMnlB,OAC3C,mBAAlBglB,EAAShlB,MAET,OAAOklB,EAEX,IAAIhkB,EACJ,GAA4B,sBAAxB8jB,EAASG,MAAMnlB,KA3DWmlB,EA4DMH,EAASG,MAAzCjkB,EA3DG,CACHoM,MAAOxK,QAAuB,QAAhBuiB,EAAAF,EAAMG,kBAAU,IAAAD,OAAA,EAAhBA,EAAkBpuB,QAAS,IACzCwW,OAAQ3K,QAAwB,QAAjByiB,EAAAJ,EAAMK,mBAAW,IAAAD,OAAA,EAAjBA,EAAmBtuB,QAAS,IAC3CmP,OAAQtD,OAAiC,QAA3B2iB,EAAoB,QAApBC,EAACP,EAAM/S,qBAAa,IAAAsT,OAAA,EAAnBA,EAAqBzuB,aAAK,IAAAwuB,EAAAA,EAAI,QAyD1C,IAA4B,WAAxBT,EAASG,MAAMnlB,KAGtB,OAAOklB,EAFPhkB,EAtDR,SAAwBikB,GAA2C,IAAAQ,EAC/D,MAAMzkB,EAA2C,EAApC4B,QAAmB,QAAZ6iB,EAAAR,EAAM/e,cAAM,IAAAuf,OAAA,EAAZA,EAAc1uB,QAAS,IAE3C,MAAO,CACHqW,MAAOpM,EACPuM,OAAQvM,EACRkF,OAAQlF,EAEhB,CA8Ce0kB,CAAeZ,EAASG,MAGnC,CAjEJ,IAAkCA,EAAqDE,EAAAE,EAAAE,EAAAC,EAmEnF,OAjDJ,SACIxkB,EACAikB,EACAU,GAIa,IAAAC,EACb,MAAMva,EAA8B,CAAC,EAE/B0G,EAASkT,EAAMlT,SAAU4T,aAAG,EAAHA,EAAK5T,QAC9B8T,EAAc9T,SAAAA,EAAQ1O,MAAQD,GAAa2O,EAAO1O,OAAS,GAC3DyiB,EAAc/T,SAAAA,EAAQ3E,MAAQxK,OAAmB,QAAbgjB,EAAC7T,EAAO3E,aAAK,IAAAwY,EAAAA,EAAI,GAAK,GAEhEva,EAAI+B,MAAQpM,EAAKoM,MACjB/B,EAAIkC,OAASvM,EAAKuM,OAClBlC,EAAI5B,aAAezI,EAAKkF,OAExB,MAAM6f,EAAUd,EAAMe,mBAAoBL,aAAG,EAAHA,EAAKtiB,OAO/C,OANAgI,EAAID,WAAahI,GAAa2iB,GAE1BF,GAAeC,IACfza,EAAI4a,UAAa,eAAcvjB,GAAOojB,MAAgBD,KAGnDxa,CACX,CAuBW6a,CAAkBllB,EAAM8jB,EAASG,MAAO,CAC3C5hB,MAAOyhB,EAASzhB,MAChB0O,OAAQ+S,EAAS/S,QAEzB,CC7FA,IAAIvP,GAOG,SAAS2jB,KACZ,QAAY1jB,IAARD,GACA,OAAOA,GAGX,MAAM4jB,EAAOC,SAASC,cAAc,OAapC,OAZAF,EAAKxrB,MAAMqK,SAAW,WACtBmhB,EAAKxrB,MAAM2rB,QAAU,OACrBH,EAAKxrB,MAAM4rB,cAAgB,SAC3BJ,EAAKxrB,MAAM6rB,IAAM,MAEjBL,EAAKrnB,YAAYsnB,SAASC,cAAc,QACxCF,EAAKrnB,YAAYsnB,SAASC,cAAc,QAExCD,SAASK,KAAK3nB,YAAYqnB,GAC1B5jB,GAA4B,IAAtB4jB,EAAKO,aACXN,SAASK,KAAKE,YAAYR,GAEnB5jB,EACX,CCzBA,SAAsC,eAAtC,GAA6H,e,SC0EhHqkB,GACLC,EACAC,EACAC,EACAC,EACAC,EACAlD,G,MAEMmD,EAAaJ,EAAelU,QAAQtK,KACpC6e,EAAcL,EAAelU,QAAQxK,MACrCgf,EAAYN,EAAelU,QAAQzK,IACnCkf,EAAeP,EAAelU,QAAQvK,OAExC0b,EACA8C,EAAWrvB,KAAK,CACZ2Q,IAAK4e,EAAK1e,OAAS+e,EACnB9e,KAAM2e,EAAc3e,KAAO4e,EAC3B/Z,MAAOtK,KAAKykB,IAAI,EAAGL,EAAc7e,MAAQ6e,EAAc3e,KAAO4e,EAAaC,GAC3E7Z,OAAQ0Z,EAAK7e,IAAM4e,EAAK1e,OAAS+e,EAAYC,EAC7C1sB,MAAOmsB,EAAensB,QAG1BksB,EAAWrvB,KAAK,CACZ2Q,IAAK8e,EAAc9e,IAAMif,EACzB9e,KAAMye,EAAK3e,MAAQ8e,EACnB/Z,MAAO6Z,EAAK1e,KAAOye,EAAK3e,MAAQ8e,EAAaC,EAC7C7Z,OAAQzK,KAAKykB,IAAI,EAAGL,EAAc5e,OAAS4e,EAAc9e,IAAMif,EAAYC,GAC3E1sB,MAAOmsB,EAAensB,O,UAKzB4sB,GACLV,EACA/C,EACA0D,EACAzD,G,MAEMkD,EAAgB,CAClB9e,IAAKtF,KAAK4kB,OAAOD,EAAMzpB,KAAI6F,GAAMA,EAAGuE,OACpCC,MAAOvF,KAAKykB,OAAOE,EAAMzpB,KAAI6F,GAAMA,EAAGwE,SACtCC,OAAQxF,KAAKykB,OAAOE,EAAMzpB,KAAI6F,GAAMA,EAAGyE,UACvCC,KAAMzF,KAAK4kB,OAAOD,EAAMzpB,KAAI6F,GAAMA,EAAG0E,S,IAGrCwb,aAAZ,EAAYA,EAAWI,gBACX0C,GACIC,EACA/C,E,CAGI3b,IAAK,EACLC,MAAOof,EAAM,GAAGlf,KAAOwb,EAAUnpB,MAAMwS,MAAQ2W,EAAUlR,QAAQtK,KAAOwb,EAAUlR,QAAQxK,MAC1FC,OAAQmf,EAAM,GAAGrf,IAAM2b,EAAUnpB,MAAM2S,OAASwW,EAAUlR,QAAQzK,IAAM2b,EAAUlR,QAAQvK,OAC1FC,KAAM,GAEVkf,EAAM,GACNP,EACAlD,GAGJD,aAAZ,EAAYA,EAAWa,a,QACF1rB,EAAI,EAAGA,EAAIuuB,EAAM3uB,OAAS,IAAKI,EACpC2tB,GACIC,EACA/C,EACA0D,EAAMvuB,GACNuuB,EAAMvuB,EAAI,GACVguB,EACAlD,G,GAIRD,aAAZ,EAAYA,EAAWK,YAAa,C,MAClBuD,EAAUF,EAAMA,EAAM3uB,OAAS,GAErC+tB,GACIC,EACA/C,EACA4D,E,CAGIvf,IAAKuf,EAAQrf,OAASyb,EAAUnpB,MAAM2S,OAASwW,EAAUlR,QAAQzK,IAAM2b,EAAUlR,QAAQvK,OACzFD,MAAO,EACPC,OAAQ,EACRC,KAAMof,EAAQtf,MAAQ0b,EAAUnpB,MAAMwS,MAAQ2W,EAAUlR,QAAQtK,KAAOwb,EAAUlR,QAAQxK,OAE7F6e,EACAlD,E,6CAvJDxF,GAAiCte,G,UACjC6jB,GAAgC7jB,G,cAChCokB,GAAoCpkB,E,MAGzC0nB,ECjBH,SAA0D1xB,EAAO2xB,GACpE,IACIC,EADAC,EAAQ,EAERC,GAAS,EAEb,OAAO,WACH,MAAMC,EAAMC,KAAKD,MAEjB,OAAKF,GAASjlB,KAAKqlB,IAAIF,EAAMF,GDQR,ICPjBA,EAAQE,EAGAH,EAAU5xB,EAAGkyB,MAAM3pB,KAAM4pB,aAGhCL,IACDA,GAAS,EACTvM,YAAW,KACPuM,GAAS,EAETF,EAAU5xB,EAAGkyB,MAAM3pB,KAAM4pB,UAA8B,GDJ1C,KCQdP,EACX,CACJ,CDT6BQ,E,eAwJhBC,E,aAICC,EAAaD,EAAcE,wBAEjC3B,EAAa,G,IAET4B,EAAW,IAAIH,EAAcG,UAC5BtqB,QAAOyF,GAAMA,IAAO6V,IAAS7V,EAAG8kB,UAAUC,SAASC,GAAAA,iBACpDC,EAAI,G,KAEDJ,EAAS5vB,QAAQ,C,MACdiwB,EAAG,GACHC,EAAaN,EAASO,QAC5BF,EAAItxB,KAAKuxB,G,IAELE,EAAOF,EAAWP,wBAClBpgB,EAAQ6gB,EAAK7gB,MACbC,EAAS4gB,EAAK5gB,O,KAEXogB,EAAS5vB,QAAQ,C,IAChBqwB,EAAQT,EAAS,GACjBQ,EAAOC,EAAMV,wB,GAEG,aAAhBjK,G,GACI0K,EAAK9gB,IAAME,E,cAGR4gB,EAAK3gB,KAAOF,E,MAIvBA,EAAQvF,KAAKykB,IAAIlf,EAAO6gB,EAAK7gB,OAC7BC,EAASxF,KAAKykB,IAAIjf,EAAQ4gB,EAAK5gB,QAC/BygB,EAAItxB,KAAK0xB,GACTT,EAASO,O,CAGbH,EAAKrxB,KAAKsxB,E,OAGRK,EAAQ,GACdN,EAAKzyB,SAAQ0yB,I,MACHtB,EAAQsB,EAAI/qB,KAAI6F,GE9M3B,SAAsBwlB,GACzB,MAAMH,EAAOG,EAAKZ,wBACZa,EAAWC,iBAAiBF,GAElC,MAAO,CACHjhB,IAAK8gB,EAAK9gB,IAAMohB,WAAWF,EAASG,WACpCphB,MAAO6gB,EAAK7gB,MAAQmhB,WAAWF,EAASI,aACxCphB,OAAQ4gB,EAAK5gB,OAASkhB,WAAWF,EAASK,cAC1CphB,KAAM2gB,EAAK3gB,KAAOihB,WAAWF,EAASM,YAE9C,CFoMwCC,CAAahmB,KAErCkgB,GACAyD,GAAiBV,EAAY/C,EAA6B0D,EAAuB,aAAhBjJ,G,MAG/DsL,EAAS,CACX1hB,IAAKtF,KAAK4kB,OAAOD,EAAMzpB,KAAI6F,GAAMA,EAAGuE,OACpCC,MAAOvF,KAAKykB,OAAOE,EAAMzpB,KAAI6F,GAAMA,EAAGwE,SACtCC,OAAQxF,KAAKykB,OAAOE,EAAMzpB,KAAI6F,GAAMA,EAAGyE,UACvCC,KAAMzF,KAAK4kB,OAAOD,EAAMzpB,KAAI6F,GAAMA,EAAG0E,SAEzC6gB,EAAS3xB,KAAKqyB,EAAO,IAErBxF,GACAkD,GAAiBV,EAAYxC,EAAe8E,EAA0B,eAAhB5K,GAG1DsI,EAAWzwB,SAAQ0tB,IACfA,EAAU3b,KAAOogB,EAAWpgB,IAC5B2b,EAAUxb,MAAQigB,EAAWjgB,IAAI,G,QA9MrCmR,EADAoN,EAAU,GAGViD,GAAU,EACVC,EAA4C,KAC5CC,EAAwC,K,OAkN5C3yB,GAAU,KACNyyB,GAAU,CAAK,S,uMAtNhBxB,EAAuC,MAKnCwB,GAAWxB,GAAiByB,GAAoBC,KAC/CD,IACAA,EAAiBE,aACjBF,EAAmB,MAEnBC,IACAA,EAAeC,aACfD,EAAiB,MAEjBF,GAAWxB,IACqB,oBAArB4B,mBACPH,EAAmB,IAAIG,kB,SAmBDC,GAC1BA,EAAQjU,MAAKkU,I,YACP1B,EAAlB,QAAAnd,EAA+B6e,EAAO3f,cAAtC,IAAAc,OAAA,EAAAA,EAA8Dmd,U,QAE1CA,aAApB,EAAoBA,EAAWC,SAAShrB,QACvB+qB,aAAjB,EAAiBA,EAAWC,SAAShrB,IAA0B,KAEnDgqB,G,IAzBIoC,EAAiB5N,QAAQmM,EAAe,CACpC+B,WAAW,EACXjwB,YAAY,EACZkwB,eAAe,EACfC,SAAS,KAGa,oBAAnBC,iBACPR,EAAiB,IAAIQ,eAAe7C,GACpCqC,EAAe7N,QAAQmM,MAK5BwB,GAAWxB,GACdX,I,qBA4LqBhqB,GAA0B,KAADM,EAAA,OAAtCwb,EAAI,MAAAhd,EACToqB,GAAUngB,G,iBDxP4D,eC0P9B,KAADtI,EAAA,C,QACzBsI,EAAK4B,S,OACN5B,EAAKyB,Q,SACHzB,EAAKyG,U,UACJzG,EAAK4G,oB,UAGT3P,GAAiC,KAADS,EAAA,C,SACzBsI,EAAK/L,MAAMwS,U,UACVzG,EAAK/L,MAAM2S,W,mBACJ5G,EAAK/L,MAAM6O,iB,WACd9C,EAAK/L,MAAMwQ,W,aACXzE,EAAK/L,MAAMqrB,8C,kHGvQ7Bza,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,E,SA8BFC,EAAI,IAAA5L,G,gBACJ8L,GAAgC9L,G,SAChC6L,GAAyC7L,G,aACzC+L,GAAkD/L,E,MAEvDwqB,GAAa,CACfniB,KAAM,QACNvB,OAAQ,SACRqB,MAAO,MAEP,gBAAiB,QACjB,eAAgB,QAChB,eAAgB,SAGdsiB,GAAa,CACfviB,IAAK,QACLpB,OAAQ,SACRsB,OAAQ,MACRqE,SAAU,WAEV,gBAAiB,QACjB,eAAgB,QAChB,eAAgB,SAGdie,GAAyB,CAAC,oBAAqB,UAE/CrgB,GAAU3S,EAAyBmK,G,IAkHrC8oB,GAhHAC,IAAgB,EAkChBtM,GAAoC,WAMpCuM,GAA0C,MAM1CC,GAA4C,OAU5CjH,GAAmC,KA0BnCO,GAAuC,KA2CvC2G,GAAiB,G,oQA5HlBC,EAAYpf,EAAKnP,OAEXuuB,aAAb,EAAaA,EAAWpyB,SAAWgF,MAAMwD,QAAQ4pB,GAIrCJ,IAAgB,GAHhBA,IAAgB,EAChBvgB,GAAQM,SAAS5I,EAAU,IAAI5K,MAAM,0DAa1CsF,IAAUmuB,IAAiBI,GAAa,IAAIltB,KAAI2I,I,IAC3CwkB,EAAyBxkB,EACzBykB,EAAgCpf,E,QAGhCA,gBAAiBof,EACjBtf,KAAMqf,GACN5gB,GAAQ8gB,gBAAgBF,EAAWC,I,CAGnCtf,KAAMqf,EACNnf,gBAAiBof,EACjBrf,SAAUpF,E,IAKf2kB,EAAkB/gB,GAAQyG,mBAAmBlF,EAAK0S,a,oBAEjDA,GC/FD,SACHA,EACA3W,GAEA,MACoB,aAAhB2W,GACgB,eAAhBA,GACgB,YAAhBA,EAEOA,EAGJ3W,CACX,CDkFsB0jB,CAA4BC,EAAkBhN,IAI7DiN,EAAoBlhB,GAAQyG,mBAAmBlF,EAAK1E,4B,oBAEnD2jB,GErGD,SACHvM,EACA3W,GAEA,MACoB,QAAhB2W,GACgB,WAAhBA,GACgB,WAAhBA,GACgB,aAAhBA,GACgB,kBAAhBA,GACgB,iBAAhBA,GACgB,iBAAhBA,EAEOA,EAGJ3W,CACX,CFoFwB6jB,CAAgCC,EAAoBZ,IAIrEa,EAAoBrhB,GAAQyG,mBAAmBlF,EAAK3E,8B,oBAEnD6jB,GG3GD,SACHxM,EACA3W,GAEA,MACoB,SAAhB2W,GACgB,WAAhBA,GACgB,UAAhBA,GACgB,kBAAhBA,GACgB,iBAAhBA,GACgB,iBAAhBA,EAEOA,EAGJ3W,CACX,CH2FwBgkB,CAAkCC,EAAoBd,IAGvEe,EAAiBxhB,GAAQyG,mBAAmBlF,EAAKkgB,a,oBACjDC,EAA2B,SAApBC,EAEPC,EAAgB5hB,GAAQyG,mBAAmBlF,EAAKiY,W,qBAG3CqI,aAAZ,EAAYA,EAAgBxxB,QAAyB,YAAhB4jB,IAA6B2H,KAAiB,C,MACjEvrB,EAAQiqB,GACVuH,EAAexxB,MACfgwB,IACA7G,cAHhB,EAGgBA,GAAWnpB,QAAS,MAIpBmpB,GADAnpB,EACY,CACRupB,cAAerf,QAAnC,QAAA0G,EAA2C4gB,EAAejI,qBAA1D,IAAA3Y,GAAAA,GACoB4Y,YAAatf,QAAjC,QAAA2G,EAAyC2gB,EAAehI,mBAAxD,IAAA3Y,GAAAA,GACoBmZ,aAAc9f,QAAlC,QAAA4G,EAA0C0gB,EAAexH,oBAAzD,IAAAlZ,GAAAA,GACoB9Q,QACAiY,QAASgR,GAAeuI,EAAevZ,UAG/B,I,MAGhBkR,GAAY,K,GAIjBsI,EAAoB9hB,GAAQyG,mBAAmBlF,EAAKwgB,gB,qBAG/CC,aAAZ,EAAYA,EAAoB3xB,QAAyB,YAAhB4jB,IAA6B2H,KAAiB,C,MACrEvrB,EAAQiqB,GACV0H,EAAmB3xB,MACnBgwB,IACAtG,cAHhB,EAGgBA,GAAe1pB,QAAS,MAIxB0pB,GADA1pB,EACgB,CACZupB,cAAerf,QAAnC,QAAA6G,EAA2C4gB,EAAmBpI,qBAA9D,IAAAxY,GAAAA,GACoByY,YAAatf,QAAjC,QAAA8G,EAAyC2gB,EAAmBnI,mBAA5D,IAAAxY,GAAAA,GACoBgZ,aAAc9f,QAAlC,QAAA+G,EAA0C0gB,EAAmB3H,oBAA7D,IAAA/Y,GAAAA,GACoBjR,QACAiY,QAASgR,GAAe0I,EAAmB1Z,UAG/B,I,MAGpByR,GAAgB,KAIrBjY,EAAsB0X,IAAaO,GPhHnC,SACH9F,EACAuF,EACAO,GAEA,MAAM9hB,EAAkB,CAAC,EAKzB,OAHAshB,GAAqBthB,EAAKuhB,EAA2B,aAAhBvF,GACrCsF,GAAqBthB,EAAK8hB,EAA+B,eAAhB9F,GAElChc,CACX,COsGQgqB,CAAuBhO,GAAauF,GAAWO,IAC/C,KAEDmI,EAAaliB,GAAQyG,mBAAmBlF,EAAK+e,Q,2BAGtC6B,EAAWC,aAAzB,EAAyBA,EAAaC,MAE1B/B,GADA6B,GAAYzhB,GAAiByhB,GACpBA,OAEAjqB,C,CAIdsQ,EAAYxI,GAAQyG,mBAAmBlF,EAAKsB,O,oBAC5CoH,EAAajK,GAAQyG,mBAAmBlF,EAAKyB,Q,yBAIxCsf,EAAoB,IAEpB5gB,aAAZ,EAAYA,EAAciD,eACd2d,EAAqB3d,aAAc,GAEnB,YAAhBsP,KACAqO,EAAqBjZ,eAAgB,GAErB,eAAhB4K,KACAqO,EAAqBtY,aAAe0X,EAAO,QAAUvB,GAAWM,IAE3DH,IACI3V,GACoB,iBAArBA,EAAYpV,OACS,iBAArBoV,EAAYpV,QAA2BmM,aAA3D,EAA2DA,EAAckJ,8BAGzD0X,EAAqB1X,2BAA4B,IAGrC,aAAhBqJ,KACAqO,EAAqBxX,aAAe4W,EAAO,QAAUtB,GAAWI,KAEvC,kBAArBpX,aADhB,EACgBA,EAAY7T,OACS,kBAArB6T,aAAhB,EAAgBA,EAAY7T,QAA2BmM,aAAvD,EAAuDA,EAAc4H,gCAErDgZ,EAAqBhZ,6BAA8B,IAGvC,eAAhB2K,KACAqO,EAAqB/Y,2BAA6B,cAElC,aAAhB0K,KACAqO,EAAqB/Y,2BAA6B,YAElDmY,IACAY,EAAqB9Y,qBAAsB,GAG/CkX,GAAoBhiB,GAAkB4jB,EAAsB5B,G,QAG7DjjB,EAAO,CACNwW,eACAW,OAAQ4L,GACR7L,OAAQ8L,GACRiB,QAGDrxB,EAAQ,CACP6rB,IAAM1C,IAAaO,GACfD,GAAa7F,GAAauF,GAAWO,SACrC7hB,EACJ,eAAgBooB,I,oCAIlBC,G,GAAa,6B,IAEN/iB,GAAa,YAAanK,GAAKoK,G,+FAOpBlD,QAAQ+lB,I,SACdK,E,sBAvLQvuB,GAClBmP,EAARvW,OAAA+E,OAAA/E,OAAA+E,OAAA,GACewR,GAAI,CACPnP,S,wBAwLOA,GAAKgK,G,4CACeskB,G,IAAwBtkB,EAAKmF,K,gBAAuBnF,EAAKqF,gB,SAA2BrF,EAAKoF,U,yBAInHgY,IAAaO,GAAa,2C,yEItQvC,IAAgB,UAAY,eAAe,iCAAmC,eAAe,+BAAiC,eAAe,iBAAmB,gBCCzJ,SAASwI,GACZtO,EACA3W,GAEA,MACoB,aAAhB2W,GACgB,eAAhBA,EAEOA,EAGJ3W,CACX,C,oDCGeiE,EAAI,IAAA5L,G,gBACJ8L,GAAgC9L,G,SAChC6L,GAAyC7L,G,aACzC+L,GAAkD/L,E,MAEvDqK,EAAU3S,EAAyBmK,G,IAGrCyc,EAA2B,aAkB3BpT,EAAa,mB,wQAnBd2hB,EAAqBxiB,EAAQyG,mBAAmBlF,EAAKkhB,iB,oBAGpDxO,EAAcsO,GAA0BG,aAAhD,EAAgDA,EAAqBzO,YAAaA,GAI3E0O,KACCD,aADR,EACQA,EAAqB5pB,SAEa,gBAA9B4pB,EAAoB5pB,OAEqB,IAArC4pB,EAAoB5pB,MAAMvK,QACmB,IAA7Cm0B,EAAoB5pB,MAAMjI,QAAQ,SAQ1CgQ,EAAahI,GAAa6pB,aAAlC,EAAkCA,EAAqB5pB,MAAO,EAAG+H,GAG1DgC,EAAwB,eAAhBoR,EAA+B,OAAS9b,GAAO,GACvD6K,EAAyB,eAAhBiR,EAA+B9b,GAAO,GAAK,OAEpD9H,EAAQ,CACPwQ,aACAgC,QACAG,UAGDvF,EAAO,CACNwW,e,qCAKCzW,GAAa,YAAanK,GAAKoK,G,oEAM/BklB,EAAU,kBACEtvB,GAAAA,iBAAoB,KAAAM,EAAA,QAASqE,GAAU3H,GAAK,mB,ICrEjE,IAAgB,MAAQ,eAAe,yBAAyB,eAAe,0BAA0B,eAAe,aAAe,eAAe,YAAc,eAAe,wBAAwB,eAAe,aAAe,eAAe,aAAe,eAAe,0BAA0B,eAAe,0BAA0B,gBCClV,SAASuyB,GAAcC,GAC1B,OAAIA,EAAKC,WAAW,SACT3oB,GAAW0oB,GAEd,yBAAwB1oB,GAAW0oB,IAC/C,C,qKCkBethB,GAAI,IAAA5L,G,gBACJ8L,IAAgC9L,G,SAChC6L,IAAyC7L,G,aACzC+L,IAAkD/L,E,MAUvDqK,GAAU3S,EAAyBmK,G,IAwFrCwhB,GAjFA+J,GAXkB,EAYlBC,GAd8B,mBAqB9B1O,IAAW,EAiBX2O,GAAkB,GAuBlB1nB,GAAQ,OASRb,GAAW,UAaXwoB,GAAsB,IAatB7O,GAAqB,YACrB0E,GAAc,GAcdoK,GAAwB,GACxBC,GAAqB,EACrBC,GAAiB,EACjBC,GAAoB,EAYpBzvB,GAAS,GACT0vB,GAAiB,GAoDrBx2B,GAAU,KACNiT,GAAQkV,gBAAgB8D,GAAW3E,GAAS,S,oQA5K7CmP,EAAexjB,GAAQyG,mBAAmBlF,GAAKlG,W,sBAE/CooB,EAAazjB,GAAQyG,mBAAmBlF,GAAKmiB,S,sBAC7CC,EAAWC,GAAiBC,EAM3Bd,GAfkB,EAqBbY,EAIDrP,IAAW,GAHXA,IAAW,EACXtU,GAAQM,SAAS5I,EAAU,IAAI5K,MAAM,sCAM1C0b,EAAYxI,GAAQyG,mBAAmBlF,GAAKsB,O,sBAC5CihB,EAAsC,kBAArB1a,aAAxB,EAAwBA,EAAY7T,MAE7B0U,EAAajK,GAAQyG,mBAAmBlF,GAAKyB,Q,sBAC7C+gB,EAAwC,kBAAtBpZ,aAAzB,EAAyBA,EAAapV,MAE/ByuB,EAAchkB,GAAQyG,mBAAmBlF,GAAK0iB,S,sBAQzChB,GALYiB,EAGM,QAAQtB,GAHdsB,OAKM,GAIvBC,EAAuBnkB,GAAQyG,mBAAmBlF,GAAK6iB,mB,sBAGlDpB,GAAmBnqB,GAKMwrB,EALc,EAAGrB,IAO/CsB,EAAYtkB,GAAQyG,mBAAmBlF,GAAKhG,O,sBAI3CA,GAAQD,GAAUipB,IAAehpB,GAGlCipB,EAAexkB,GAAQyG,mBAAmB,CACzC7J,6BAA8B2E,GAAK3E,6BACnCC,2BAA4B0E,GAAK1E,6B,oBAOjCnC,GCxGD,SAA8BtP,EAGlCkS,GACC,MAAMqX,EAASvpB,EAAIwR,6BACbgY,EAASxpB,EAAIyR,2BAEnB,OACI8X,GAAqB,SAAXA,GAAgC,WAAXA,GAAkC,UAAXA,GACtDC,GAAqB,QAAXA,GAA+B,WAAXA,GAAkC,WAAXA,EAE9CtX,EAGJ9B,GAASpQ,EACpB,CDyFmBq5B,CAEGC,EAFuBhqB,IAItCiqB,EAAW3kB,GAAQyG,mBAAmBlF,GAAKgK,e,oBAC3CqZ,GAAMC,aAAb,EAAaA,EAAWpZ,cAAe,GAEhCyW,EAAaliB,GAAQyG,mBAAmBlF,GAAK+e,Q,2BAGtC6B,EAAWC,aAAzB,EAAyBA,EAAaC,MAE1Ba,GADAf,GAAYzhB,GAAiByhB,IACN,IAAM9pB,OAAO8pB,IAAW1oB,QAAQ,GAEjC,G,CAI3BqrB,EAAgB9kB,GAAQyG,mBAAmBlF,GAAK0X,Y,oBAEhD8L,EAAe/kB,GAAQyG,mBAAmBlF,GAAK2X,W,2BAKxC8L,EADMC,EACepsB,GADfosB,QACmC/sB,EACzCgtB,EAAc9Q,GAAgB+Q,EAAe9Q,IAC/C2Q,IAAiBhM,IAAakM,IAAgB7Q,KAC9CrU,GAAQkV,gBAAgB8D,GAAW3E,IACnC0E,GAAciM,EAAehlB,GAAQmZ,aAAa6L,EAAcE,GAAe,GAC/ElM,GAAYgM,EACZ3Q,GAAW6Q,E,IAIhBE,EAA0BplB,GAAQyG,mBAAmBlF,GAAK8jB,sB,oBAMtDC,GAA8D,SAAlCA,EAAyB/vB,KAAiB,C,MACnEyJ,EAAYsmB,EAElBnC,GAAwBvkB,GAAuBI,EAAUH,aAAc,eAAexE,QAAQ,KAAM,KACpGipB,GAAoBjlB,GAAyBW,EAAU4O,SAAU,KACjEyV,GAAiBhlB,GAAyBW,EAAU2O,YAAa,GACjEyV,GAAqB/kB,GAAyBW,EAAUjG,MAAO,E,CAGhEwsB,EAAcvlB,GAAQyG,mBAAmBlF,GAAKX,S,yBAIzC4kB,EAAY,GACZC,EAAc,GACdlyB,MAAMwD,QAAQ2uB,IAAiBA,EAAan3B,SAC5Ci3B,EAAY7kB,GAAa+kB,EAAc1lB,GAAQM,WAE/CklB,IACAC,EAAc,+CAElB5xB,GAAS2xB,EACTjC,GAAiBkC,C,QAGlBhoB,EAAO,CACN6iB,OAAgC,MAAxB4C,GACR,mBAAoBY,EACpB,oBAAqBC,EACrB4B,QAAQ5C,EACR,oBAAqBxoB,QAAQ4oB,MAA0BJ,GAGxD1yB,EAAQ,CAEP,mBAAoB4yB,GACpB,mBAAoBA,QAAkB/qB,EAAY8qB,GAClD,kBAAmBznB,GACnB,YAAagoB,SAAkBrrB,EAC/B,aAAcqD,GACd,kBAAmBb,GACnB7G,OAAQ,CAC6D,GACjEA,IACFA,OAAO0G,SAAS7G,KAAK,KACvB,mCAAoCyvB,SAAyBjrB,EAC7D,iCAAkCirB,GAAwBC,QAAqBlrB,EAC/E,4BAA6BirB,GAAwB,GAAGE,YAAqBnrB,EAC7E,+BAAgCirB,GAAwB,GAAGG,YAAwBprB,G,+DAsBrFoc,G,GAAQ,6B,IAED9W,GAAa,QAASnK,GAAKoK,G,0EAKb,G,gBAGVA,EAAK6iB,OAAM,kBACCjtB,GAAAA,yBAA4B,KAADS,EAAA,C,oBAA0BovB,e,UAEnD7vB,GAAAA,aAAgB,KAAAM,EAAA,MACuBgwB,EAAQ,qCAAAhwB,EAAA,QAG/CqE,GAAU3H,GAAK,KAAAsD,EAAA,MAAAixB,EAAA,KAAAjxB,EAAA,cAETixB,EAAM,KAAO,OAAM,8BAO7BvxB,GAAAA,aAAgB,KAAAM,EAAA,MACuBgwB,EAAQ,qCAAAhwB,EAAA,QAG/CqE,GAAU3H,GAAK,KAAAsD,EAAA,MAAAixB,EAAA,KAAAjxB,EAAA,cAETixB,EAAM,KAAO,OAAM,S,IEzPpD,IAAgB,KAAO,eAAe,iBAAmB,eAAe,mBAAqB,eAAe,kBAAoB,eAAe,gBAAkB,eAAe,mBAAqB,eAAe,mBAAqB,gBCKzO,SAASgB,GAAgBlc,GACrB,OAAOA,EAAS,GAAKA,EAAS,CAClC,CAEA,SAASmc,GAAanc,GAClB,OAAOjY,OAAO8G,KAAKC,KAAc,IAATkR,GAAiB,IAC7C,CAEO,SAASoc,GAAkBC,EAAmBC,EAAoBz3B,GAErE,GAAIw3B,EAAQna,KAAKga,IAAkB,CAC/B,MAAMK,EAAW1tB,KAAKykB,OAAO+I,EAAQlyB,OAAO+xB,IAAiBnyB,KAAIiW,GAAU,EAAIA,KAC/Eqc,EAAUA,EAAQtyB,KAAIiW,GAAUA,EAASuc,GAC7C,CAGA,IAAIC,EAAU,EACVC,EAAc,EAClB,MAAMC,EAAqB,GAE3B,GAL2BL,EAAQM,MAAM9rB,SAKjB,CACpB4rB,EAAcJ,EAAQ7pB,QAAO,CAACC,EAAKC,IACxBD,EAAMC,GACd,GAEH,IAAK,IAAIzN,EAAI,EAAGA,EAAIJ,IAAUI,EAAG,CAC7B,IAAKq3B,EAASr3B,GACV,SAGJ,MAAM23B,EAAgBN,EAASr3B,GAAKo3B,EAAQp3B,GAAMw3B,EAE9CG,EAAeJ,IACfA,EAAUI,EAElB,CACJ,CAEA,IAAK,IAAI33B,EAAI,EAAGA,EAAIJ,IAAUI,EACtBu3B,EACAE,EAASz3B,GACJ,UAASwJ,GAAQ+tB,EAAUH,EAAQp3B,GAAMw3B,MAAgBN,GAAaE,EAAQp3B,SAC5Eo3B,EAAQp3B,GACfy3B,EAASz3B,GAAM,GAAEk3B,GAAaE,EAAQp3B,QAEtCy3B,EAASz3B,GAAK,OAItB,OAAOy3B,EAAS1yB,KAAK,IACzB,C,0ECjCe6N,EAAI,IAAA5L,G,gBACJ8L,GAAgC9L,G,SAChC6L,GAAyC7L,G,aACzC+L,GAAkD/L,E,MAEvDqK,EAAU3S,EAAyBmK,G,IAiDrC+uB,EAmBAC,EAlEAjG,GAAgB,EAYhBkG,EAAc,EA4DdC,EAAa,GACbC,EAAU,GACVC,EAAe,GACfC,EAAa,GACbC,EAAW,EACXC,GAAiB,EAgGjBvG,EAAmC,MAMnCC,EAAqC,Y,4PAlLtCE,EAAYpf,EAAKnP,OAEXuuB,aAAb,EAAaA,EAAWpyB,SAAWgF,MAAMwD,QAAQ4pB,GAIrCJ,GAAgB,GAHhBA,GAAgB,EAChBvgB,EAAQM,SAAS5I,EAAU,IAAI5K,MAAM,qDAQ1Ck6B,EAAkBhnB,EAAQyG,mBAAmBlF,EAAK0lB,c,oBAEjDR,EAAcjU,GAAsB0U,EAAkBT,GAGvDr0B,IAAUmuB,GAAiBI,GAAa,IAAIltB,KAAI2I,I,IAC3CwkB,EAAyBxkB,EACzBykB,EAAgCpf,E,QAGhCA,gBAAiBof,EACjBtf,KAAMqf,GACN5gB,EAAQ8gB,gBAAgBF,EAAWC,I,CAGnCtf,KAAMqf,EACNnf,gBAAiBof,EACjBrf,SAAUpF,E,SAmBV+hB,EAAQ,GAEZ/rB,EAAMtG,SAAQsQ,IACV+hB,EAASjxB,KACL8S,EAAQyG,mBAAmB,CACvByE,QAAS9O,EAAKmF,KAAK4lB,SACnBC,WAAYhrB,EAAKmF,KAAK8lB,YACtBxkB,MAAOzG,EAAKmF,KAAKsB,MACjBG,OAAQ5G,EAAKmF,KAAKyB,S,IAM9BujB,EAAa5vB,EAAQwnB,GAAUxlB,GAAO,IAAIA,K,2BAgBpC2uB,EAAI,G,IACNjgB,EAAI,EACJC,EAAI,EACRof,EAAgB,GAChBC,EAAa,GACbC,EAAkB,GAClBC,EAAgB,GAChBE,GAAiB,EAEjBP,EAAcp0B,EAAMqB,KAAI,CAAC2I,EAAM5G,K,kBACrB+xB,EAAYC,EAAYhyB,GACxB2V,EAAU9S,OAAOkvB,EAAUH,aAAe,EAC1Clc,EAAU7S,OAAOkvB,EAAUrc,UAAY,EAEvCD,EAAW,CACb5D,IACAC,IACA6D,UACAD,WAGEuc,EACwB,kBAD1C,QAAAxmB,EACgBsmB,EAAU1kB,aAD1B,IAAA5B,OAAA,EAAAA,EACiC1L,MACb8C,OAAOkvB,EAAU1kB,MAAM6G,QAAU,GAAKyB,EACtC,EACFuc,EACyB,kBAD3C,QAAAxmB,EACgBqmB,EAAUvkB,cAD1B,IAAA9B,OAAA,EAAAA,EACkC3L,MACd8C,OAAOkvB,EAAUvkB,OAAO0G,QAAU,GAAKwB,EACvC,EACFpI,EACU,IAAZqI,GAA2C,WAD3D,QAAAhK,EACiComB,EAAU1kB,aAD3C,IAAA1B,OAAA,EAAAA,EACkD5L,OAAoBgyB,EAAU1kB,MAAMrW,MAClE6L,OAAOkvB,EAAU1kB,MAAMrW,OAAS2e,EAChC,EACFlI,EACU,IAAZiI,GAA4C,WAD5D,QAAA9J,EACiCmmB,EAAUvkB,cAD3C,IAAA5B,OAAA,EAAAA,EACmD7L,OAAoBgyB,EAAUvkB,OAAOxW,MACpE6L,OAAOkvB,EAAUvkB,OAAOxW,OAAS0e,EACjC,E,QAECvc,EAAI0Y,EAAG1Y,EAAI0Y,EAAI8D,IAAWxc,E,QACtBg5B,EAAIrgB,EAAGqgB,EAAIrgB,EAAI4D,IAAWyc,EAC3BL,EAAK34B,EAAI,IAAMg5B,GACfZ,GAAiB,GAIrBO,EAAK34B,EAAI,IAAMg5B,IAAK,IAEfjB,EAAc/3B,IAAM+3B,EAAc/3B,GAAK84B,KACxCf,EAAc/3B,GAAK84B,KAGlBd,EAAWgB,IAAMhB,EAAWgB,GAAKD,KAClCf,EAAWgB,GAAKD,KAGfd,EAAgBj4B,IAAMi4B,EAAgBj4B,GAAKmU,KAC5C8jB,EAAgBj4B,GAAKmU,KAGpB+jB,EAAcc,IAAMd,EAAcc,GAAK1kB,KACxC4jB,EAAcc,GAAK1kB,I,KAMzBoE,EAEEA,GAAKof,IACLpf,EAAI,IACFC,SAEDggB,EAAKjgB,EAAI,IAAMC,I,OAEpCtc,OAAA+E,OAAA/E,OAAA+E,OAAA,GACmBqM,GAAI,CACPsF,aAAc,CACVuJ,WACAtG,aAAajD,aAAjC,EAAiCA,EAAciD,eAAe,I,IAK5C,IAAN0C,IACA0f,GAAiB,GAGjBA,GACA/mB,EAAQM,SAAS5I,EAAU,IAAI5K,MAAM,qCAGzCg6B,EAAWxf,C,QAIZ4Z,EAAoBlhB,EAAQyG,mBAAmBlF,EAAK1E,4B,oBAEnD2jB,EAAgBtM,GAAyBkN,EAAoBZ,GAI9Da,EAAoBrhB,EAAQyG,mBAAmBlF,EAAK3E,8B,oBAEnD6jB,EAAgBzM,GAA2BuN,EAAoBd,GAGhEhjB,EAAO,CACNmX,OAAQ4L,EACR7L,OAAQ8L,GAGTpwB,EAAQ,CACP,wBAAyBy1B,GAAkBY,EAAeE,EAAiBH,GAC3E,qBAAsBX,GAAkBa,EAAYE,EAAeC,IAGpExS,EAAWiM,GAAiBwG,E,gBAG7BzS,E,GAAQ,6B,IAED9W,GAAa,OAAQnK,GAAKoK,G,oEAMrB8D,EAAKnP,M,sBA5KGA,GAClBmP,EAARvW,OAAA+E,OAAA/E,OAAA+E,OAAA,GACewR,GAAI,CACPnP,S,wBA6KOo0B,GAAWpqB,G,4CACSA,EAAKsF,a,IAAmBtF,EAAKmF,K,gBAAuBnF,EAAKqF,gB,SAA2BrF,EAAKoF,U,0BChPhI,IAAgB,QAAU,eAAe,+BAAiC,eAAe,6BAA+B,eAAe,kBAAoB,eAAe,sBAAsB,eAAe,sBAAsB,eAAe,eAAiB,eAAe,eAAiB,eAAe,sBAAsB,eAAe,oBAAsB,eAAe,qBAAuB,eAAe,2BAA2B,gBCDxb,SAASomB,GAAkBC,GAC9B,MAAM31B,EAAmB,GACzB,IAAI41B,EAAOD,EAAM,GACbE,EAAU,EAEd,IAAK,IAAIp5B,EAAI,EAAGA,GAAKk5B,EAAMt5B,OAAQI,IAC3Bk5B,EAAMl5B,KAAOm5B,GACb51B,EAAOhF,KAAK66B,EAAU,EAAK,UAASA,MAAYD,KAAUA,GAC1DA,EAAOD,EAAMl5B,GACbo5B,EAAU,GAEVA,IAIR,OAAO71B,EAAOwB,KAAK,IACvB,CCbO,SAASs0B,GAAmCr8B,EAAO2xB,GACtD,IAAIrM,EAEJ,OAAO,YAAwCrhB,GAC7B,OAAVqhB,GACAU,aAAaV,GAGjBA,EAAQC,YAAW,KACfvlB,EAAGkyB,MAAM3pB,KAAMtE,GACfqhB,EAAQ,IAAI,GACbqM,EACP,CACJ,C,qICgBe/b,GAAI,IAAA5L,G,gBACJ8L,IAAgC9L,G,SAChC6L,IAAyC7L,G,aACzC+L,IAAkD/L,E,MAEvDqK,GAAU3S,EAAyBmK,G,IACrCywB,GAMAC,GALAC,GAAoB,GACpBC,IAAgB,EAChBC,IAAiB,EAEjB3I,GAAwC,KAExCF,IAAU,E,MAER8I,GAAYtoB,GAAQuoB,iBAAiB,oBACrCC,GAAaxoB,GAAQuoB,iBAAiB,qB,IAExCjU,IAAW,E,IAkBGtU,GAAQyoB,W,aA0EtBC,GAQAC,GACAC,GAgBArC,GA5DAsC,GAAU,EAwBV5U,GAA2B,aAK3BnK,GAAe,QAOfgf,GAAc,EAgBd9gB,GAAU,GAMV+gB,GAAa,GA6BbC,GAAa,GACbxa,IAAa,EAEbkS,GAAiB,GAkDjBuI,GAAc,E,MAkBZC,GAAkClB,I,eAZ/BC,G,aAICkB,EAAalB,GAASkB,WACtBC,EAAcnB,GAASmB,YACvBC,EAAiBpB,GAASqB,YAEhClB,GAAgBe,EAAa,EAC7Bd,GAAiBc,EAAaE,EAAiBD,EAAc,C,GAGQ,I,SAShEG,K,IACDtxB,EAAG,GACHuxB,EAASrB,GAAqB,GAAGhK,SAAS5vB,O,QAErCo5B,EAAI,EAAGA,EAAI6B,IAAU7B,E,QACjBh5B,EAAI,EAAGA,EAAIk6B,KAAWl6B,EAAG,C,MACxBmwB,EAAOqJ,GAAqBx5B,GAAGwvB,SAASwJ,GAC1C7I,GACA7mB,EAAI/K,KAAK4xB,E,QAKd7mB,C,UAGFwxB,GAAoBC,EAAgCl0B,EAAem0B,EAA2B,U,MAC7FC,EAA+B,eAAhB3V,GACf4V,EAAmCD,EAAe,aAAe,YACjEE,EAAyCF,EAAe,OAAS,MAMjE9K,EAAO4K,EAAgBl0B,GAEzBspB,GACAmJ,GAAS8B,OAAO,C,CACXD,GAAkBvxB,KAAKykB,IAAI,EAAG8B,EAAK+K,GAAiB,IAAMf,GAAc,GACzEa,Y,UAqBHK,GAA6B9d,G,MAC5Bwd,EAAkBH,KAClBU,EAAehC,GAAS/J,wBAGxBgM,EAA2BR,EAAgB/mB,WAAUwnB,G,SAb7BlC,EAAmB7rB,G,MAC7B,eAAhB6X,GACO7X,EAAK4B,MAAQiqB,EAASjqB,MAAQ5B,EAAK0B,OAASmqB,EAASnqB,MAGzD1B,EAAKyB,KAAOoqB,EAASpqB,KAAOzB,EAAK2B,QAAUkqB,EAASlqB,M,CASvDqsB,CAAyBH,EAAcE,EAAGjM,2B,IAGZ,IAA9BgM,E,OACOA,E,MAMLG,EAAqBX,EAAgBj2B,KAAI02B,G,SAhCtBlC,EAAmB7rB,G,MACxB,eAAhB6X,GACO7X,EAAK0B,MAAQmqB,EAASjqB,MAAQiqB,EAASnqB,MAAQ1B,EAAK4B,KAGxD5B,EAAK2B,OAASkqB,EAASpqB,KAAOoqB,EAASlqB,OAAS3B,EAAKyB,G,CA4BxDysB,CAAoBL,EAAcE,EAAGjM,2BAEnCqM,EAAsBF,EAAmB1nB,UAAUpI,S,OAE5B,IAAzBgwB,EAE0C,SAAXre,GAAmE,IAA9Cme,EAAmBx2B,OAAO0G,SAAShM,OACvDg8B,EAAsB,EAAIA,EAG5C,SAAXre,EAAoB,EAAIwd,EAAgBn7B,OAAS,C,EAGxDgT,GAAKmB,IAAO4R,KAAa5S,cAAjC,EAAiCA,GAAciD,cACvC3E,GAAQwqB,iBAAiCjpB,GAAKmB,GAAI,CAC9C+nB,eAAeruB,G,MACLstB,EAAkBH,K,GACpBntB,EAAO,GAAKA,EAAOstB,EAAgBn7B,OAAS,E,UAClCzB,MAAM,qDAGpB28B,GAAoBC,EAAiBttB,E,EAEzCsuB,gBAAgBC,G,MACNC,EAAsBZ,GAA6B,QACnDN,EAAkBH,K,IACpBsB,EAAeD,EAAsB,EAErCC,EAAe,IACfA,EAA4B,SAAbF,EAAsBjB,EAAgBn7B,OAAS,EAAIq8B,GAGtEnB,GAAoBC,EAAiBmB,E,EAEzCC,YAAYH,G,MAEFI,EAA+B,eAAhB9W,GACjBgU,GAASkB,WAAalB,GAASqB,cAAgBrB,GAASmB,YAExDnB,GAAS+C,UAAY/C,GAASgD,eAAiBhD,GAAS7L,aAEtDsN,EAAkBH,K,GACpBwB,GAA6B,SAAbJ,E,YAChBlB,GAAoBC,EAAiB,G,MAInCkB,EAAsBZ,GAA6B,Q,IACrDkB,EAAWN,EAAsB,EAEjCM,EAAWxB,EAAgBn7B,OAAS,IACpC28B,EAAwB,SAAbP,EAAsB,EAAIC,GAGzCnB,GAAoBC,EAAiBwB,E,IAkBjDn+B,GAAU,KACNyyB,IAAU,EAENje,GAAKmB,MAAOhB,cAAxB,EAAwBA,GAAciD,cAC1B3E,GAAQmrB,mBAAmB5pB,GAAKmB,G,6QA/WrCie,EAAYpf,GAAKnP,OAEXuuB,aAAb,EAAaA,EAAWpyB,SAAWgF,MAAMwD,QAAQ4pB,GAIrCrM,IAAW,GAHXA,IAAW,EACXtU,GAAQM,SAAS5I,EAAU,IAAI5K,MAAM,wDAqB1CsF,IAAUkiB,IAAYqM,GAAa,IAAIltB,KAAI2I,I,IACtCwkB,EAAyBxkB,EACzBykB,EAAgCpf,G,QAGhCA,gBAAiBof,EACjBtf,KAAMqf,GACN5gB,GAAQ8gB,gBAAgBF,EAAWC,I,CAGnCtf,KAAMqf,EACNnf,gBAAiBof,EACjBrf,SAAUpF,E,IAIfgvB,EAAoBC,GAAc7L,KAAYlL,GAC1C8W,EAC2B,oBAAnBlL,iBAEPR,GAAiB,IAAIQ,gBAAe,KAChCgJ,IAAiC,IAErCxJ,GAAe7N,QAAQqW,KAEpBxI,KACPA,GAAeC,aACfD,GAAiB,MAGlBsH,EAAkBhnB,GAAQyG,mBAAmBlF,GAAK0lB,c,oBAGjD4B,GAAUrW,GAAsB0U,EAAkB2B,IAmBnDyC,E,SAhBuBl5B,EAAey2B,G,IACjC0C,EAAS,EACTtzB,EAAG,G,QAEEtJ,EAAI,EAAGA,EAAIyD,EAAM7D,SAAUI,EAC3BsJ,EAAIszB,KACLtzB,EAAIszB,GAAU,IAElBtzB,EAAIszB,GAAQr+B,KAAKkF,EAAMzD,MACjB48B,GAAU1C,IACZ0C,EAAS,G,OAIVtzB,C,CAEIuzB,CAAiBp5B,EAAOy2B,IAEpC9H,EAAkB/gB,GAAQyG,mBAAmBlF,GAAK0S,a,oBAGjDA,GAAcsO,GAA0BtB,EAAkBhN,IAI3DwX,EAA4BzrB,GAAQyG,mBAAmBlF,GAAKmqB,yB,oBAE3D5hB,GCzID,SACHmK,EACA3W,GAEA,MACoB,UAAhB2W,GACgB,WAAhBA,GACgB,QAAhBA,EAEOA,EAGJ3W,CACX,CD4HgBquB,CAAiBC,EAA4B9hB,IAKtD+hB,EAAkB7rB,GAAQyG,mBAAmBlF,GAAKuqB,c,oBAEjDhD,GAAczqB,GAAyB0tB,EAAkBjD,IACzDJ,GAAUvwB,GAAO2wB,IAKlBkD,EAAmBhsB,GAAQyG,mBAAmBlF,GAAK0qB,e,oBAElDrD,GAAevqB,GAAyB6tB,EAAmBpD,IAC3DH,GAAexwB,GAAOywB,IAGvB/gB,EAAe7H,GAAQyG,mBAAmBlF,GAAKuG,U,oBAG9CE,GAAU5J,GAAmB2J,EAAeC,IAG7CmkB,EAA+B,eAAhBlY,GAA+B,wBAA0B,qB,KAKnEkK,EAAQ,GAEZ/rB,EAAMtG,SAAQsQ,I,MACJgwB,EAA2B,eAAhBnY,GAA+B,QAAU,SAC1DkK,EAASjxB,KAAK8S,GAAQyG,mBAAmBrK,EAAKmF,KAAK6qB,IAAW,IAGlE7F,GAAa5vB,EAAQwnB,GAAUxlB,GAAOA,I,qBAGtCowB,GAAgB,GACZF,GAAU,EAEVE,GAAc77B,KAAK,QAEnBs6B,EAAY17B,SAAQy7B,KACVA,GAA6B,eAAhBtT,IAAqD,kBAApBsT,aAApE,EAAoEA,EAAWhyB,MAC3DwzB,GAAc77B,KAAK,QAEnB67B,GAAc77B,KAAK,c,IAQhCm/B,EAAiBrsB,GAAQyG,mBAAmBlF,GAAK+qB,a,2BAG1CC,EAAgB,G,IAClBjK,EAAoB,GACxB9T,IAAa,GAET9M,cAAZ,EAAYA,GAAciD,eACd2d,EAAqB3d,aAAc,GAGnB,eAAhBsP,GACAqO,EAAqBxX,aAAehB,GAEpCwY,EAAqBtY,aAAeF,GAGhB,WAApB0iB,IACAhe,IAAa,EACb8T,EAAqB9T,WAAa,QAElC+d,EADsC,eAAhBtY,GAA+B,sBAAwB,sBAC3C9b,GAAO2wB,GAAc,IAI3C,IAAZD,KACAvG,EAAqB7Y,wBAA0BwK,IAGnD+U,GAAgBtqB,GAAkB6tB,EAAkBvD,IACpDtI,GAAoBhiB,GAAkB4jB,EAAsB5B,G,QAG7D+L,EAA2BzsB,GAAQyG,mBAAmBlF,GAAKmrB,wB,sBAE3DC,EAAY,CACX3kB,WACA,WAAY2gB,IAGbiE,EAAc,CACb,WAAYlE,G,CACXyD,GAAevE,GAAkBmB,KAGnCtrB,EAAO,CACNwW,eACA,cAAezF,IAGhBqe,EAAkB7sB,GAAQyG,mBAAmBlF,GAAKurB,c,oBAGjD7D,GAAc5qB,GAAyB0uB,EAAkB9D,I,qDAgL3D3U,G,GAAQ,6B,IAED9W,GAAa,UAAWnK,GAAKoK,G,uEAKlB,E,cACD,U,SACLkjB,E,sBArXQvuB,GAClBmP,GAARvW,OAAA+E,OAAA/E,OAAA+E,OAAA,GACewR,IAAI,CACPnP,S,oCAsXQiB,GAAAA,mBAAqB,OAAAmN,EAAGwsB,EAA4BvsB,EAAkC,IAAE,gBAGzFzI,GAAUgxB,IAAa,KAAAr1B,EAAA,OAFnBs0B,GAAQ,UAAAt0B,EAAA,QAMRN,GAAAA,uBAA0B,KAADM,EAAA,QACzBqE,GAAU20B,GAAS,KAAAh5B,EAAA,OAFfu0B,GAAa,MAAA/1B,EAKbm5B,GAAS,CAAA2B,EAAAC,I,iBAED75B,GAAAA,eAAkB,KAAAM,EAAA,QAClBqE,GAAU40B,GAAW,KAAAj5B,EAAA,OACjBw0B,GAAqB+E,GAAQ,MAAA/6B,EAEjC86B,GAAQ7wB,G,4CAEOskB,G,IACTtkB,EAAKmF,K,gBACOnF,EAAKqF,gB,SACZrF,EAAKoF,U,uEAQtB,eAAhByS,GAA4B,GACxBmU,IAAiBgD,EAAiB,yB,UAEtB9C,IAAa,GAAGj1B,GAAAA,kBAAsBA,GAAAA,sBAAuB,MAChEi1B,GAE8C,GAFrC,iBACCj1B,GAAAA,uBAA0B,qGAADM,EAAA,QACpBN,GAAAA,4BAA+B,gGAKvDg1B,IAAkB+C,EAAiB,yB,UAEvB5C,IAAc,GAAGn1B,GAAAA,kBAAsBA,GAAAA,uBAAwB,MAClEm1B,GAE8C,GAFpC,iBACAn1B,GAAAA,uBAA0B,qGAADM,EAAA,QACpBN,GAAAA,4BAA+B,kG,UEnexE,IAAgB,KAAO,eAAe,WAAa,eAAe,WAAa,eAAe,oBAAsB,eAAe,sBAAwB,eAAe,aAAe,eAAe,aAAe,eAAe,sBAAwB,eAAe,oBAAsB,eAAe,YAAc,eAAe,oBAAsB,eAAe,gBAAkB,gB,8GCDrX4N,EAAAC,E,SAqCFK,EAAI,IAAA5L,G,gBACJ8L,IAAgC9L,G,SAChC6L,IAAyC7L,G,aACzC+L,IAAkD/L,E,MAEvDqK,GAAU3S,EAAyBmK,GACnC21B,GAASntB,GAAQotB,MAAM,Q,IAEzB9Y,IAAW,EAOXiS,GAAaxwB,EAAQ,I,qBAsDrBs3B,GACAC,GACAC,GAnBA7M,GAAiB,G,MAqBf8M,GAAkBxtB,GAAQiQ,gBAAgB1O,EAAKksB,c,IAiFjDC,GAaAC,GA7FAC,GAAWJ,IAAmBn1B,OAAOm1B,KAAoB,EAwBzDK,GAAc,GAKdC,GAAc,GAsBdC,GAAgB,GAQhBC,GAAmB,GAQnBC,GAAkB,GAclBC,GAAsB,GAatBC,GAAwB,GAexBC,GAAqB,GAKrBC,GAAuB,GAKvBC,GAAsB,GAKtBC,GAAwB,GAKxBC,GAAiB,EAQjBC,GAAsB,GACtBC,GAAmB,GAwBnBC,GAAkC,KAKlCC,IAAqB,EACrBC,IAAa,EACbC,GAAmBlB,GACnBmB,GAAY,GACZC,GAAa,G,eAWFC,GAAYt2B,EAAauN,GAAQ,G,GAC5C4oB,GAAmBlB,GACnBA,GAAWj1B,EAoHPi2B,KAIJA,IAAqB,EACrBtB,GAAcj9B,MAAM2S,OAAS7K,GAAOm1B,GAAc4B,cAClD3B,GAAWl9B,MAAMkV,UAAY,eAAmC,KAAnBupB,YA7E7CD,IAAa,E,eAQctpB,SACrBvX,IACNu/B,GAAWl9B,MAAMkV,UAAY,eAAeA,S,CAT5C4pB,CAA4B,KAAXvB,I,SAYOwB,GAAS,G,MAC3Bp5B,EAAQo5B,EACV72B,KAAKykB,IAAI,EAAG4Q,GAAW,GACvBr1B,KAAK4kB,IAAIyQ,GAAUkB,IACjB/X,EAAMqY,EACR72B,KAAK4kB,IAAI/qB,EAAM7D,OAAS,EAAGq/B,GAAW,GACtCr1B,KAAKykB,IAAI4Q,GAAUkB,IAEvBC,GAAeA,GAAat7B,KAAI,CAAC47B,EAAU75B,IAAU65B,GAAY75B,GAASQ,GAASR,GAASuhB,IAC5FiY,GAAgBA,GAAcv7B,KAAI,CAACoG,EAAGrE,IAAUA,GAASQ,GAASR,GAASuhB,G,CApB3EuY,G,uBAwBMthC,I,MACAuhC,EAAczT,SAAS0T,eAAe,GAAGrC,YAAgBS,MAE3D2B,IACAjC,GAAcj9B,MAAM2S,OAAS7K,GAAOo3B,EAAYtE,c,CA3BpDwE,GAkCIC,IACA/d,aAAa+d,IAEjBA,GAAoBpgC,OAAO4hB,YAAW,KAClC8d,GAAgB58B,EAAMqB,KAAI,CAACoG,EAAGlL,IAAMA,IAAMi/B,IAAS,GACpD,KArCH+B,IAAoB/B,GAAWN,GAAcsC,YA9CzC1pB,EAAO,OACDlY,I,MAEA6hC,EAAcxC,GAASyC,cAAc,IAAIz8B,GAAAA,uBAC3Cw8B,GACAA,EAAY3pB,O,MA0HpBypB,GApDAD,GAAmC,K,IAyJnCnuB,EAAKmB,IAAO4R,KAAa5S,cAAjC,EAAiCA,GAAciD,cACvC3E,GAAQwqB,iBAAiCjpB,EAAKmB,GAAI,CAC9C+nB,eAAeruB,G,GACPA,EAAO,GAAKA,EAAOhK,EAAM7D,OAAS,E,UACxBzB,MAAM,qDAGpBmiC,GAAY7yB,E,EAEhBsuB,gBAAgBC,G,IACRE,EAAe+C,GAAW,EAE1B/C,EAAe,IACfA,EAA4B,SAAbF,EAAsBv4B,EAAM7D,OAAS,EAAIq/B,IAG5DqB,GAAYpE,E,EAEhBC,YAAYH,G,IACJO,EAAW0C,GAAW,EAEtB1C,EAAW94B,EAAM7D,OAAS,IAC1B28B,EAAwB,SAAbP,EAAsB,EAAIiD,IAGzCqB,GAAY/D,E,IAKxBn+B,GAAU,KACFwU,EAAKmB,MAAOhB,cAAxB,EAAwBA,GAAciD,cAC1B3E,GAAQmrB,mBAAmB5pB,EAAKmB,G,2QAjgBrCtQ,EAAQmP,EAAKnP,OAAS,GAOlBmB,MAAMwD,QAAQ3E,IAAUA,EAAM7D,OAAQ,C,IACrC4vB,EAAQ,GAEZ/rB,EAAMtG,SAAQ,CAACsQ,EAAM5G,K,MACXu6B,EAAO/vB,GAAQiQ,gBAAgB,CACjCza,QACArC,MAAOiJ,EAAKjJ,MACZ68B,mBAAoB5zB,EAAK4zB,qBAEzBD,EAAK58B,OAA+B,iBAAf48B,EAAK58B,MAC1BgrB,EAASjxB,KAAK6iC,GAEd/vB,GAAQM,SAAS5I,EAAU,IAAI5K,MAAM,+BAAgC,CACjEiL,WAAY,CACRvC,W,IAMhB+wB,GAAW95B,IAAI0xB,E,MAEfoI,GAAW95B,IAAI,KAIV+6B,aAAb,EAAaA,EAAaj5B,QAId+lB,IAAW,GAHXA,IAAW,EACXtU,GAAQM,SAAS5I,EAAU,IAAI5K,MAAM,qDAM1C0b,EAAYxI,GAAQyG,mBAAmBlF,EAAKsB,O,oBAC5CoH,EAAajK,GAAQyG,mBAAmBlF,EAAKyB,Q,yBAGxCitB,EAAe,IAEfvuB,cAAZ,EAAYA,GAAciD,eACdsrB,EAAgBtrB,aAAc,GAET,kBAArByE,aAAZ,EAAYA,EAAY7T,QACZ06B,EAAgB3mB,6BAA8B,GAE7CqB,GAAoC,iBAArBA,EAAYpV,OAC5B06B,EAAgBrlB,2BAA4B,GAGhD8V,GAAoBhiB,GAAkBuxB,EAAiBvP,G,KAUnDpM,KAAasZ,GAAW,GAAKA,IAAYx7B,EAAM7D,UACnDyR,GAAQM,SAAS5I,EAAU,IAAI5K,MAAM,gDAAiD,CAClFiL,WAAY,CACR61B,SAAUrsB,EAAKksB,aACfl/B,OAAQ6D,EAAM7D,WAGtBq/B,GAAWA,GAAW,EAAI,EAAIx7B,EAAM7D,OAAS,GAGzC+lB,IAAakT,EAAY5b,MAAKtS,GAAMs0B,KAAat0B,EAAG9D,UACxDwK,GAAQM,SAAS5I,EAAU,IAAI5K,MAAM,gDAAiD,CAClFiL,WAAY,CACR61B,SAAUrsB,EAAKksB,iBAGvBG,IAAR,QAAA3sB,EAAmBumB,EAAY,UAA/B,IAAAvmB,OAAA,EAAAA,EAAmCzL,QAAS,GAGrC06B,EAAelwB,GAAQyG,mBAAmBlF,EAAK4uB,iB,oBAC/CC,EAAWC,GAAiB,CAAC,EAI5BxC,GAAcrb,GAAsB4d,EAAS7c,UAAWsa,IAMpDuC,EAAS7c,WAAa6c,EAAStoB,SAAU,C,MACnCA,EAAuBsoB,EAAStoB,UAAY,CAC9CjK,IAAK,EACLC,MAAO,EACPC,OAAQ,EACRC,KAAM,GAGJsyB,EAAgB,CAClBzyB,KAAMxF,OAAOyP,EAASjK,MAAQ,GAAKgwB,GAAc,GACjD/vB,OAAQzF,OAAOyP,EAAShK,QAAU,GAAK+vB,GAAc,GACrD9vB,QAAS1F,OAAOyP,EAAS/J,SAAW,GAAK8vB,GAAc,GACvD7vB,MAAO3F,OAAOyP,EAAS9J,OAAS,GAAK6vB,GAAc,IAGvDC,GAAc1vB,GAAmBkyB,EAAkBxC,G,QAMjD7a,EAAamd,EAAS5c,iBACTtb,IAAf+a,GAA4BvS,GAAiBuS,KAC7C8a,GAAgB51B,GAAO8a,EAAa4a,GAAc,I,QAMhD3a,EAAgBkd,EAAS3c,oBACTvb,IAAlBgb,GAA+B/U,GAAoB+U,KACnD8a,GAAmB71B,GAAO+a,EAAgB2a,GAAc,I,IAMxDuC,EAASzoB,eAAiByoB,EAAS3oB,gBAAkB2oB,EAAS7c,UAAW,C,MACnEnU,EAAlB,QAAA8B,EAAkCkvB,EAASzoB,qBAA3C,IAAAzG,EAAAA,EAA4D,IAE5CkvB,EAAS3oB,eACTwmB,GCpLT,SACH9uB,EACAC,EACAC,EACA/B,GAEA,MAAMC,EAAO,CACT4B,EAAc,YACdA,EAAc,aACdA,EAAc,gBACdA,EAAc,gBAGlB,IAAK,IAAIxQ,EAAI,EAAGA,EAAI4O,EAAKhP,SAAUI,EAC/B,GAAI4O,EAAK5O,KAAOwP,GAAoBZ,EAAK5O,IACrC,OAAO2O,EAIf,OAAO4B,GAAaC,EAAeC,EAAeC,EACtD,CDgKkCkxB,CAAoBH,EAAS3oB,eAAgBrI,EAAeyuB,GAAaI,IACpF9vB,GAAoBiB,KAC3B6uB,GAAkB91B,GAAOiH,EAAgByuB,GAAc,I,QAQ/DH,GAAsB/a,GAAkByd,EAASI,oBAAsBJ,EAAS1c,YAAaga,IAEzFQ,GADAkC,EAASzc,aAA+C,iBAAzByc,EAASzc,YAClB3T,GAAQ4T,iBAAiBwc,EAASzc,YAAa,CACjEjB,WAAYgb,IAAuB,MAGjB,GAO1BC,GAAwBhb,GACpByd,EAASK,sBAAwBL,EAAS1c,YAC1Cia,IAGAQ,GADAiC,EAASzc,aAA+C,iBAAzByc,EAASzc,YAChB3T,GAAQ4T,iBAAiBwc,EAASzc,YAAa,CACnEjB,WAAYib,IAAyB,MAGjB,GAM5BS,GAAqBv1B,GAAau3B,EAASM,kBAAmB,EAAGtC,IAKjEC,GAAuBx1B,GAAau3B,EAASO,oBAAqB,EAAGtC,IAKrEC,GAAsBz1B,GAAau3B,EAASQ,wBAAyB,EAAGtC,IAKxEC,GAAwB11B,GAAau3B,EAASS,0BAA2B,EAAGtC,IAK5EC,GAAiBnwB,GAAyB+xB,EAAStE,aAAc0C,IAGlE5M,EAAgB5hB,GAAQyG,mBAAmBlF,EAAKuvB,e,oBAChDC,EAAqB/wB,GAAQyG,mBAAmBlF,EAAKyvB,iB,oBACrDC,EAAwBjxB,GAAQyG,mBAAmBlF,EAAK2vB,oB,oBAInDrP,IACIsP,IACA1C,GAAsB51B,GAAas4B,EAAqB,EAAG1C,KAE3D2C,IACA1C,GAAmBtwB,GAAmBgzB,EAAwB1C,MAIvElS,EAAiB,CAChB3b,WAAY4tB,GACZ5qB,OAAQ6qB,IAGT2C,EAAmBrxB,GAAQyG,mBAAmBlF,EAAK+vB,sC,oBACnDC,OAA8C,IAAtBC,GAEvBj3B,QAAQi3B,GAET/E,EAA2BzsB,GAAQyG,mBAAmBlF,EAAKmrB,wB,oBAE3D+E,EAAoBzxB,GAAQyG,mBAAmBlF,EAAKmwB,gB,oBAGnD/C,GAAe1vB,GAAyB0yB,QAA0Cz5B,EAAWy2B,IASzFra,KAIJya,GAAe38B,EAAMqB,KAAI,CAACoG,EAAGlL,IAAMA,IAAMi/B,KACzCoB,GAAgB58B,EAAMqB,KAAI,CAACoG,EAAGlL,IAAMA,IAAMi/B,M,wCAmR5CtZ,G,GAAQ,6B,IAED9W,GAAa,OAAQnK,GAzctB,I,oEA8cW,Q,2CAKHA,GAAAA,YAAc,OAAAmN,EAAGwsB,EAA4BvsB,EAAkC,IAAE,wB,8BAEtDkuB,GAAehxB,GAAiBgxB,IAAgB,G,0BACpDx2B,GAAO01B,I,yBACRC,G,4BACGC,G,+BACGC,G,mCACIN,IAAuB,G,qCACrBC,IAAyB,G,mCAC3BO,IAAuB,G,qCACrBC,IAAyB,G,kCAC5BC,G,oCACEC,G,wCACIC,G,0CACEC,G,8BACZN,G,8BACAO,GAAiB/1B,GAAgB+1B,IAAkB,O,SAjB3EnB,GAAQ,MAAAl7B,EAoBZq1B,GAAWprB,I,IACN5G,EAAQ4G,EAAK5G,MACbo8B,EAAap8B,IAAUo4B,G,kFAGtBpwB,GAAa,aAAcnK,GAAK,CACjCu6B,SAAUgE,EACVC,WAAYt3B,QAAQ6B,EAAK4zB,sB,SAEpB5zB,EAAK4zB,oBAAuBtuB,UAAAA,GAAciD,YAA0C,GAA/B,CAAIvI,EAAK4zB,oB,OAEnEttB,GAAI,GAAGyqB,UAAc33B,IACrB,gBAAiB,GAAG23B,YAAgB33B,IACpCs8B,KAAM,MAENC,UAAUH,GAAelwB,UAAAA,GAAciD,YAA4D,KAA7CvI,EAAK4zB,wBAAqB93B,EAAY,IAC5F,gBAAiB05B,EAAa,OAAS,S,aAE7BlwB,UAAAA,GAAciD,YAAc,KAAQqtB,G,SA5R9CC,EAAez8B,G,OAC3Bo4B,KAAap4B,IACby5B,GAAYz5B,IAEL,E,CAwR4D08B,CAAWF,EAAOx8B,I,qBAE5E4G,EAAKjJ,8B,sBAIb0uB,EAAc,iBAEJxuB,GAAAA,gBAAmB,KAAAM,EAAA,QACnBqE,GAAUwkB,GAAc,uC,EAI3BnpB,GAAAA,cAAgB,OAAAmN,EAAGwsB,EAA4BvsB,EAAkC,IAAE,eAChF6sB,GAAa,UAAA35B,EAAA,QAGb6J,GAAa,eAAgBnK,GAAK,CACrC8+B,OAAQvD,GACRwD,SAAUvD,K,cAEHtB,GAAU,MAAAp7B,EAMdq1B,GAAWprB,I,IACN5G,EAAQ4G,EAAK5G,M,+CAGVgI,GAAa,cAAenK,GAAK,CACpCwc,QAASmf,GAAcx5B,KAAK,0BAAAgL,EAG3B2sB,IAAM,aAAA3sB,EAAShL,GAAK,wBAAAgL,EACP2sB,IAAM,WAAA3sB,EAAOhL,GAAK,uBAAAgL,EACd,IAARhL,GAAW,WAEpBu5B,GAAav5B,GAAK,+B,IACLpD,EAAMoD,GAAO68B,I,gCAAqC3R,I,wEE5oB5F,GAAmG,eAAnG,GAAiJ,eCD1I,SAAS4R,GAAkBC,GAC9B,OAAQC,IACJ,GAAIA,GAAK,EACL,OAAO,EACJ,GAAIA,GAAK,EACZ,OAAO,EAGX,MAAMnrB,EAAImrB,EAAID,EAAMhkC,OACdI,EAAI4J,KAAKk6B,MAAMprB,GAGfqrB,EAAKrrB,EAAI1Y,EAEf,OAJW4jC,EAAM5jC,GAIL+jC,EAHDH,EAAM5jC,EAAI,IAGE,EAAI+jC,EAAG,CAEtC,CCkBoBJ,GAhCN,CACV,MAAQ,MAAQ,MAAQ,IAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,KAChD,MAAQ,MAAQ,MAAQ,IAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,IAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,KAAQ,MAAQ,MAAQ,KAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAChD,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAChD,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,EAAQ,ICGNA,GAhCR,CACV,KAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MACxC,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,KAAQ,KAChD,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAChD,MAAQ,MAAQ,MAAQ,KAAQ,KAAQ,KAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,KAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACh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","sources":["webpack://@divkitframework/divkit/webpack/bootstrap","webpack://@divkitframework/divkit/webpack/runtime/define property getters","webpack://@divkitframework/divkit/webpack/runtime/hasOwnProperty shorthand","webpack://@divkitframework/divkit/./node_modules/svelte/internal/index.mjs","webpack://@divkitframework/divkit/./node_modules/svelte/store/index.mjs","webpack://@divkitframework/divkit/./src/components/Root.module.css","webpack://@divkitframework/divkit/./src/context/root.ts","webpack://@divkitframework/divkit/./src/utils/wrapError.ts","webpack://@divkitframework/divkit/./src/components/text/Text.module.css","webpack://@divkitframework/divkit/./src/components/utilities/Outer.module.css","webpack://@divkitframework/divkit/./src/utils/makeStyle.ts","webpack://@divkitframework/divkit/./src/utils/pxToEm.ts","webpack://@divkitframework/divkit/./src/utils/padLeft.ts","webpack://@divkitframework/divkit/./src/utils/correctColor.ts","webpack://@divkitframework/divkit/./src/utils/htmlFilter.ts","webpack://@divkitframework/divkit/./src/utils/truthy.ts","webpack://@divkitframework/divkit/./src/utils/background.ts","webpack://@divkitframework/divkit/./src/utils/url.ts","webpack://@divkitframework/divkit/./src/use/visibilityAction.ts","webpack://@divkitframework/divkit/./src/utils/genClassName.ts","webpack://@divkitframework/divkit/./src/use/devtool.ts","webpack://@divkitframework/divkit/./src/context/state.ts","webpack://@divkitframework/divkit/./src/utils/edgeInsertsToCss.ts","webpack://@divkitframework/divkit/./src/utils/isNumber.ts","webpack://@divkitframework/divkit/./src/utils/isNonNegativeNumber.ts","webpack://@divkitframework/divkit/./src/utils/correctEdgeInserts.ts","webpack://@divkitframework/divkit/./src/utils/correctNonNegativeNumber.ts","webpack://@divkitframework/divkit/./src/utils/isDeepEqual.ts","webpack://@divkitframework/divkit/./src/utils/assignIfDifferent.ts","webpack://@divkitframework/divkit/./src/utils/correctCSSInterpolator.ts","webpack://@divkitframework/divkit/./src/utils/correctNumber.ts","webpack://@divkitframework/divkit/./src/utils/flattenAnimation.ts","webpack://@divkitframework/divkit/./src/utils/correctEdgeInsertsObject.ts","webpack://@divkitframework/divkit/./src/utils/borderRadius.ts","webpack://@divkitframework/divkit/./src/utils/doNothing.ts","webpack://@divkitframework/divkit/./src/context/action.ts","webpack://@divkitframework/divkit/./src/components/utilities/Actionable.svelte","webpack://@divkitframework/divkit/./src/components/utilities/OuterBackground.module.css","webpack://@divkitframework/divkit/./src/utils/isPositiveNumber.ts","webpack://@divkitframework/divkit/./src/utils/filters.ts","webpack://@divkitframework/divkit/./src/components/utilities/OuterBackground.svelte","webpack://@divkitframework/divkit/./src/components/utilities/Outer.svelte","webpack://@divkitframework/divkit/./src/utils/correctBorderRadiusObject.ts","webpack://@divkitframework/divkit/./src/utils/sumEdgeInsets.ts","webpack://@divkitframework/divkit/./src/utils/correctAlpha.ts","webpack://@divkitframework/divkit/./src/utils/correctVisibility.ts","webpack://@divkitframework/divkit/./src/components/text/TextRange.module.css","webpack://@divkitframework/divkit/./src/utils/correctPositiveNumber.ts","webpack://@divkitframework/divkit/./src/utils/fontWeightToCss.ts","webpack://@divkitframework/divkit/./src/utils/correctFontWeight.ts","webpack://@divkitframework/divkit/./src/components/text/TextRange.svelte","webpack://@divkitframework/divkit/./src/utils/correctAlignmentHorizontal.ts","webpack://@divkitframework/divkit/./src/utils/correctAlignmentVertical.ts","webpack://@divkitframework/divkit/./src/utils/correctBooleanInt.ts","webpack://@divkitframework/divkit/./src/utils/correctTintMode.ts","webpack://@divkitframework/divkit/./src/components/text/Text.svelte","webpack://@divkitframework/divkit/./src/utils/propToString.ts","webpack://@divkitframework/divkit/./src/components/container/Container.module.css","webpack://@divkitframework/divkit/./src/utils/container.ts","webpack://@divkitframework/divkit/./src/utils/correctDrawableStyles.ts","webpack://@divkitframework/divkit/./src/utils/hasGapSupport.ts","webpack://@divkitframework/divkit/./src/components/container/ContainerSeparator.module.css","webpack://@divkitframework/divkit/./src/components/container/ContainerSeparators.svelte","webpack://@divkitframework/divkit/./src/utils/simpleThrottle.ts","webpack://@divkitframework/divkit/./src/utils/getMarginBox.ts","webpack://@divkitframework/divkit/./src/components/container/Container.svelte","webpack://@divkitframework/divkit/./src/utils/correctContainerOrientation.ts","webpack://@divkitframework/divkit/./src/utils/correctContentAlignmentVertical.ts","webpack://@divkitframework/divkit/./src/utils/correctContentAlignmentHorizontal.ts","webpack://@divkitframework/divkit/./src/components/separator/Separator.module.css","webpack://@divkitframework/divkit/./src/utils/correctGeneralOrientation.ts","webpack://@divkitframework/divkit/./src/components/separator/Separator.svelte","webpack://@divkitframework/divkit/./src/components/image/Image.module.css","webpack://@divkitframework/divkit/./src/utils/prepareBase64.ts","webpack://@divkitframework/divkit/./src/components/image/Image.svelte","webpack://@divkitframework/divkit/./src/utils/correctImagePosition.ts","webpack://@divkitframework/divkit/./src/components/grid/Grid.module.css","webpack://@divkitframework/divkit/./src/utils/gridCalcTemplates.ts","webpack://@divkitframework/divkit/./src/components/grid/Grid.svelte","webpack://@divkitframework/divkit/./src/components/gallery/Gallery.module.css","webpack://@divkitframework/divkit/./src/utils/joinTemplateSizes.ts","webpack://@divkitframework/divkit/./src/utils/debounce.ts","webpack://@divkitframework/divkit/./src/components/gallery/Gallery.svelte","webpack://@divkitframework/divkit/./src/utils/correctAlignment.ts","webpack://@divkitframework/divkit/./src/components/tabs/Tabs.module.css","webpack://@divkitframework/divkit/./src/components/tabs/Tabs.svelte","webpack://@divkitframework/divkit/./src/utils/correctBorderRadius.ts","webpack://@divkitframework/divkit/./src/components/state/State.module.css","webpack://@divkitframework/divkit/./src/utils/easings/interpolateEasing.ts","webpack://@divkitframework/divkit/./src/utils/easings/ease.ts","webpack://@divkitframework/divkit/./src/utils/easings/spring.ts","webpack://@divkitframework/divkit/./src/components/state/State.svelte","webpack://@divkitframework/divkit/./src/components/pager/Pager.module.css","webpack://@divkitframework/divkit/./src/components/pager/Pager.svelte","webpack://@divkitframework/divkit/./src/components/indicator/Indicator.module.css","webpack://@divkitframework/divkit/./src/components/indicator/Indicator.svelte","webpack://@divkitframework/divkit/./src/components/slider/Slider.module.css","webpack://@divkitframework/divkit/./src/utils/correctSliderTextStyle.ts","webpack://@divkitframework/divkit/./src/utils/clamp.ts","webpack://@divkitframework/divkit/./src/expressions/bigint.ts","webpack://@divkitframework/divkit/./src/expressions/variable.ts","webpack://@divkitframework/divkit/./src/components/slider/Slider.svelte","webpack://@divkitframework/divkit/./src/components/input/Input.module.css","webpack://@divkitframework/divkit/./src/utils/textDiff.ts","webpack://@divkitframework/divkit/./src/utils/mask/baseInputMask.ts","webpack://@divkitframework/divkit/./src/utils/mask/fixedLengthInputMask.ts","webpack://@divkitframework/divkit/./src/utils/mask/currencyInputMask.ts","webpack://@divkitframework/divkit/./src/utils/contenteditable.ts","webpack://@divkitframework/divkit/./src/components/input/Input.svelte","webpack://@divkitframework/divkit/./src/utils/updateFixedMask.ts","webpack://@divkitframework/divkit/./src/utils/updateCurrencyMask.ts","webpack://@divkitframework/divkit/./src/components/select/Select.module.css","webpack://@divkitframework/divkit/./src/components/select/Select.svelte","webpack://@divkitframework/divkit/./src/components/video/Video.module.css","webpack://@divkitframework/divkit/./src/components/video/Video.svelte","webpack://@divkitframework/divkit/./src/utils/correctVideoSource.ts","webpack://@divkitframework/divkit/./src/components/typeMap.ts","webpack://@divkitframework/divkit/./src/components/utilities/Unknown.svelte","webpack://@divkitframework/divkit/./src/components/utilities/RootSvgFilters.svelte","webpack://@divkitframework/divkit/./src/components/utilities/RootSvgFilters.module.css","webpack://@divkitframework/divkit/./src/utils/applyTemplate.ts","webpack://@divkitframework/divkit/./src/utils/constStore.ts","webpack://@divkitframework/divkit/./src/expressions/expressions.js","webpack://@divkitframework/divkit/./src/expressions/funcs/funcs.ts","webpack://@divkitframework/divkit/./src/expressions/walk.ts","webpack://@divkitframework/divkit/./src/expressions/utils.ts","webpack://@divkitframework/divkit/./src/expressions/const.ts","webpack://@divkitframework/divkit/./src/expressions/funcs/std.ts","webpack://@divkitframework/divkit/./src/expressions/funcs/datetime.ts","webpack://@divkitframework/divkit/./src/expressions/funcs/strings.ts","webpack://@divkitframework/divkit/./src/expressions/funcs/colors.ts","webpack://@divkitframework/divkit/./src/expressions/funcs/interval.ts","webpack://@divkitframework/divkit/./src/expressions/funcs/dict.ts","webpack://@divkitframework/divkit/./src/expressions/eval.ts","webpack://@divkitframework/divkit/./src/utils/escapeRegExp.ts","webpack://@divkitframework/divkit/./src/expressions/funcs/math.ts","webpack://@divkitframework/divkit/./src/expressions/json.ts","webpack://@divkitframework/divkit/./src/utils/uniq.ts","webpack://@divkitframework/divkit/./src/stores/index.ts","webpack://@divkitframework/divkit/./src/stores/pagers.ts","webpack://@divkitframework/divkit/./src/expressions/globalVariablesController.ts","webpack://@divkitframework/divkit/./src/utils/timers.ts","webpack://@divkitframework/divkit/./src/components/Root.svelte","webpack://@divkitframework/divkit/./src/utils/simpleCheckInput.ts","webpack://@divkitframework/divkit/./src/server.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","function noop() { }\nconst identity = x => x;\nfunction assign(tar, src) {\n // @ts-ignore\n for (const k in src)\n tar[k] = src[k];\n return tar;\n}\n// Adapted from https://github.com/then/is-promise/blob/master/index.js\n// Distributed under MIT License https://github.com/then/is-promise/blob/master/LICENSE\nfunction is_promise(value) {\n return !!value && (typeof value === 'object' || typeof value === 'function') && typeof value.then === 'function';\n}\nfunction add_location(element, file, line, column, char) {\n element.__svelte_meta = {\n loc: { file, line, column, char }\n };\n}\nfunction run(fn) {\n return fn();\n}\nfunction blank_object() {\n return Object.create(null);\n}\nfunction run_all(fns) {\n fns.forEach(run);\n}\nfunction is_function(thing) {\n return typeof thing === 'function';\n}\nfunction safe_not_equal(a, b) {\n return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');\n}\nlet src_url_equal_anchor;\nfunction src_url_equal(element_src, url) {\n if (!src_url_equal_anchor) {\n src_url_equal_anchor = document.createElement('a');\n }\n src_url_equal_anchor.href = url;\n return element_src === src_url_equal_anchor.href;\n}\nfunction not_equal(a, b) {\n return a != a ? b == b : a !== b;\n}\nfunction is_empty(obj) {\n return Object.keys(obj).length === 0;\n}\nfunction validate_store(store, name) {\n if (store != null && typeof store.subscribe !== 'function') {\n throw new Error(`'${name}' is not a store with a 'subscribe' method`);\n }\n}\nfunction subscribe(store, ...callbacks) {\n if (store == null) {\n return noop;\n }\n const unsub = store.subscribe(...callbacks);\n return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\nfunction get_store_value(store) {\n let value;\n subscribe(store, _ => value = _)();\n return value;\n}\nfunction component_subscribe(component, store, callback) {\n component.$$.on_destroy.push(subscribe(store, callback));\n}\nfunction create_slot(definition, ctx, $$scope, fn) {\n if (definition) {\n const slot_ctx = get_slot_context(definition, ctx, $$scope, fn);\n return definition[0](slot_ctx);\n }\n}\nfunction get_slot_context(definition, ctx, $$scope, fn) {\n return definition[1] && fn\n ? assign($$scope.ctx.slice(), definition[1](fn(ctx)))\n : $$scope.ctx;\n}\nfunction get_slot_changes(definition, $$scope, dirty, fn) {\n if (definition[2] && fn) {\n const lets = definition[2](fn(dirty));\n if ($$scope.dirty === undefined) {\n return lets;\n }\n if (typeof lets === 'object') {\n const merged = [];\n const len = Math.max($$scope.dirty.length, lets.length);\n for (let i = 0; i < len; i += 1) {\n merged[i] = $$scope.dirty[i] | lets[i];\n }\n return merged;\n }\n return $$scope.dirty | lets;\n }\n return $$scope.dirty;\n}\nfunction update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn) {\n if (slot_changes) {\n const slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn);\n slot.p(slot_context, slot_changes);\n }\n}\nfunction update_slot(slot, slot_definition, ctx, $$scope, dirty, get_slot_changes_fn, get_slot_context_fn) {\n const slot_changes = get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_fn);\n update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn);\n}\nfunction get_all_dirty_from_scope($$scope) {\n if ($$scope.ctx.length > 32) {\n const dirty = [];\n const length = $$scope.ctx.length / 32;\n for (let i = 0; i < length; i++) {\n dirty[i] = -1;\n }\n return dirty;\n }\n return -1;\n}\nfunction exclude_internal_props(props) {\n const result = {};\n for (const k in props)\n if (k[0] !== '$')\n result[k] = props[k];\n return result;\n}\nfunction compute_rest_props(props, keys) {\n const rest = {};\n keys = new Set(keys);\n for (const k in props)\n if (!keys.has(k) && k[0] !== '$')\n rest[k] = props[k];\n return rest;\n}\nfunction compute_slots(slots) {\n const result = {};\n for (const key in slots) {\n result[key] = true;\n }\n return result;\n}\nfunction once(fn) {\n let ran = false;\n return function (...args) {\n if (ran)\n return;\n ran = true;\n fn.call(this, ...args);\n };\n}\nfunction null_to_empty(value) {\n return value == null ? '' : value;\n}\nfunction set_store_value(store, ret, value) {\n store.set(value);\n return ret;\n}\nconst has_prop = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);\nfunction action_destroyer(action_result) {\n return action_result && is_function(action_result.destroy) ? action_result.destroy : noop;\n}\nfunction split_css_unit(value) {\n const split = typeof value === 'string' && value.match(/^\\s*(-?[\\d.]+)([^\\s]*)\\s*$/);\n return split ? [parseFloat(split[1]), split[2] || 'px'] : [value, 'px'];\n}\nconst contenteditable_truthy_values = ['', true, 1, 'true', 'contenteditable'];\n\nconst is_client = typeof window !== 'undefined';\nlet now = is_client\n ? () => window.performance.now()\n : () => Date.now();\nlet raf = is_client ? cb => requestAnimationFrame(cb) : noop;\n// used internally for testing\nfunction set_now(fn) {\n now = fn;\n}\nfunction set_raf(fn) {\n raf = fn;\n}\n\nconst tasks = new Set();\nfunction run_tasks(now) {\n tasks.forEach(task => {\n if (!task.c(now)) {\n tasks.delete(task);\n task.f();\n }\n });\n if (tasks.size !== 0)\n raf(run_tasks);\n}\n/**\n * For testing purposes only!\n */\nfunction clear_loops() {\n tasks.clear();\n}\n/**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\n */\nfunction loop(callback) {\n let task;\n if (tasks.size === 0)\n raf(run_tasks);\n return {\n promise: new Promise(fulfill => {\n tasks.add(task = { c: callback, f: fulfill });\n }),\n abort() {\n tasks.delete(task);\n }\n };\n}\n\n// Track which nodes are claimed during hydration. Unclaimed nodes can then be removed from the DOM\n// at the end of hydration without touching the remaining nodes.\nlet is_hydrating = false;\nfunction start_hydrating() {\n is_hydrating = true;\n}\nfunction end_hydrating() {\n is_hydrating = false;\n}\nfunction upper_bound(low, high, key, value) {\n // Return first index of value larger than input value in the range [low, high)\n while (low < high) {\n const mid = low + ((high - low) >> 1);\n if (key(mid) <= value) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n return low;\n}\nfunction init_hydrate(target) {\n if (target.hydrate_init)\n return;\n target.hydrate_init = true;\n // We know that all children have claim_order values since the unclaimed have been detached if target is not <head>\n let children = target.childNodes;\n // If target is <head>, there may be children without claim_order\n if (target.nodeName === 'HEAD') {\n const myChildren = [];\n for (let i = 0; i < children.length; i++) {\n const node = children[i];\n if (node.claim_order !== undefined) {\n myChildren.push(node);\n }\n }\n children = myChildren;\n }\n /*\n * Reorder claimed children optimally.\n * We can reorder claimed children optimally by finding the longest subsequence of\n * nodes that are already claimed in order and only moving the rest. The longest\n * subsequence of nodes that are claimed in order can be found by\n * computing the longest increasing subsequence of .claim_order values.\n *\n * This algorithm is optimal in generating the least amount of reorder operations\n * possible.\n *\n * Proof:\n * We know that, given a set of reordering operations, the nodes that do not move\n * always form an increasing subsequence, since they do not move among each other\n * meaning that they must be already ordered among each other. Thus, the maximal\n * set of nodes that do not move form a longest increasing subsequence.\n */\n // Compute longest increasing subsequence\n // m: subsequence length j => index k of smallest value that ends an increasing subsequence of length j\n const m = new Int32Array(children.length + 1);\n // Predecessor indices + 1\n const p = new Int32Array(children.length);\n m[0] = -1;\n let longest = 0;\n for (let i = 0; i < children.length; i++) {\n const current = children[i].claim_order;\n // Find the largest subsequence length such that it ends in a value less than our current value\n // upper_bound returns first greater value, so we subtract one\n // with fast path for when we are on the current longest subsequence\n const seqLen = ((longest > 0 && children[m[longest]].claim_order <= current) ? longest + 1 : upper_bound(1, longest, idx => children[m[idx]].claim_order, current)) - 1;\n p[i] = m[seqLen] + 1;\n const newLen = seqLen + 1;\n // We can guarantee that current is the smallest value. Otherwise, we would have generated a longer sequence.\n m[newLen] = i;\n longest = Math.max(newLen, longest);\n }\n // The longest increasing subsequence of nodes (initially reversed)\n const lis = [];\n // The rest of the nodes, nodes that will be moved\n const toMove = [];\n let last = children.length - 1;\n for (let cur = m[longest] + 1; cur != 0; cur = p[cur - 1]) {\n lis.push(children[cur - 1]);\n for (; last >= cur; last--) {\n toMove.push(children[last]);\n }\n last--;\n }\n for (; last >= 0; last--) {\n toMove.push(children[last]);\n }\n lis.reverse();\n // We sort the nodes being moved to guarantee that their insertion order matches the claim order\n toMove.sort((a, b) => a.claim_order - b.claim_order);\n // Finally, we move the nodes\n for (let i = 0, j = 0; i < toMove.length; i++) {\n while (j < lis.length && toMove[i].claim_order >= lis[j].claim_order) {\n j++;\n }\n const anchor = j < lis.length ? lis[j] : null;\n target.insertBefore(toMove[i], anchor);\n }\n}\nfunction append(target, node) {\n target.appendChild(node);\n}\nfunction append_styles(target, style_sheet_id, styles) {\n const append_styles_to = get_root_for_style(target);\n if (!append_styles_to.getElementById(style_sheet_id)) {\n const style = element('style');\n style.id = style_sheet_id;\n style.textContent = styles;\n append_stylesheet(append_styles_to, style);\n }\n}\nfunction get_root_for_style(node) {\n if (!node)\n return document;\n const root = node.getRootNode ? node.getRootNode() : node.ownerDocument;\n if (root && root.host) {\n return root;\n }\n return node.ownerDocument;\n}\nfunction append_empty_stylesheet(node) {\n const style_element = element('style');\n append_stylesheet(get_root_for_style(node), style_element);\n return style_element.sheet;\n}\nfunction append_stylesheet(node, style) {\n append(node.head || node, style);\n return style.sheet;\n}\nfunction append_hydration(target, node) {\n if (is_hydrating) {\n init_hydrate(target);\n if ((target.actual_end_child === undefined) || ((target.actual_end_child !== null) && (target.actual_end_child.parentNode !== target))) {\n target.actual_end_child = target.firstChild;\n }\n // Skip nodes of undefined ordering\n while ((target.actual_end_child !== null) && (target.actual_end_child.claim_order === undefined)) {\n target.actual_end_child = target.actual_end_child.nextSibling;\n }\n if (node !== target.actual_end_child) {\n // We only insert if the ordering of this node should be modified or the parent node is not target\n if (node.claim_order !== undefined || node.parentNode !== target) {\n target.insertBefore(node, target.actual_end_child);\n }\n }\n else {\n target.actual_end_child = node.nextSibling;\n }\n }\n else if (node.parentNode !== target || node.nextSibling !== null) {\n target.appendChild(node);\n }\n}\nfunction insert(target, node, anchor) {\n target.insertBefore(node, anchor || null);\n}\nfunction insert_hydration(target, node, anchor) {\n if (is_hydrating && !anchor) {\n append_hydration(target, node);\n }\n else if (node.parentNode !== target || node.nextSibling != anchor) {\n target.insertBefore(node, anchor || null);\n }\n}\nfunction detach(node) {\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n}\nfunction destroy_each(iterations, detaching) {\n for (let i = 0; i < iterations.length; i += 1) {\n if (iterations[i])\n iterations[i].d(detaching);\n }\n}\nfunction element(name) {\n return document.createElement(name);\n}\nfunction element_is(name, is) {\n return document.createElement(name, { is });\n}\nfunction object_without_properties(obj, exclude) {\n const target = {};\n for (const k in obj) {\n if (has_prop(obj, k)\n // @ts-ignore\n && exclude.indexOf(k) === -1) {\n // @ts-ignore\n target[k] = obj[k];\n }\n }\n return target;\n}\nfunction svg_element(name) {\n return document.createElementNS('http://www.w3.org/2000/svg', name);\n}\nfunction text(data) {\n return document.createTextNode(data);\n}\nfunction space() {\n return text(' ');\n}\nfunction empty() {\n return text('');\n}\nfunction comment(content) {\n return document.createComment(content);\n}\nfunction listen(node, event, handler, options) {\n node.addEventListener(event, handler, options);\n return () => node.removeEventListener(event, handler, options);\n}\nfunction prevent_default(fn) {\n return function (event) {\n event.preventDefault();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction stop_propagation(fn) {\n return function (event) {\n event.stopPropagation();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction stop_immediate_propagation(fn) {\n return function (event) {\n event.stopImmediatePropagation();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction self(fn) {\n return function (event) {\n // @ts-ignore\n if (event.target === this)\n fn.call(this, event);\n };\n}\nfunction trusted(fn) {\n return function (event) {\n // @ts-ignore\n if (event.isTrusted)\n fn.call(this, event);\n };\n}\nfunction attr(node, attribute, value) {\n if (value == null)\n node.removeAttribute(attribute);\n else if (node.getAttribute(attribute) !== value)\n node.setAttribute(attribute, value);\n}\nfunction set_attributes(node, attributes) {\n // @ts-ignore\n const descriptors = Object.getOwnPropertyDescriptors(node.__proto__);\n for (const key in attributes) {\n if (attributes[key] == null) {\n node.removeAttribute(key);\n }\n else if (key === 'style') {\n node.style.cssText = attributes[key];\n }\n else if (key === '__value') {\n node.value = node[key] = attributes[key];\n }\n else if (descriptors[key] && descriptors[key].set) {\n node[key] = attributes[key];\n }\n else {\n attr(node, key, attributes[key]);\n }\n }\n}\nfunction set_svg_attributes(node, attributes) {\n for (const key in attributes) {\n attr(node, key, attributes[key]);\n }\n}\nfunction set_custom_element_data_map(node, data_map) {\n Object.keys(data_map).forEach((key) => {\n set_custom_element_data(node, key, data_map[key]);\n });\n}\nfunction set_custom_element_data(node, prop, value) {\n if (prop in node) {\n node[prop] = typeof node[prop] === 'boolean' && value === '' ? true : value;\n }\n else {\n attr(node, prop, value);\n }\n}\nfunction set_dynamic_element_data(tag) {\n return (/-/.test(tag)) ? set_custom_element_data_map : set_attributes;\n}\nfunction xlink_attr(node, attribute, value) {\n node.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\nfunction get_binding_group_value(group, __value, checked) {\n const value = new Set();\n for (let i = 0; i < group.length; i += 1) {\n if (group[i].checked)\n value.add(group[i].__value);\n }\n if (!checked) {\n value.delete(__value);\n }\n return Array.from(value);\n}\nfunction init_binding_group(group) {\n let _inputs;\n return {\n /* push */ p(...inputs) {\n _inputs = inputs;\n _inputs.forEach(input => group.push(input));\n },\n /* remove */ r() {\n _inputs.forEach(input => group.splice(group.indexOf(input), 1));\n }\n };\n}\nfunction init_binding_group_dynamic(group, indexes) {\n let _group = get_binding_group(group);\n let _inputs;\n function get_binding_group(group) {\n for (let i = 0; i < indexes.length; i++) {\n group = group[indexes[i]] = group[indexes[i]] || [];\n }\n return group;\n }\n function push() {\n _inputs.forEach(input => _group.push(input));\n }\n function remove() {\n _inputs.forEach(input => _group.splice(_group.indexOf(input), 1));\n }\n return {\n /* update */ u(new_indexes) {\n indexes = new_indexes;\n const new_group = get_binding_group(group);\n if (new_group !== _group) {\n remove();\n _group = new_group;\n push();\n }\n },\n /* push */ p(...inputs) {\n _inputs = inputs;\n push();\n },\n /* remove */ r: remove\n };\n}\nfunction to_number(value) {\n return value === '' ? null : +value;\n}\nfunction time_ranges_to_array(ranges) {\n const array = [];\n for (let i = 0; i < ranges.length; i += 1) {\n array.push({ start: ranges.start(i), end: ranges.end(i) });\n }\n return array;\n}\nfunction children(element) {\n return Array.from(element.childNodes);\n}\nfunction init_claim_info(nodes) {\n if (nodes.claim_info === undefined) {\n nodes.claim_info = { last_index: 0, total_claimed: 0 };\n }\n}\nfunction claim_node(nodes, predicate, processNode, createNode, dontUpdateLastIndex = false) {\n // Try to find nodes in an order such that we lengthen the longest increasing subsequence\n init_claim_info(nodes);\n const resultNode = (() => {\n // We first try to find an element after the previous one\n for (let i = nodes.claim_info.last_index; i < nodes.length; i++) {\n const node = nodes[i];\n if (predicate(node)) {\n const replacement = processNode(node);\n if (replacement === undefined) {\n nodes.splice(i, 1);\n }\n else {\n nodes[i] = replacement;\n }\n if (!dontUpdateLastIndex) {\n nodes.claim_info.last_index = i;\n }\n return node;\n }\n }\n // Otherwise, we try to find one before\n // We iterate in reverse so that we don't go too far back\n for (let i = nodes.claim_info.last_index - 1; i >= 0; i--) {\n const node = nodes[i];\n if (predicate(node)) {\n const replacement = processNode(node);\n if (replacement === undefined) {\n nodes.splice(i, 1);\n }\n else {\n nodes[i] = replacement;\n }\n if (!dontUpdateLastIndex) {\n nodes.claim_info.last_index = i;\n }\n else if (replacement === undefined) {\n // Since we spliced before the last_index, we decrease it\n nodes.claim_info.last_index--;\n }\n return node;\n }\n }\n // If we can't find any matching node, we create a new one\n return createNode();\n })();\n resultNode.claim_order = nodes.claim_info.total_claimed;\n nodes.claim_info.total_claimed += 1;\n return resultNode;\n}\nfunction claim_element_base(nodes, name, attributes, create_element) {\n return claim_node(nodes, (node) => node.nodeName === name, (node) => {\n const remove = [];\n for (let j = 0; j < node.attributes.length; j++) {\n const attribute = node.attributes[j];\n if (!attributes[attribute.name]) {\n remove.push(attribute.name);\n }\n }\n remove.forEach(v => node.removeAttribute(v));\n return undefined;\n }, () => create_element(name));\n}\nfunction claim_element(nodes, name, attributes) {\n return claim_element_base(nodes, name, attributes, element);\n}\nfunction claim_svg_element(nodes, name, attributes) {\n return claim_element_base(nodes, name, attributes, svg_element);\n}\nfunction claim_text(nodes, data) {\n return claim_node(nodes, (node) => node.nodeType === 3, (node) => {\n const dataStr = '' + data;\n if (node.data.startsWith(dataStr)) {\n if (node.data.length !== dataStr.length) {\n return node.splitText(dataStr.length);\n }\n }\n else {\n node.data = dataStr;\n }\n }, () => text(data), true // Text nodes should not update last index since it is likely not worth it to eliminate an increasing subsequence of actual elements\n );\n}\nfunction claim_space(nodes) {\n return claim_text(nodes, ' ');\n}\nfunction claim_comment(nodes, data) {\n return claim_node(nodes, (node) => node.nodeType === 8, (node) => {\n node.data = '' + data;\n return undefined;\n }, () => comment(data), true);\n}\nfunction find_comment(nodes, text, start) {\n for (let i = start; i < nodes.length; i += 1) {\n const node = nodes[i];\n if (node.nodeType === 8 /* comment node */ && node.textContent.trim() === text) {\n return i;\n }\n }\n return nodes.length;\n}\nfunction claim_html_tag(nodes, is_svg) {\n // find html opening tag\n const start_index = find_comment(nodes, 'HTML_TAG_START', 0);\n const end_index = find_comment(nodes, 'HTML_TAG_END', start_index);\n if (start_index === end_index) {\n return new HtmlTagHydration(undefined, is_svg);\n }\n init_claim_info(nodes);\n const html_tag_nodes = nodes.splice(start_index, end_index - start_index + 1);\n detach(html_tag_nodes[0]);\n detach(html_tag_nodes[html_tag_nodes.length - 1]);\n const claimed_nodes = html_tag_nodes.slice(1, html_tag_nodes.length - 1);\n for (const n of claimed_nodes) {\n n.claim_order = nodes.claim_info.total_claimed;\n nodes.claim_info.total_claimed += 1;\n }\n return new HtmlTagHydration(claimed_nodes, is_svg);\n}\nfunction set_data(text, data) {\n data = '' + data;\n if (text.data === data)\n return;\n text.data = data;\n}\nfunction set_data_contenteditable(text, data) {\n data = '' + data;\n if (text.wholeText === data)\n return;\n text.data = data;\n}\nfunction set_data_maybe_contenteditable(text, data, attr_value) {\n if (~contenteditable_truthy_values.indexOf(attr_value)) {\n set_data_contenteditable(text, data);\n }\n else {\n set_data(text, data);\n }\n}\nfunction set_input_value(input, value) {\n input.value = value == null ? '' : value;\n}\nfunction set_input_type(input, type) {\n try {\n input.type = type;\n }\n catch (e) {\n // do nothing\n }\n}\nfunction set_style(node, key, value, important) {\n if (value === null) {\n node.style.removeProperty(key);\n }\n else {\n node.style.setProperty(key, value, important ? 'important' : '');\n }\n}\nfunction select_option(select, value, mounting) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n if (option.__value === value) {\n option.selected = true;\n return;\n }\n }\n if (!mounting || value !== undefined) {\n select.selectedIndex = -1; // no option should be selected\n }\n}\nfunction select_options(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n option.selected = ~value.indexOf(option.__value);\n }\n}\nfunction select_value(select) {\n const selected_option = select.querySelector(':checked');\n return selected_option && selected_option.__value;\n}\nfunction select_multiple_value(select) {\n return [].map.call(select.querySelectorAll(':checked'), option => option.__value);\n}\n// unfortunately this can't be a constant as that wouldn't be tree-shakeable\n// so we cache the result instead\nlet crossorigin;\nfunction is_crossorigin() {\n if (crossorigin === undefined) {\n crossorigin = false;\n try {\n if (typeof window !== 'undefined' && window.parent) {\n void window.parent.document;\n }\n }\n catch (error) {\n crossorigin = true;\n }\n }\n return crossorigin;\n}\nfunction add_resize_listener(node, fn) {\n const computed_style = getComputedStyle(node);\n if (computed_style.position === 'static') {\n node.style.position = 'relative';\n }\n const iframe = element('iframe');\n iframe.setAttribute('style', 'display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; ' +\n 'overflow: hidden; border: 0; opacity: 0; pointer-events: none; z-index: -1;');\n iframe.setAttribute('aria-hidden', 'true');\n iframe.tabIndex = -1;\n const crossorigin = is_crossorigin();\n let unsubscribe;\n if (crossorigin) {\n iframe.src = \"data:text/html,<script>onresize=function(){parent.postMessage(0,'*')}</script>\";\n unsubscribe = listen(window, 'message', (event) => {\n if (event.source === iframe.contentWindow)\n fn();\n });\n }\n else {\n iframe.src = 'about:blank';\n iframe.onload = () => {\n unsubscribe = listen(iframe.contentWindow, 'resize', fn);\n // make sure an initial resize event is fired _after_ the iframe is loaded (which is asynchronous)\n // see https://github.com/sveltejs/svelte/issues/4233\n fn();\n };\n }\n append(node, iframe);\n return () => {\n if (crossorigin) {\n unsubscribe();\n }\n else if (unsubscribe && iframe.contentWindow) {\n unsubscribe();\n }\n detach(iframe);\n };\n}\nfunction toggle_class(element, name, toggle) {\n element.classList[toggle ? 'add' : 'remove'](name);\n}\nfunction custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {\n const e = document.createEvent('CustomEvent');\n e.initCustomEvent(type, bubbles, cancelable, detail);\n return e;\n}\nfunction query_selector_all(selector, parent = document.body) {\n return Array.from(parent.querySelectorAll(selector));\n}\nfunction head_selector(nodeId, head) {\n const result = [];\n let started = 0;\n for (const node of head.childNodes) {\n if (node.nodeType === 8 /* comment node */) {\n const comment = node.textContent.trim();\n if (comment === `HEAD_${nodeId}_END`) {\n started -= 1;\n result.push(node);\n }\n else if (comment === `HEAD_${nodeId}_START`) {\n started += 1;\n result.push(node);\n }\n }\n else if (started > 0) {\n result.push(node);\n }\n }\n return result;\n}\nclass HtmlTag {\n constructor(is_svg = false) {\n this.is_svg = false;\n this.is_svg = is_svg;\n this.e = this.n = null;\n }\n c(html) {\n this.h(html);\n }\n m(html, target, anchor = null) {\n if (!this.e) {\n if (this.is_svg)\n this.e = svg_element(target.nodeName);\n /** #7364 target for <template> may be provided as #document-fragment(11) */\n else\n this.e = element((target.nodeType === 11 ? 'TEMPLATE' : target.nodeName));\n this.t = target.tagName !== 'TEMPLATE' ? target : target.content;\n this.c(html);\n }\n this.i(anchor);\n }\n h(html) {\n this.e.innerHTML = html;\n this.n = Array.from(this.e.nodeName === 'TEMPLATE' ? this.e.content.childNodes : this.e.childNodes);\n }\n i(anchor) {\n for (let i = 0; i < this.n.length; i += 1) {\n insert(this.t, this.n[i], anchor);\n }\n }\n p(html) {\n this.d();\n this.h(html);\n this.i(this.a);\n }\n d() {\n this.n.forEach(detach);\n }\n}\nclass HtmlTagHydration extends HtmlTag {\n constructor(claimed_nodes, is_svg = false) {\n super(is_svg);\n this.e = this.n = null;\n this.l = claimed_nodes;\n }\n c(html) {\n if (this.l) {\n this.n = this.l;\n }\n else {\n super.c(html);\n }\n }\n i(anchor) {\n for (let i = 0; i < this.n.length; i += 1) {\n insert_hydration(this.t, this.n[i], anchor);\n }\n }\n}\nfunction attribute_to_object(attributes) {\n const result = {};\n for (const attribute of attributes) {\n result[attribute.name] = attribute.value;\n }\n return result;\n}\nfunction get_custom_elements_slots(element) {\n const result = {};\n element.childNodes.forEach((node) => {\n result[node.slot || 'default'] = true;\n });\n return result;\n}\nfunction construct_svelte_component(component, props) {\n return new component(props);\n}\n\n// we need to store the information for multiple documents because a Svelte application could also contain iframes\n// https://github.com/sveltejs/svelte/issues/3624\nconst managed_styles = new Map();\nlet active = 0;\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\nfunction hash(str) {\n let hash = 5381;\n let i = str.length;\n while (i--)\n hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n return hash >>> 0;\n}\nfunction create_style_information(doc, node) {\n const info = { stylesheet: append_empty_stylesheet(node), rules: {} };\n managed_styles.set(doc, info);\n return info;\n}\nfunction create_rule(node, a, b, duration, delay, ease, fn, uid = 0) {\n const step = 16.666 / duration;\n let keyframes = '{\\n';\n for (let p = 0; p <= 1; p += step) {\n const t = a + (b - a) * ease(p);\n keyframes += p * 100 + `%{${fn(t, 1 - t)}}\\n`;\n }\n const rule = keyframes + `100% {${fn(b, 1 - b)}}\\n}`;\n const name = `__svelte_${hash(rule)}_${uid}`;\n const doc = get_root_for_style(node);\n const { stylesheet, rules } = managed_styles.get(doc) || create_style_information(doc, node);\n if (!rules[name]) {\n rules[name] = true;\n stylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length);\n }\n const animation = node.style.animation || '';\n node.style.animation = `${animation ? `${animation}, ` : ''}${name} ${duration}ms linear ${delay}ms 1 both`;\n active += 1;\n return name;\n}\nfunction delete_rule(node, name) {\n const previous = (node.style.animation || '').split(', ');\n const next = previous.filter(name\n ? anim => anim.indexOf(name) < 0 // remove specific animation\n : anim => anim.indexOf('__svelte') === -1 // remove all Svelte animations\n );\n const deleted = previous.length - next.length;\n if (deleted) {\n node.style.animation = next.join(', ');\n active -= deleted;\n if (!active)\n clear_rules();\n }\n}\nfunction clear_rules() {\n raf(() => {\n if (active)\n return;\n managed_styles.forEach(info => {\n const { ownerNode } = info.stylesheet;\n // there is no ownerNode if it runs on jsdom.\n if (ownerNode)\n detach(ownerNode);\n });\n managed_styles.clear();\n });\n}\n\nfunction create_animation(node, from, fn, params) {\n if (!from)\n return noop;\n const to = node.getBoundingClientRect();\n if (from.left === to.left && from.right === to.right && from.top === to.top && from.bottom === to.bottom)\n return noop;\n const { delay = 0, duration = 300, easing = identity, \n // @ts-ignore todo: should this be separated from destructuring? Or start/end added to public api and documentation?\n start: start_time = now() + delay, \n // @ts-ignore todo:\n end = start_time + duration, tick = noop, css } = fn(node, { from, to }, params);\n let running = true;\n let started = false;\n let name;\n function start() {\n if (css) {\n name = create_rule(node, 0, 1, duration, delay, easing, css);\n }\n if (!delay) {\n started = true;\n }\n }\n function stop() {\n if (css)\n delete_rule(node, name);\n running = false;\n }\n loop(now => {\n if (!started && now >= start_time) {\n started = true;\n }\n if (started && now >= end) {\n tick(1, 0);\n stop();\n }\n if (!running) {\n return false;\n }\n if (started) {\n const p = now - start_time;\n const t = 0 + 1 * easing(p / duration);\n tick(t, 1 - t);\n }\n return true;\n });\n start();\n tick(0, 1);\n return stop;\n}\nfunction fix_position(node) {\n const style = getComputedStyle(node);\n if (style.position !== 'absolute' && style.position !== 'fixed') {\n const { width, height } = style;\n const a = node.getBoundingClientRect();\n node.style.position = 'absolute';\n node.style.width = width;\n node.style.height = height;\n add_transform(node, a);\n }\n}\nfunction add_transform(node, a) {\n const b = node.getBoundingClientRect();\n if (a.left !== b.left || a.top !== b.top) {\n const style = getComputedStyle(node);\n const transform = style.transform === 'none' ? '' : style.transform;\n node.style.transform = `${transform} translate(${a.left - b.left}px, ${a.top - b.top}px)`;\n }\n}\n\nlet current_component;\nfunction set_current_component(component) {\n current_component = component;\n}\nfunction get_current_component() {\n if (!current_component)\n throw new Error('Function called outside component initialization');\n return current_component;\n}\n/**\n * Schedules a callback to run immediately before the component is updated after any state change.\n *\n * The first time the callback runs will be before the initial `onMount`\n *\n * https://svelte.dev/docs#run-time-svelte-beforeupdate\n */\nfunction beforeUpdate(fn) {\n get_current_component().$$.before_update.push(fn);\n}\n/**\n * The `onMount` function schedules a callback to run as soon as the component has been mounted to the DOM.\n * It must be called during the component's initialisation (but doesn't need to live *inside* the component;\n * it can be called from an external module).\n *\n * `onMount` does not run inside a [server-side component](/docs#run-time-server-side-component-api).\n *\n * https://svelte.dev/docs#run-time-svelte-onmount\n */\nfunction onMount(fn) {\n get_current_component().$$.on_mount.push(fn);\n}\n/**\n * Schedules a callback to run immediately after the component has been updated.\n *\n * The first time the callback runs will be after the initial `onMount`\n */\nfunction afterUpdate(fn) {\n get_current_component().$$.after_update.push(fn);\n}\n/**\n * Schedules a callback to run immediately before the component is unmounted.\n *\n * Out of `onMount`, `beforeUpdate`, `afterUpdate` and `onDestroy`, this is the\n * only one that runs inside a server-side component.\n *\n * https://svelte.dev/docs#run-time-svelte-ondestroy\n */\nfunction onDestroy(fn) {\n get_current_component().$$.on_destroy.push(fn);\n}\n/**\n * Creates an event dispatcher that can be used to dispatch [component events](/docs#template-syntax-component-directives-on-eventname).\n * Event dispatchers are functions that can take two arguments: `name` and `detail`.\n *\n * Component events created with `createEventDispatcher` create a\n * [CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent).\n * These events do not [bubble](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events#Event_bubbling_and_capture).\n * The `detail` argument corresponds to the [CustomEvent.detail](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail)\n * property and can contain any type of data.\n *\n * https://svelte.dev/docs#run-time-svelte-createeventdispatcher\n */\nfunction createEventDispatcher() {\n const component = get_current_component();\n return (type, detail, { cancelable = false } = {}) => {\n const callbacks = component.$$.callbacks[type];\n if (callbacks) {\n // TODO are there situations where events could be dispatched\n // in a server (non-DOM) environment?\n const event = custom_event(type, detail, { cancelable });\n callbacks.slice().forEach(fn => {\n fn.call(component, event);\n });\n return !event.defaultPrevented;\n }\n return true;\n };\n}\n/**\n * Associates an arbitrary `context` object with the current component and the specified `key`\n * and returns that object. The context is then available to children of the component\n * (including slotted content) with `getContext`.\n *\n * Like lifecycle functions, this must be called during component initialisation.\n *\n * https://svelte.dev/docs#run-time-svelte-setcontext\n */\nfunction setContext(key, context) {\n get_current_component().$$.context.set(key, context);\n return context;\n}\n/**\n * Retrieves the context that belongs to the closest parent component with the specified `key`.\n * Must be called during component initialisation.\n *\n * https://svelte.dev/docs#run-time-svelte-getcontext\n */\nfunction getContext(key) {\n return get_current_component().$$.context.get(key);\n}\n/**\n * Retrieves the whole context map that belongs to the closest parent component.\n * Must be called during component initialisation. Useful, for example, if you\n * programmatically create a component and want to pass the existing context to it.\n *\n * https://svelte.dev/docs#run-time-svelte-getallcontexts\n */\nfunction getAllContexts() {\n return get_current_component().$$.context;\n}\n/**\n * Checks whether a given `key` has been set in the context of a parent component.\n * Must be called during component initialisation.\n *\n * https://svelte.dev/docs#run-time-svelte-hascontext\n */\nfunction hasContext(key) {\n return get_current_component().$$.context.has(key);\n}\n// TODO figure out if we still want to support\n// shorthand events, or if we want to implement\n// a real bubbling mechanism\nfunction bubble(component, event) {\n const callbacks = component.$$.callbacks[event.type];\n if (callbacks) {\n // @ts-ignore\n callbacks.slice().forEach(fn => fn.call(this, event));\n }\n}\n\nconst dirty_components = [];\nconst intros = { enabled: false };\nconst binding_callbacks = [];\nlet render_callbacks = [];\nconst flush_callbacks = [];\nconst resolved_promise = /* @__PURE__ */ Promise.resolve();\nlet update_scheduled = false;\nfunction schedule_update() {\n if (!update_scheduled) {\n update_scheduled = true;\n resolved_promise.then(flush);\n }\n}\nfunction tick() {\n schedule_update();\n return resolved_promise;\n}\nfunction add_render_callback(fn) {\n render_callbacks.push(fn);\n}\nfunction add_flush_callback(fn) {\n flush_callbacks.push(fn);\n}\n// flush() calls callbacks in this order:\n// 1. All beforeUpdate callbacks, in order: parents before children\n// 2. All bind:this callbacks, in reverse order: children before parents.\n// 3. All afterUpdate callbacks, in order: parents before children. EXCEPT\n// for afterUpdates called during the initial onMount, which are called in\n// reverse order: children before parents.\n// Since callbacks might update component values, which could trigger another\n// call to flush(), the following steps guard against this:\n// 1. During beforeUpdate, any updated components will be added to the\n// dirty_components array and will cause a reentrant call to flush(). Because\n// the flush index is kept outside the function, the reentrant call will pick\n// up where the earlier call left off and go through all dirty components. The\n// current_component value is saved and restored so that the reentrant call will\n// not interfere with the \"parent\" flush() call.\n// 2. bind:this callbacks cannot trigger new flush() calls.\n// 3. During afterUpdate, any updated components will NOT have their afterUpdate\n// callback called a second time; the seen_callbacks set, outside the flush()\n// function, guarantees this behavior.\nconst seen_callbacks = new Set();\nlet flushidx = 0; // Do *not* move this inside the flush() function\nfunction flush() {\n // Do not reenter flush while dirty components are updated, as this can\n // result in an infinite loop. Instead, let the inner flush handle it.\n // Reentrancy is ok afterwards for bindings etc.\n if (flushidx !== 0) {\n return;\n }\n const saved_component = current_component;\n do {\n // first, call beforeUpdate functions\n // and update components\n try {\n while (flushidx < dirty_components.length) {\n const component = dirty_components[flushidx];\n flushidx++;\n set_current_component(component);\n update(component.$$);\n }\n }\n catch (e) {\n // reset dirty state to not end up in a deadlocked state and then rethrow\n dirty_components.length = 0;\n flushidx = 0;\n throw e;\n }\n set_current_component(null);\n dirty_components.length = 0;\n flushidx = 0;\n while (binding_callbacks.length)\n binding_callbacks.pop()();\n // then, once components are updated, call\n // afterUpdate functions. This may cause\n // subsequent updates...\n for (let i = 0; i < render_callbacks.length; i += 1) {\n const callback = render_callbacks[i];\n if (!seen_callbacks.has(callback)) {\n // ...so guard against infinite loops\n seen_callbacks.add(callback);\n callback();\n }\n }\n render_callbacks.length = 0;\n } while (dirty_components.length);\n while (flush_callbacks.length) {\n flush_callbacks.pop()();\n }\n update_scheduled = false;\n seen_callbacks.clear();\n set_current_component(saved_component);\n}\nfunction update($$) {\n if ($$.fragment !== null) {\n $$.update();\n run_all($$.before_update);\n const dirty = $$.dirty;\n $$.dirty = [-1];\n $$.fragment && $$.fragment.p($$.ctx, dirty);\n $$.after_update.forEach(add_render_callback);\n }\n}\n/**\n * Useful for example to execute remaining `afterUpdate` callbacks before executing `destroy`.\n */\nfunction flush_render_callbacks(fns) {\n const filtered = [];\n const targets = [];\n render_callbacks.forEach((c) => fns.indexOf(c) === -1 ? filtered.push(c) : targets.push(c));\n targets.forEach((c) => c());\n render_callbacks = filtered;\n}\n\nlet promise;\nfunction wait() {\n if (!promise) {\n promise = Promise.resolve();\n promise.then(() => {\n promise = null;\n });\n }\n return promise;\n}\nfunction dispatch(node, direction, kind) {\n node.dispatchEvent(custom_event(`${direction ? 'intro' : 'outro'}${kind}`));\n}\nconst outroing = new Set();\nlet outros;\nfunction group_outros() {\n outros = {\n r: 0,\n c: [],\n p: outros // parent group\n };\n}\nfunction check_outros() {\n if (!outros.r) {\n run_all(outros.c);\n }\n outros = outros.p;\n}\nfunction transition_in(block, local) {\n if (block && block.i) {\n outroing.delete(block);\n block.i(local);\n }\n}\nfunction transition_out(block, local, detach, callback) {\n if (block && block.o) {\n if (outroing.has(block))\n return;\n outroing.add(block);\n outros.c.push(() => {\n outroing.delete(block);\n if (callback) {\n if (detach)\n block.d(1);\n callback();\n }\n });\n block.o(local);\n }\n else if (callback) {\n callback();\n }\n}\nconst null_transition = { duration: 0 };\nfunction create_in_transition(node, fn, params) {\n const options = { direction: 'in' };\n let config = fn(node, params, options);\n let running = false;\n let animation_name;\n let task;\n let uid = 0;\n function cleanup() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 0, 1, duration, delay, easing, css, uid++);\n tick(0, 1);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n if (task)\n task.abort();\n running = true;\n add_render_callback(() => dispatch(node, true, 'start'));\n task = loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(1, 0);\n dispatch(node, true, 'end');\n cleanup();\n return running = false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(t, 1 - t);\n }\n }\n return running;\n });\n }\n let started = false;\n return {\n start() {\n if (started)\n return;\n started = true;\n delete_rule(node);\n if (is_function(config)) {\n config = config(options);\n wait().then(go);\n }\n else {\n go();\n }\n },\n invalidate() {\n started = false;\n },\n end() {\n if (running) {\n cleanup();\n running = false;\n }\n }\n };\n}\nfunction create_out_transition(node, fn, params) {\n const options = { direction: 'out' };\n let config = fn(node, params, options);\n let running = true;\n let animation_name;\n const group = outros;\n group.r += 1;\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 1, 0, duration, delay, easing, css);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n add_render_callback(() => dispatch(node, false, 'start'));\n loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(0, 1);\n dispatch(node, false, 'end');\n if (!--group.r) {\n // this will result in `end()` being called,\n // so we don't need to clean up here\n run_all(group.c);\n }\n return false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(1 - t, t);\n }\n }\n return running;\n });\n }\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config(options);\n go();\n });\n }\n else {\n go();\n }\n return {\n end(reset) {\n if (reset && config.tick) {\n config.tick(1, 0);\n }\n if (running) {\n if (animation_name)\n delete_rule(node, animation_name);\n running = false;\n }\n }\n };\n}\nfunction create_bidirectional_transition(node, fn, params, intro) {\n const options = { direction: 'both' };\n let config = fn(node, params, options);\n let t = intro ? 0 : 1;\n let running_program = null;\n let pending_program = null;\n let animation_name = null;\n function clear_animation() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function init(program, duration) {\n const d = (program.b - t);\n duration *= Math.abs(d);\n return {\n a: t,\n b: program.b,\n d,\n duration,\n start: program.start,\n end: program.start + duration,\n group: program.group\n };\n }\n function go(b) {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n const program = {\n start: now() + delay,\n b\n };\n if (!b) {\n // @ts-ignore todo: improve typings\n program.group = outros;\n outros.r += 1;\n }\n if (running_program || pending_program) {\n pending_program = program;\n }\n else {\n // if this is an intro, and there's a delay, we need to do\n // an initial tick and/or apply CSS animation immediately\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, b, duration, delay, easing, css);\n }\n if (b)\n tick(0, 1);\n running_program = init(program, duration);\n add_render_callback(() => dispatch(node, b, 'start'));\n loop(now => {\n if (pending_program && now > pending_program.start) {\n running_program = init(pending_program, duration);\n pending_program = null;\n dispatch(node, running_program.b, 'start');\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, running_program.b, running_program.duration, 0, easing, config.css);\n }\n }\n if (running_program) {\n if (now >= running_program.end) {\n tick(t = running_program.b, 1 - t);\n dispatch(node, running_program.b, 'end');\n if (!pending_program) {\n // we're done\n if (running_program.b) {\n // intro — we can tidy up immediately\n clear_animation();\n }\n else {\n // outro — needs to be coordinated\n if (!--running_program.group.r)\n run_all(running_program.group.c);\n }\n }\n running_program = null;\n }\n else if (now >= running_program.start) {\n const p = now - running_program.start;\n t = running_program.a + running_program.d * easing(p / running_program.duration);\n tick(t, 1 - t);\n }\n }\n return !!(running_program || pending_program);\n });\n }\n }\n return {\n run(b) {\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config(options);\n go(b);\n });\n }\n else {\n go(b);\n }\n },\n end() {\n clear_animation();\n running_program = pending_program = null;\n }\n };\n}\n\nfunction handle_promise(promise, info) {\n const token = info.token = {};\n function update(type, index, key, value) {\n if (info.token !== token)\n return;\n info.resolved = value;\n let child_ctx = info.ctx;\n if (key !== undefined) {\n child_ctx = child_ctx.slice();\n child_ctx[key] = value;\n }\n const block = type && (info.current = type)(child_ctx);\n let needs_flush = false;\n if (info.block) {\n if (info.blocks) {\n info.blocks.forEach((block, i) => {\n if (i !== index && block) {\n group_outros();\n transition_out(block, 1, 1, () => {\n if (info.blocks[i] === block) {\n info.blocks[i] = null;\n }\n });\n check_outros();\n }\n });\n }\n else {\n info.block.d(1);\n }\n block.c();\n transition_in(block, 1);\n block.m(info.mount(), info.anchor);\n needs_flush = true;\n }\n info.block = block;\n if (info.blocks)\n info.blocks[index] = block;\n if (needs_flush) {\n flush();\n }\n }\n if (is_promise(promise)) {\n const current_component = get_current_component();\n promise.then(value => {\n set_current_component(current_component);\n update(info.then, 1, info.value, value);\n set_current_component(null);\n }, error => {\n set_current_component(current_component);\n update(info.catch, 2, info.error, error);\n set_current_component(null);\n if (!info.hasCatch) {\n throw error;\n }\n });\n // if we previously had a then/catch block, destroy it\n if (info.current !== info.pending) {\n update(info.pending, 0);\n return true;\n }\n }\n else {\n if (info.current !== info.then) {\n update(info.then, 1, info.value, promise);\n return true;\n }\n info.resolved = promise;\n }\n}\nfunction update_await_block_branch(info, ctx, dirty) {\n const child_ctx = ctx.slice();\n const { resolved } = info;\n if (info.current === info.then) {\n child_ctx[info.value] = resolved;\n }\n if (info.current === info.catch) {\n child_ctx[info.error] = resolved;\n }\n info.block.p(child_ctx, dirty);\n}\n\nconst globals = (typeof window !== 'undefined'\n ? window\n : typeof globalThis !== 'undefined'\n ? globalThis\n : global);\n\nfunction destroy_block(block, lookup) {\n block.d(1);\n lookup.delete(block.key);\n}\nfunction outro_and_destroy_block(block, lookup) {\n transition_out(block, 1, 1, () => {\n lookup.delete(block.key);\n });\n}\nfunction fix_and_destroy_block(block, lookup) {\n block.f();\n destroy_block(block, lookup);\n}\nfunction fix_and_outro_and_destroy_block(block, lookup) {\n block.f();\n outro_and_destroy_block(block, lookup);\n}\nfunction update_keyed_each(old_blocks, dirty, get_key, dynamic, ctx, list, lookup, node, destroy, create_each_block, next, get_context) {\n let o = old_blocks.length;\n let n = list.length;\n let i = o;\n const old_indexes = {};\n while (i--)\n old_indexes[old_blocks[i].key] = i;\n const new_blocks = [];\n const new_lookup = new Map();\n const deltas = new Map();\n const updates = [];\n i = n;\n while (i--) {\n const child_ctx = get_context(ctx, list, i);\n const key = get_key(child_ctx);\n let block = lookup.get(key);\n if (!block) {\n block = create_each_block(key, child_ctx);\n block.c();\n }\n else if (dynamic) {\n // defer updates until all the DOM shuffling is done\n updates.push(() => block.p(child_ctx, dirty));\n }\n new_lookup.set(key, new_blocks[i] = block);\n if (key in old_indexes)\n deltas.set(key, Math.abs(i - old_indexes[key]));\n }\n const will_move = new Set();\n const did_move = new Set();\n function insert(block) {\n transition_in(block, 1);\n block.m(node, next);\n lookup.set(block.key, block);\n next = block.first;\n n--;\n }\n while (o && n) {\n const new_block = new_blocks[n - 1];\n const old_block = old_blocks[o - 1];\n const new_key = new_block.key;\n const old_key = old_block.key;\n if (new_block === old_block) {\n // do nothing\n next = new_block.first;\n o--;\n n--;\n }\n else if (!new_lookup.has(old_key)) {\n // remove old block\n destroy(old_block, lookup);\n o--;\n }\n else if (!lookup.has(new_key) || will_move.has(new_key)) {\n insert(new_block);\n }\n else if (did_move.has(old_key)) {\n o--;\n }\n else if (deltas.get(new_key) > deltas.get(old_key)) {\n did_move.add(new_key);\n insert(new_block);\n }\n else {\n will_move.add(old_key);\n o--;\n }\n }\n while (o--) {\n const old_block = old_blocks[o];\n if (!new_lookup.has(old_block.key))\n destroy(old_block, lookup);\n }\n while (n)\n insert(new_blocks[n - 1]);\n run_all(updates);\n return new_blocks;\n}\nfunction validate_each_keys(ctx, list, get_context, get_key) {\n const keys = new Set();\n for (let i = 0; i < list.length; i++) {\n const key = get_key(get_context(ctx, list, i));\n if (keys.has(key)) {\n throw new Error('Cannot have duplicate keys in a keyed each');\n }\n keys.add(key);\n }\n}\n\nfunction get_spread_update(levels, updates) {\n const update = {};\n const to_null_out = {};\n const accounted_for = { $$scope: 1 };\n let i = levels.length;\n while (i--) {\n const o = levels[i];\n const n = updates[i];\n if (n) {\n for (const key in o) {\n if (!(key in n))\n to_null_out[key] = 1;\n }\n for (const key in n) {\n if (!accounted_for[key]) {\n update[key] = n[key];\n accounted_for[key] = 1;\n }\n }\n levels[i] = n;\n }\n else {\n for (const key in o) {\n accounted_for[key] = 1;\n }\n }\n }\n for (const key in to_null_out) {\n if (!(key in update))\n update[key] = undefined;\n }\n return update;\n}\nfunction get_spread_object(spread_props) {\n return typeof spread_props === 'object' && spread_props !== null ? spread_props : {};\n}\n\nconst _boolean_attributes = [\n 'allowfullscreen',\n 'allowpaymentrequest',\n 'async',\n 'autofocus',\n 'autoplay',\n 'checked',\n 'controls',\n 'default',\n 'defer',\n 'disabled',\n 'formnovalidate',\n 'hidden',\n 'inert',\n 'ismap',\n 'loop',\n 'multiple',\n 'muted',\n 'nomodule',\n 'novalidate',\n 'open',\n 'playsinline',\n 'readonly',\n 'required',\n 'reversed',\n 'selected'\n];\n/**\n * List of HTML boolean attributes (e.g. `<input disabled>`).\n * Source: https://html.spec.whatwg.org/multipage/indices.html\n */\nconst boolean_attributes = new Set([..._boolean_attributes]);\n\n/** regex of all html void element names */\nconst void_element_names = /^(?:area|base|br|col|command|embed|hr|img|input|keygen|link|meta|param|source|track|wbr)$/;\nfunction is_void(name) {\n return void_element_names.test(name) || name.toLowerCase() === '!doctype';\n}\n\nconst invalid_attribute_name_character = /[\\s'\">/=\\u{FDD0}-\\u{FDEF}\\u{FFFE}\\u{FFFF}\\u{1FFFE}\\u{1FFFF}\\u{2FFFE}\\u{2FFFF}\\u{3FFFE}\\u{3FFFF}\\u{4FFFE}\\u{4FFFF}\\u{5FFFE}\\u{5FFFF}\\u{6FFFE}\\u{6FFFF}\\u{7FFFE}\\u{7FFFF}\\u{8FFFE}\\u{8FFFF}\\u{9FFFE}\\u{9FFFF}\\u{AFFFE}\\u{AFFFF}\\u{BFFFE}\\u{BFFFF}\\u{CFFFE}\\u{CFFFF}\\u{DFFFE}\\u{DFFFF}\\u{EFFFE}\\u{EFFFF}\\u{FFFFE}\\u{FFFFF}\\u{10FFFE}\\u{10FFFF}]/u;\n// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n// https://infra.spec.whatwg.org/#noncharacter\nfunction spread(args, attrs_to_add) {\n const attributes = Object.assign({}, ...args);\n if (attrs_to_add) {\n const classes_to_add = attrs_to_add.classes;\n const styles_to_add = attrs_to_add.styles;\n if (classes_to_add) {\n if (attributes.class == null) {\n attributes.class = classes_to_add;\n }\n else {\n attributes.class += ' ' + classes_to_add;\n }\n }\n if (styles_to_add) {\n if (attributes.style == null) {\n attributes.style = style_object_to_string(styles_to_add);\n }\n else {\n attributes.style = style_object_to_string(merge_ssr_styles(attributes.style, styles_to_add));\n }\n }\n }\n let str = '';\n Object.keys(attributes).forEach(name => {\n if (invalid_attribute_name_character.test(name))\n return;\n const value = attributes[name];\n if (value === true)\n str += ' ' + name;\n else if (boolean_attributes.has(name.toLowerCase())) {\n if (value)\n str += ' ' + name;\n }\n else if (value != null) {\n str += ` ${name}=\"${value}\"`;\n }\n });\n return str;\n}\nfunction merge_ssr_styles(style_attribute, style_directive) {\n const style_object = {};\n for (const individual_style of style_attribute.split(';')) {\n const colon_index = individual_style.indexOf(':');\n const name = individual_style.slice(0, colon_index).trim();\n const value = individual_style.slice(colon_index + 1).trim();\n if (!name)\n continue;\n style_object[name] = value;\n }\n for (const name in style_directive) {\n const value = style_directive[name];\n if (value) {\n style_object[name] = value;\n }\n else {\n delete style_object[name];\n }\n }\n return style_object;\n}\nconst ATTR_REGEX = /[&\"]/g;\nconst CONTENT_REGEX = /[&<]/g;\n/**\n * Note: this method is performance sensitive and has been optimized\n * https://github.com/sveltejs/svelte/pull/5701\n */\nfunction escape(value, is_attr = false) {\n const str = String(value);\n const pattern = is_attr ? ATTR_REGEX : CONTENT_REGEX;\n pattern.lastIndex = 0;\n let escaped = '';\n let last = 0;\n while (pattern.test(str)) {\n const i = pattern.lastIndex - 1;\n const ch = str[i];\n escaped += str.substring(last, i) + (ch === '&' ? '&' : (ch === '\"' ? '"' : '<'));\n last = i + 1;\n }\n return escaped + str.substring(last);\n}\nfunction escape_attribute_value(value) {\n // keep booleans, null, and undefined for the sake of `spread`\n const should_escape = typeof value === 'string' || (value && typeof value === 'object');\n return should_escape ? escape(value, true) : value;\n}\nfunction escape_object(obj) {\n const result = {};\n for (const key in obj) {\n result[key] = escape_attribute_value(obj[key]);\n }\n return result;\n}\nfunction each(items, fn) {\n let str = '';\n for (let i = 0; i < items.length; i += 1) {\n str += fn(items[i], i);\n }\n return str;\n}\nconst missing_component = {\n $$render: () => ''\n};\nfunction validate_component(component, name) {\n if (!component || !component.$$render) {\n if (name === 'svelte:component')\n name += ' this={...}';\n throw new Error(`<${name}> is not a valid SSR component. You may need to review your build config to ensure that dependencies are compiled, rather than imported as pre-compiled modules. Otherwise you may need to fix a <${name}>.`);\n }\n return component;\n}\nfunction debug(file, line, column, values) {\n console.log(`{@debug} ${file ? file + ' ' : ''}(${line}:${column})`); // eslint-disable-line no-console\n console.log(values); // eslint-disable-line no-console\n return '';\n}\nlet on_destroy;\nfunction create_ssr_component(fn) {\n function $$render(result, props, bindings, slots, context) {\n const parent_component = current_component;\n const $$ = {\n on_destroy,\n context: new Map(context || (parent_component ? parent_component.$$.context : [])),\n // these will be immediately discarded\n on_mount: [],\n before_update: [],\n after_update: [],\n callbacks: blank_object()\n };\n set_current_component({ $$ });\n const html = fn(result, props, bindings, slots);\n set_current_component(parent_component);\n return html;\n }\n return {\n render: (props = {}, { $$slots = {}, context = new Map() } = {}) => {\n on_destroy = [];\n const result = { title: '', head: '', css: new Set() };\n const html = $$render(result, props, {}, $$slots, context);\n run_all(on_destroy);\n return {\n html,\n css: {\n code: Array.from(result.css).map(css => css.code).join('\\n'),\n map: null // TODO\n },\n head: result.title + result.head\n };\n },\n $$render\n };\n}\nfunction add_attribute(name, value, boolean) {\n if (value == null || (boolean && !value))\n return '';\n const assignment = (boolean && value === true) ? '' : `=\"${escape(value, true)}\"`;\n return ` ${name}${assignment}`;\n}\nfunction add_classes(classes) {\n return classes ? ` class=\"${classes}\"` : '';\n}\nfunction style_object_to_string(style_object) {\n return Object.keys(style_object)\n .filter(key => style_object[key])\n .map(key => `${key}: ${escape_attribute_value(style_object[key])};`)\n .join(' ');\n}\nfunction add_styles(style_object) {\n const styles = style_object_to_string(style_object);\n return styles ? ` style=\"${styles}\"` : '';\n}\n\nfunction bind(component, name, callback) {\n const index = component.$$.props[name];\n if (index !== undefined) {\n component.$$.bound[index] = callback;\n callback(component.$$.ctx[index]);\n }\n}\nfunction create_component(block) {\n block && block.c();\n}\nfunction claim_component(block, parent_nodes) {\n block && block.l(parent_nodes);\n}\nfunction mount_component(component, target, anchor, customElement) {\n const { fragment, after_update } = component.$$;\n fragment && fragment.m(target, anchor);\n if (!customElement) {\n // onMount happens before the initial afterUpdate\n add_render_callback(() => {\n const new_on_destroy = component.$$.on_mount.map(run).filter(is_function);\n // if the component was destroyed immediately\n // it will update the `$$.on_destroy` reference to `null`.\n // the destructured on_destroy may still reference to the old array\n if (component.$$.on_destroy) {\n component.$$.on_destroy.push(...new_on_destroy);\n }\n else {\n // Edge case - component was destroyed immediately,\n // most likely as a result of a binding initialising\n run_all(new_on_destroy);\n }\n component.$$.on_mount = [];\n });\n }\n after_update.forEach(add_render_callback);\n}\nfunction destroy_component(component, detaching) {\n const $$ = component.$$;\n if ($$.fragment !== null) {\n flush_render_callbacks($$.after_update);\n run_all($$.on_destroy);\n $$.fragment && $$.fragment.d(detaching);\n // TODO null out other refs, including component.$$ (but need to\n // preserve final state?)\n $$.on_destroy = $$.fragment = null;\n $$.ctx = [];\n }\n}\nfunction make_dirty(component, i) {\n if (component.$$.dirty[0] === -1) {\n dirty_components.push(component);\n schedule_update();\n component.$$.dirty.fill(0);\n }\n component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));\n}\nfunction init(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) {\n const parent_component = current_component;\n set_current_component(component);\n const $$ = component.$$ = {\n fragment: null,\n ctx: [],\n // state\n props,\n update: noop,\n not_equal,\n bound: blank_object(),\n // lifecycle\n on_mount: [],\n on_destroy: [],\n on_disconnect: [],\n before_update: [],\n after_update: [],\n context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),\n // everything else\n callbacks: blank_object(),\n dirty,\n skip_bound: false,\n root: options.target || parent_component.$$.root\n };\n append_styles && append_styles($$.root);\n let ready = false;\n $$.ctx = instance\n ? instance(component, options.props || {}, (i, ret, ...rest) => {\n const value = rest.length ? rest[0] : ret;\n if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {\n if (!$$.skip_bound && $$.bound[i])\n $$.bound[i](value);\n if (ready)\n make_dirty(component, i);\n }\n return ret;\n })\n : [];\n $$.update();\n ready = true;\n run_all($$.before_update);\n // `false` as a special case of no DOM component\n $$.fragment = create_fragment ? create_fragment($$.ctx) : false;\n if (options.target) {\n if (options.hydrate) {\n start_hydrating();\n const nodes = children(options.target);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.l(nodes);\n nodes.forEach(detach);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.c();\n }\n if (options.intro)\n transition_in(component.$$.fragment);\n mount_component(component, options.target, options.anchor, options.customElement);\n end_hydrating();\n flush();\n }\n set_current_component(parent_component);\n}\nlet SvelteElement;\nif (typeof HTMLElement === 'function') {\n SvelteElement = class extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n connectedCallback() {\n const { on_mount } = this.$$;\n this.$$.on_disconnect = on_mount.map(run).filter(is_function);\n // @ts-ignore todo: improve typings\n for (const key in this.$$.slotted) {\n // @ts-ignore todo: improve typings\n this.appendChild(this.$$.slotted[key]);\n }\n }\n attributeChangedCallback(attr, _oldValue, newValue) {\n this[attr] = newValue;\n }\n disconnectedCallback() {\n run_all(this.$$.on_disconnect);\n }\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n // TODO should this delegate to addEventListener?\n if (!is_function(callback)) {\n return noop;\n }\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n };\n}\n/**\n * Base class for Svelte components. Used when dev=false.\n */\nclass SvelteComponent {\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n if (!is_function(callback)) {\n return noop;\n }\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n}\n\nfunction dispatch_dev(type, detail) {\n document.dispatchEvent(custom_event(type, Object.assign({ version: '3.58.0' }, detail), { bubbles: true }));\n}\nfunction append_dev(target, node) {\n dispatch_dev('SvelteDOMInsert', { target, node });\n append(target, node);\n}\nfunction append_hydration_dev(target, node) {\n dispatch_dev('SvelteDOMInsert', { target, node });\n append_hydration(target, node);\n}\nfunction insert_dev(target, node, anchor) {\n dispatch_dev('SvelteDOMInsert', { target, node, anchor });\n insert(target, node, anchor);\n}\nfunction insert_hydration_dev(target, node, anchor) {\n dispatch_dev('SvelteDOMInsert', { target, node, anchor });\n insert_hydration(target, node, anchor);\n}\nfunction detach_dev(node) {\n dispatch_dev('SvelteDOMRemove', { node });\n detach(node);\n}\nfunction detach_between_dev(before, after) {\n while (before.nextSibling && before.nextSibling !== after) {\n detach_dev(before.nextSibling);\n }\n}\nfunction detach_before_dev(after) {\n while (after.previousSibling) {\n detach_dev(after.previousSibling);\n }\n}\nfunction detach_after_dev(before) {\n while (before.nextSibling) {\n detach_dev(before.nextSibling);\n }\n}\nfunction listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation, has_stop_immediate_propagation) {\n const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : [];\n if (has_prevent_default)\n modifiers.push('preventDefault');\n if (has_stop_propagation)\n modifiers.push('stopPropagation');\n if (has_stop_immediate_propagation)\n modifiers.push('stopImmediatePropagation');\n dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers });\n const dispose = listen(node, event, handler, options);\n return () => {\n dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers });\n dispose();\n };\n}\nfunction attr_dev(node, attribute, value) {\n attr(node, attribute, value);\n if (value == null)\n dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute });\n else\n dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });\n}\nfunction prop_dev(node, property, value) {\n node[property] = value;\n dispatch_dev('SvelteDOMSetProperty', { node, property, value });\n}\nfunction dataset_dev(node, property, value) {\n node.dataset[property] = value;\n dispatch_dev('SvelteDOMSetDataset', { node, property, value });\n}\nfunction set_data_dev(text, data) {\n data = '' + data;\n if (text.data === data)\n return;\n dispatch_dev('SvelteDOMSetData', { node: text, data });\n text.data = data;\n}\nfunction set_data_contenteditable_dev(text, data) {\n data = '' + data;\n if (text.wholeText === data)\n return;\n dispatch_dev('SvelteDOMSetData', { node: text, data });\n text.data = data;\n}\nfunction set_data_maybe_contenteditable_dev(text, data, attr_value) {\n if (~contenteditable_truthy_values.indexOf(attr_value)) {\n set_data_contenteditable_dev(text, data);\n }\n else {\n set_data_dev(text, data);\n }\n}\nfunction validate_each_argument(arg) {\n if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) {\n let msg = '{#each} only iterates over array-like objects.';\n if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) {\n msg += ' You can use a spread to convert this iterable into an array.';\n }\n throw new Error(msg);\n }\n}\nfunction validate_slots(name, slot, keys) {\n for (const slot_key of Object.keys(slot)) {\n if (!~keys.indexOf(slot_key)) {\n console.warn(`<${name}> received an unexpected slot \"${slot_key}\".`);\n }\n }\n}\nfunction validate_dynamic_element(tag) {\n const is_string = typeof tag === 'string';\n if (tag && !is_string) {\n throw new Error('<svelte:element> expects \"this\" attribute to be a string.');\n }\n}\nfunction validate_void_dynamic_element(tag) {\n if (tag && is_void(tag)) {\n console.warn(`<svelte:element this=\"${tag}\"> is self-closing and cannot have content.`);\n }\n}\nfunction construct_svelte_component_dev(component, props) {\n const error_message = 'this={...} of <svelte:component> should specify a Svelte component.';\n try {\n const instance = new component(props);\n if (!instance.$$ || !instance.$set || !instance.$on || !instance.$destroy) {\n throw new Error(error_message);\n }\n return instance;\n }\n catch (err) {\n const { message } = err;\n if (typeof message === 'string' && message.indexOf('is not a constructor') !== -1) {\n throw new Error(error_message);\n }\n else {\n throw err;\n }\n }\n}\n/**\n * Base class for Svelte components with some minor dev-enhancements. Used when dev=true.\n */\nclass SvelteComponentDev extends SvelteComponent {\n constructor(options) {\n if (!options || (!options.target && !options.$$inline)) {\n throw new Error(\"'target' is a required option\");\n }\n super();\n }\n $destroy() {\n super.$destroy();\n this.$destroy = () => {\n console.warn('Component was already destroyed'); // eslint-disable-line no-console\n };\n }\n $capture_state() { }\n $inject_state() { }\n}\n/**\n * Base class to create strongly typed Svelte components.\n * This only exists for typing purposes and should be used in `.d.ts` files.\n *\n * ### Example:\n *\n * You have component library on npm called `component-library`, from which\n * you export a component called `MyComponent`. For Svelte+TypeScript users,\n * you want to provide typings. Therefore you create a `index.d.ts`:\n * ```ts\n * import { SvelteComponentTyped } from \"svelte\";\n * export class MyComponent extends SvelteComponentTyped<{foo: string}> {}\n * ```\n * Typing this makes it possible for IDEs like VS Code with the Svelte extension\n * to provide intellisense and to use the component like this in a Svelte file\n * with TypeScript:\n * ```svelte\n * <script lang=\"ts\">\n * \timport { MyComponent } from \"component-library\";\n * </script>\n * <MyComponent foo={'bar'} />\n * ```\n *\n * #### Why not make this part of `SvelteComponent(Dev)`?\n * Because\n * ```ts\n * class ASubclassOfSvelteComponent extends SvelteComponent<{foo: string}> {}\n * const component: typeof SvelteComponent = ASubclassOfSvelteComponent;\n * ```\n * will throw a type error, so we need to separate the more strictly typed class.\n */\nclass SvelteComponentTyped extends SvelteComponentDev {\n constructor(options) {\n super(options);\n }\n}\nfunction loop_guard(timeout) {\n const start = Date.now();\n return () => {\n if (Date.now() - start > timeout) {\n throw new Error('Infinite loop detected');\n }\n };\n}\n\nexport { HtmlTag, HtmlTagHydration, SvelteComponent, SvelteComponentDev, SvelteComponentTyped, SvelteElement, action_destroyer, add_attribute, add_classes, add_flush_callback, add_location, add_render_callback, add_resize_listener, add_styles, add_transform, afterUpdate, append, append_dev, append_empty_stylesheet, append_hydration, append_hydration_dev, append_styles, assign, attr, attr_dev, attribute_to_object, beforeUpdate, bind, binding_callbacks, blank_object, bubble, check_outros, children, claim_comment, claim_component, claim_element, claim_html_tag, claim_space, claim_svg_element, claim_text, clear_loops, comment, component_subscribe, compute_rest_props, compute_slots, construct_svelte_component, construct_svelte_component_dev, contenteditable_truthy_values, createEventDispatcher, create_animation, create_bidirectional_transition, create_component, create_in_transition, create_out_transition, create_slot, create_ssr_component, current_component, custom_event, dataset_dev, debug, destroy_block, destroy_component, destroy_each, detach, detach_after_dev, detach_before_dev, detach_between_dev, detach_dev, dirty_components, dispatch_dev, each, element, element_is, empty, end_hydrating, escape, escape_attribute_value, escape_object, exclude_internal_props, fix_and_destroy_block, fix_and_outro_and_destroy_block, fix_position, flush, flush_render_callbacks, getAllContexts, getContext, get_all_dirty_from_scope, get_binding_group_value, get_current_component, get_custom_elements_slots, get_root_for_style, get_slot_changes, get_spread_object, get_spread_update, get_store_value, globals, group_outros, handle_promise, hasContext, has_prop, head_selector, identity, init, init_binding_group, init_binding_group_dynamic, insert, insert_dev, insert_hydration, insert_hydration_dev, intros, invalid_attribute_name_character, is_client, is_crossorigin, is_empty, is_function, is_promise, is_void, listen, listen_dev, loop, loop_guard, merge_ssr_styles, missing_component, mount_component, noop, not_equal, now, null_to_empty, object_without_properties, onDestroy, onMount, once, outro_and_destroy_block, prevent_default, prop_dev, query_selector_all, raf, run, run_all, safe_not_equal, schedule_update, select_multiple_value, select_option, select_options, select_value, self, setContext, set_attributes, set_current_component, set_custom_element_data, set_custom_element_data_map, set_data, set_data_contenteditable, set_data_contenteditable_dev, set_data_dev, set_data_maybe_contenteditable, set_data_maybe_contenteditable_dev, set_dynamic_element_data, set_input_type, set_input_value, set_now, set_raf, set_store_value, set_style, set_svg_attributes, space, split_css_unit, spread, src_url_equal, start_hydrating, stop_immediate_propagation, stop_propagation, subscribe, svg_element, text, tick, time_ranges_to_array, to_number, toggle_class, transition_in, transition_out, trusted, update_await_block_branch, update_keyed_each, update_slot, update_slot_base, validate_component, validate_dynamic_element, validate_each_argument, validate_each_keys, validate_slots, validate_store, validate_void_dynamic_element, xlink_attr };\n","import { noop, safe_not_equal, subscribe, run_all, is_function } from '../internal/index.mjs';\nexport { get_store_value as get } from '../internal/index.mjs';\n\nconst subscriber_queue = [];\n/**\n * Creates a `Readable` store that allows reading by subscription.\n * @param value initial value\n * @param {StartStopNotifier}start start and stop notifications for subscriptions\n */\nfunction readable(value, start) {\n return {\n subscribe: writable(value, start).subscribe\n };\n}\n/**\n * Create a `Writable` store that allows both updating and reading by subscription.\n * @param {*=}value initial value\n * @param {StartStopNotifier=}start start and stop notifications for subscriptions\n */\nfunction writable(value, start = noop) {\n let stop;\n const subscribers = new Set();\n function set(new_value) {\n if (safe_not_equal(value, new_value)) {\n value = new_value;\n if (stop) { // store is ready\n const run_queue = !subscriber_queue.length;\n for (const subscriber of subscribers) {\n subscriber[1]();\n subscriber_queue.push(subscriber, value);\n }\n if (run_queue) {\n for (let i = 0; i < subscriber_queue.length; i += 2) {\n subscriber_queue[i][0](subscriber_queue[i + 1]);\n }\n subscriber_queue.length = 0;\n }\n }\n }\n }\n function update(fn) {\n set(fn(value));\n }\n function subscribe(run, invalidate = noop) {\n const subscriber = [run, invalidate];\n subscribers.add(subscriber);\n if (subscribers.size === 1) {\n stop = start(set) || noop;\n }\n run(value);\n return () => {\n subscribers.delete(subscriber);\n if (subscribers.size === 0 && stop) {\n stop();\n stop = null;\n }\n };\n }\n return { set, update, subscribe };\n}\nfunction derived(stores, fn, initial_value) {\n const single = !Array.isArray(stores);\n const stores_array = single\n ? [stores]\n : stores;\n const auto = fn.length < 2;\n return readable(initial_value, (set) => {\n let started = false;\n const values = [];\n let pending = 0;\n let cleanup = noop;\n const sync = () => {\n if (pending) {\n return;\n }\n cleanup();\n const result = fn(single ? values[0] : values, set);\n if (auto) {\n set(result);\n }\n else {\n cleanup = is_function(result) ? result : noop;\n }\n };\n const unsubscribers = stores_array.map((store, i) => subscribe(store, (value) => {\n values[i] = value;\n pending &= ~(1 << i);\n if (started) {\n sync();\n }\n }, () => {\n pending |= (1 << i);\n }));\n started = true;\n sync();\n return function stop() {\n run_all(unsubscribers);\n cleanup();\n // We need to set this to false because callbacks can still happen despite having unsubscribed:\n // Callbacks might already be placed in the queue which doesn't know it should no longer\n // invoke this derived store.\n started = false;\n };\n });\n}\n/**\n * Takes a store and returns a new one derived from the old one that is readable.\n *\n * @param store - store to make readonly\n */\nfunction readonly(store) {\n return {\n subscribe: store.subscribe.bind(store)\n };\n}\n\nexport { derived, readable, readonly, writable };\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"divkit-b023c\",\"root__clickable\":\"divkit-bd259\",\"root__clickable-no-transition\":\"divkit-d9099\",\"root__unselectable\":\"divkit-c016b\",\"root_platform_desktop\":\"divkit-ee112\",\"root__only-desktop\":\"divkit-fef1e\",\"root_restrict-scroll\":\"divkit-aa145\",\"root_disabled-context-menu\":\"divkit-f0cba\"};","import type { Readable, Writable } from 'svelte/types/runtime/store';\nimport type { WrappedError } from '../utils/wrapError';\nimport type { Action, DisappearAction, DivBase, DivExtension, DivExtensionContext, TemplateContext, TypefaceProvider, VisibilityAction } from '../../typings/common';\nimport type { DivBaseData } from '../types/base';\nimport type { MaybeMissing } from '../expressions/json';\nimport type { Variable, VariableType } from '../expressions/variable';\nimport type { TintMode } from '../types/image';\nimport type { Customization } from '../../typings/common';\n\nexport const ROOT_CTX = Symbol('root');\n\nexport type Running = 'stateChange';\n\nexport interface ParentMethods {\n replaceWith: (id: string, items?: DivBase[]) => void;\n}\n\nexport interface RootCtxValue {\n logError(error: WrappedError): void;\n logStat(type: string, action: MaybeMissing<Action | VisibilityAction | DisappearAction>): void;\n hasTemplate(templateName: string): boolean;\n processTemplate(json: DivBaseData, templateContext: TemplateContext): {\n json: DivBaseData;\n templateContext: TemplateContext;\n };\n genId(key: string): string;\n genClass(key: string): string;\n execAction(action: MaybeMissing<Action | VisibilityAction | DisappearAction>): void;\n execAnyActions(actions: MaybeMissing<Action[]> | undefined, processUrls?: boolean): Promise<void>;\n execCustomAction(action: (Action | VisibilityAction | DisappearAction) & { url: string }): void;\n isRunning(type: Running): boolean;\n setRunning(type: Running, val: boolean): void;\n registerInstance<T>(id: string, block: T): void;\n unregisterInstance(id: string): void;\n registerParentOf(id: string, methods: ParentMethods): void;\n unregisterParentOf(id: string): void;\n addSvgFilter(color: string, mode: TintMode): string;\n removeSvgFilter(color: string | undefined, mode: TintMode): void;\n getDerivedFromVars<T>(jsonProp: T): Readable<MaybeMissing<T>>;\n getJsonWithVars<T>(jsonProp: T): MaybeMissing<T>;\n getStore<T>(id: string): Writable<T>;\n getVariable(varName: string, type: VariableType): Variable | undefined;\n getCustomization<K extends keyof Customization>(prop: K): Customization[K] | undefined;\n getBuiltinProtocols(): Set<string>;\n getExtension(id: string, params: object | undefined): DivExtension | undefined;\n getExtensionContext(): DivExtensionContext;\n isPointerFocus: Readable<boolean>;\n typefaceProvider: TypefaceProvider;\n isDesktop: Readable<boolean>;\n\n // Devtool\n registerComponent?({\n node,\n json,\n origJson,\n templateContext\n }: {\n node: HTMLElement;\n json: Partial<DivBaseData>;\n origJson: DivBase | undefined;\n templateContext: TemplateContext;\n }): void;\n unregisterComponent?({\n node\n }: {\n node: HTMLElement;\n }): void;\n}\n","export interface WrappedError extends Error {\n level: 'error' | 'warn';\n additional?: Record<string, unknown>;\n}\n\nexport type LogError = (error: WrappedError) => void;\n\nexport function wrapError(error: Error, params: {\n level?: 'error' | 'warn';\n additional?: Record<string, unknown>;\n} = {}): WrappedError {\n const wrapped = error as WrappedError;\n\n wrapped.level = params.level || 'error';\n\n if (params.additional) {\n wrapped.additional = params.additional;\n }\n\n return wrapped;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"text-range\":\"divkit-faf07\",\"text\":\"divkit-d9b0e\",\"text_halign_left\":\"divkit-a4cb7\",\"text_halign_center\":\"divkit-e1659\",\"text_halign_right\":\"divkit-ea280\",\"text_valign_top\":\"divkit-d8ce0\",\"text_valign_center\":\"divkit-ef58e\",\"text_valign_bottom\":\"divkit-fe8ed\",\"text_valign_baseline\":\"divkit-e0c6c\",\"text__inner\":\"divkit-b8528\",\"text_singleline\":\"divkit-ef11c\",\"text_truncate_none\":\"divkit-c6ea1\",\"text_multiline\":\"divkit-ee8e3\",\"text__inner_gradient\":\"divkit-cb8e0\",\"text__image\":\"divkit-bf6e2\",\"text__image_hidden\":\"divkit-f1002\"};","// extracted by mini-css-extract-plugin\nexport default {\"outer\":\"divkit-d65a7\",\"outer_hide-on-transition-in\":\"divkit-a6d12\",\"outer_halign-self_start\":\"divkit-cc452\",\"outer_halign-self_center\":\"divkit-b8331\",\"outer_halign-self_end\":\"divkit-c573c\",\"outer_halign-self_stretch\":\"divkit-dcc74\",\"outer_valign-self_start\":\"divkit-e8077\",\"outer_valign-self_center\":\"divkit-d40a7\",\"outer_valign-self_end\":\"divkit-e9f84\",\"outer_valign-self_stretch\":\"divkit-b7aa3\",\"outer_parent-flex_vertical\":\"divkit-c143f\",\"outer_parent-flex_horizontal\":\"divkit-ef302\",\"outer_valign-self_baseline\":\"divkit-e72b5\",\"outer_width_content\":\"divkit-b8f4d\",\"outer_height_content\":\"divkit-faa66\",\"outer_width-constrained\":\"divkit-d3211\",\"outer_parent-grid\":\"divkit-ff439\",\"outer_height-constrained\":\"divkit-a5256\",\"outer_parent-overlap\":\"divkit-dab2d\",\"outer_parent-overlap-absolute\":\"divkit-d43fb\",\"outer_scroll-snap_center\":\"divkit-d9e38\",\"outer_scroll-snap_start\":\"divkit-efd1e\",\"outer__border\":\"divkit-d4056\",\"outer_visibility_invisible\":\"divkit-f018b\",\"outer_visibility_gone\":\"divkit-e784b\",\"outer_has-action-animation\":\"divkit-f4980\",\"outer_has-custom-focus\":\"divkit-c7f14\"};","/**\n * Merges rules from object into css string\n * @param styles\n * @returns\n */\nexport function makeStyle(styles?: Record<string, string | number | undefined>): string | undefined {\n if (!styles) {\n return undefined;\n }\n\n let res = '';\n for (const key in styles) {\n if (styles.hasOwnProperty(key)) {\n if (!styles[key] && styles[key] !== 0) {\n continue;\n }\n if (res) {\n res += ';';\n }\n res += key + ':' + String(styles[key]);\n }\n }\n return res || undefined;\n}\n","/**\n * Converts px to em with rounding\n * @param value\n * @returns\n */\nexport function pxToEm(value: number): string {\n if (typeof value !== 'number' && typeof value !== 'string' || !value) {\n return '0';\n }\n\n const casted = Number(value);\n\n if (isNaN(casted)) {\n return '0';\n }\n\n return (Math.ceil(casted * 1000) / 10000) + 'em';\n}\n\nexport function pxToEmWithUnits(value: number): string {\n let res = pxToEm(value);\n\n if (res === '0') {\n res += 'em';\n }\n\n return res;\n}\n","export function padLeft(val: string, count: number): string {\n while (val.length < count) {\n val = '0' + val;\n }\n return val;\n}\n","import { padLeft } from './padLeft';\n\n/**\n * Converts color from app format (ARGB) to css format (RGBA)\n * @param color Color with format #RGB, #ARGB, #RRGGBB, #AARRGGBB\n * @param alpha Color additional opacity\n * @param defaultColor Default color value, used if input color is incorrect\n * @returns Color with opacity if it has correct format, or defaultColor elsewhere\n */\nexport function correctColor(color: string | undefined, alpha = 1, defaultColor = 'transparent'): string {\n color = (typeof color === 'string' && color || '').toLowerCase();\n\n if (color.charAt(0) !== '#') {\n return defaultColor;\n }\n\n const parsedColor = parseColor(color);\n if (parsedColor) {\n parsedColor.a *= alpha;\n return stringifyColorToCss(parsedColor);\n }\n\n return defaultColor;\n}\n\nexport interface ParsedColor {\n a: number;\n r: number;\n g: number;\n b: number;\n}\n\nfunction stringifyColorToCss(color: ParsedColor): string {\n if (color.a === 255) {\n return `#${[color.r, color.g, color.b].map(it => {\n return padLeft(Math.round(it).toString(16), 2);\n }).join('')}`;\n }\n\n return `rgba(${color.r},${color.g},${color.b},${(color.a / 255).toFixed(2)})`;\n}\n\nexport function parseColor(color: string): ParsedColor | null {\n const colorMatch = (\n // #AARRGGBB\n color.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i) ||\n // #ARGB\n color.match(/^#([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])$/i) ||\n // #RRGGBB\n color.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i) ||\n // #RGB\n color.match(/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i)\n );\n\n if (colorMatch) {\n // with alpha part in color\n if (colorMatch.length === 5) {\n const [_, a, r, g, b] = colorMatch;\n const redPart = r.length === 2 ? r : r + r;\n const greenPart = g.length === 2 ? g : g + g;\n const bluePart = b.length === 2 ? b : b + b;\n const alphaPart = a.length === 2 ? a : a + a;\n\n return {\n a: parseInt(alphaPart, 16),\n r: parseInt(redPart, 16),\n g: parseInt(greenPart, 16),\n b: parseInt(bluePart, 16)\n };\n }\n\n const [_, r, g, b] = colorMatch;\n const redPart = r.length === 2 ? r : r + r;\n const greenPart = g.length === 2 ? g : g + g;\n const bluePart = b.length === 2 ? b : b + b;\n\n return {\n a: 255,\n r: parseInt(redPart, 16),\n g: parseInt(greenPart, 16),\n b: parseInt(bluePart, 16)\n };\n }\n\n return null;\n}\n","/**\n * Escapes html\n * @param str\n * @returns\n */\nexport function htmlFilter(str: string): string {\n let str2 = String(str);\n\n if (str2.indexOf('&') > -1) {\n str2 = str2.replace(/&/g, '&');\n }\n if (str2.indexOf('<') > -1) {\n str2 = str2.replace(/</g, '<');\n }\n if (str2.indexOf('>') > -1) {\n str2 = str2.replace(/>/g, '>');\n }\n if (str2.indexOf('\"') > -1) {\n str2 = str2.replace(/\"/g, '"');\n }\n\n return str2;\n}\n","export const Truthy = Boolean as unknown as <T>(x: T | null | 0 | '' | false | undefined) => x is T;\n","import type { AlignmentHorizontal, AlignmentVertical } from '../types/alignment';\nimport type {\n Background,\n GradientBackground,\n ImageBackground,\n SolidBackground,\n RadialBackground,\n RadialGradientCenter\n} from '../types/background';\nimport type { ImageScale } from '../types/imageScale';\nimport type { MaybeMissing } from '../expressions/json';\nimport { correctColor } from './correctColor';\nimport { htmlFilter } from './htmlFilter';\nimport { Truthy } from './truthy';\nimport { pxToEmWithUnits } from './pxToEm';\n\nexport function getBackground(bgs: MaybeMissing<Background>[]): {\n color?: string;\n image?: string;\n size?: string;\n position?: string;\n} {\n if (bgs.length === 1 && bgs[0].type === 'solid') {\n return solidUnique({\n bg: bgs[0]\n });\n }\n\n const res = bgs\n .map(bg => {\n if (bg.type === 'solid') {\n return solid({\n bg\n });\n } else if (bg.type === 'gradient') {\n return gradient({\n bg\n });\n } else if (bg.type === 'image') {\n return image({\n bg\n });\n } else if (bg.type === 'radial_gradient') {\n return radial({\n bg\n });\n }\n })\n .filter(Truthy)\n .reverse()\n .reduce(function(acc, item) {\n acc.image.push(item.image);\n acc.size.push(item.size || 'auto');\n acc.position.push(item.pos || '50% 50%');\n\n return acc;\n }, {\n image: [] as string[],\n size: [] as string[],\n position: [] as string[]\n });\n\n return {\n image: res.image.join(','),\n size: res.size.join(','),\n position: res.position.join(',')\n };\n}\n\nfunction solid(opts: {\n bg: MaybeMissing<SolidBackground>;\n}): {\n size: string | undefined;\n pos: string | undefined;\n image: string;\n} {\n const color = correctColor(opts.bg.color || 'transparent');\n\n return {\n size: undefined,\n pos: undefined,\n image: `linear-gradient(to bottom,${color},${color})`\n };\n}\n\nfunction solidUnique(opts: {\n bg: MaybeMissing<SolidBackground>;\n}): {\n color: string;\n size: string;\n position: string;\n} {\n const color = correctColor(opts.bg.color || 'transparent');\n\n return {\n color,\n size: 'auto',\n position: '50% 50%'\n };\n}\n\nfunction gradient(opts: {\n bg: MaybeMissing<GradientBackground>;\n}): {\n size: string | undefined;\n pos: string | undefined;\n image: string;\n} | undefined {\n if (!Array.isArray(opts.bg?.colors)) {\n return;\n }\n\n const colors = opts.bg.colors.filter(Truthy) as string[];\n if (!colors.length) {\n return;\n }\n\n return {\n size: undefined,\n pos: undefined,\n image:\n 'linear-gradient(' +\n (90 - Number(opts.bg.angle || 0) + 'deg') +\n ',' +\n colors\n .map(color => correctColor(color))\n .join(',') +\n ')'\n };\n}\n\nconst RELATIVE_SIZE_MAP = {\n nearest_corner: 'closest-corner',\n farthest_corner: 'farthest-corner',\n nearest_side: 'closest-side',\n farthest_side: 'farthest-side'\n};\n\nfunction radialCenterToCss(center: MaybeMissing<RadialGradientCenter> | undefined): string {\n if (center && typeof center === 'object' && 'type' in center && center.value !== undefined) {\n if (center.type === 'fixed') {\n return pxToEmWithUnits(center.value);\n } else if (center.type === 'relative') {\n return `${Number(center.value) * 100}%`;\n }\n }\n\n return '50%';\n}\n\nfunction radial(opts: {\n bg: MaybeMissing<RadialBackground>;\n}): {\n size: string | undefined;\n pos: string | undefined;\n image: string;\n} | undefined {\n if (!Array.isArray(opts.bg?.colors)) {\n return;\n }\n\n const colors = opts.bg.colors.filter(Truthy) as string[];\n if (!colors.length) {\n return;\n }\n\n const sizeVal = opts.bg.radius;\n let size;\n if (sizeVal && typeof sizeVal === 'object' && 'type' in sizeVal && sizeVal.value !== undefined) {\n if (sizeVal.type === 'fixed') {\n size = pxToEmWithUnits(sizeVal.value);\n } else if (sizeVal.type === 'relative') {\n size = RELATIVE_SIZE_MAP[sizeVal.value];\n }\n }\n\n const centerX = radialCenterToCss(opts.bg.center_x);\n const centerY = radialCenterToCss(opts.bg.center_y);\n\n return {\n size: undefined,\n pos: undefined,\n image:\n 'radial-gradient(' +\n `circle ${size || 'farthest-corner'} at ${centerX} ${centerY}` +\n ',' +\n colors\n .map(color => correctColor(color))\n .join(',') +\n ')'\n };\n}\n\nfunction image(opts: {\n bg: MaybeMissing<ImageBackground>;\n}): {\n size: string | undefined;\n pos: string | undefined;\n image: string;\n} | undefined {\n const image = opts.bg?.image_url;\n\n if (!image) {\n return;\n }\n\n return {\n size: imageSize(opts.bg.scale),\n pos: imagePos(opts.bg),\n image: 'url(\"' + htmlFilter(image) + '\")'\n };\n}\n\nexport function imageSize(scale?: ImageScale): string {\n if (scale === 'fit') {\n return 'contain';\n } else if (scale === 'stretch') {\n return 'fill';\n } else if (scale === 'no_scale') {\n return 'none';\n }\n\n // 'fill' and default\n return 'cover';\n}\n\nexport function imagePos(obj: {\n content_alignment_horizontal?: AlignmentHorizontal;\n content_alignment_vertical?: AlignmentVertical;\n}): string {\n let hpos: string;\n let vpos: string;\n\n if (obj.content_alignment_horizontal === 'left') {\n hpos = '0%';\n } else if (obj.content_alignment_horizontal === 'right') {\n hpos = '100%';\n } else {\n hpos = '50%';\n }\n\n if (obj.content_alignment_vertical === 'top') {\n vpos = '0%';\n } else if (obj.content_alignment_vertical === 'bottom') {\n vpos = '100%';\n } else {\n vpos = '50%';\n }\n\n return hpos + ' ' + vpos;\n}\n","export function getUrlSchema(url: string): string {\n const match = /^([^/]+):\\/\\//.exec(url);\n\n return match && match[1] || '';\n}\n\nexport function isBuiltinSchema(schema: string, builtinSchemas: Set<string>): boolean {\n return builtinSchemas.has(schema);\n}\n","import type { DisappearAction, VisibilityAction } from '../../typings/common';\nimport type { RootCtxValue } from '../context/root';\nimport { getUrlSchema, isBuiltinSchema } from '../utils/url';\n\nfunction checkPercentage(isVisibility: boolean, val: number | undefined, defaultVal: number): number {\n if (typeof val === 'number') {\n if (\n isVisibility && val > 0 && val <= 100 ||\n !isVisibility && val >= 0 && val < 100\n ) {\n return val;\n }\n }\n return defaultVal;\n}\n\nexport function visibilityAction(node: HTMLElement, {\n visibilityActions,\n disappearActions,\n rootCtx\n}: {\n visibilityActions?: VisibilityAction[];\n disappearActions?: DisappearAction[];\n rootCtx: RootCtxValue;\n}) {\n const visibilityStatus: {\n type: 'visibility' | 'disappear';\n index: number;\n action: VisibilityAction | DisappearAction;\n visible: boolean;\n count: number;\n finished: boolean;\n timer?: ReturnType<typeof setTimeout>;\n }[] = [];\n\n if (visibilityActions) {\n visibilityActions.forEach(it => {\n visibilityStatus.push({\n type: 'visibility',\n index: visibilityStatus.length,\n action: it,\n visible: false,\n count: 0,\n finished: false\n });\n });\n }\n\n if (disappearActions) {\n disappearActions.forEach(it => {\n visibilityStatus.push({\n type: 'disappear',\n index: visibilityStatus.length,\n action: it,\n visible: false,\n count: 0,\n // false, so disappear only works after the element becomes visible\n finished: false\n });\n });\n }\n\n const calcedList: {\n visibility_percentage: number;\n visibility_duration: number | undefined;\n log_limit: number | undefined;\n }[] = visibilityStatus.map(it => {\n const isVisibility = it.type === 'visibility';\n const calced = rootCtx.getJsonWithVars({\n visibility_percentage: it.action.visibility_percentage,\n visibility_duration: isVisibility ?\n (it.action as VisibilityAction).visibility_duration :\n (it.action as DisappearAction).disappear_duration,\n log_limit: it.action.log_limit\n });\n\n return {\n ...calced,\n visibility_percentage: checkPercentage(\n isVisibility,\n calced.visibility_percentage,\n isVisibility ? 50 : 0\n )\n };\n });\n\n const thresholds = [...new Set(calcedList.map(it =>\n it.visibility_percentage / 100\n ))];\n\n const observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n visibilityStatus.forEach(status => {\n const calcedParams = calcedList[status.index];\n const isVisibility = status.type === 'visibility';\n let nowVisible;\n if (calcedParams.visibility_percentage === 0) {\n nowVisible = entry.intersectionRatio >= 1e-12;\n } else {\n nowVisible = entry.intersectionRatio >= (calcedParams.visibility_percentage / 100);\n }\n const shouldProc = isVisibility ?\n !status.visible && nowVisible :\n status.visible && !nowVisible;\n const shouldClear = isVisibility ?\n !nowVisible :\n nowVisible;\n\n if (shouldProc) {\n if (!status.finished) {\n status.timer = setTimeout(() => {\n ++status.count;\n\n const limit = calcedParams.log_limit === 0 ? Infinity : (calcedParams.log_limit || 1);\n if (++status.count >= limit) {\n status.finished = true;\n }\n\n const calcedAction = rootCtx.getJsonWithVars(status.action);\n const actionUrl = calcedAction.url;\n if (actionUrl) {\n const schema = getUrlSchema(actionUrl);\n if (schema && !isBuiltinSchema(schema, rootCtx.getBuiltinProtocols())) {\n if (schema === 'div-action') {\n rootCtx.execAction(calcedAction);\n } else if (calcedAction.log_id) {\n rootCtx.execCustomAction(calcedAction as VisibilityAction & { url: string });\n }\n }\n }\n\n rootCtx.logStat(isVisibility ? 'visible' : 'disappear', calcedAction);\n }, calcedList[status.index].visibility_duration || 800);\n }\n } else if (shouldClear) {\n if (status.timer) {\n clearTimeout(status.timer);\n }\n }\n status.visible = nowVisible;\n });\n });\n }, {\n threshold: thresholds\n });\n\n observer.observe(node);\n\n return {\n destroy() {\n observer.disconnect();\n\n visibilityStatus.forEach(status => {\n if (status.timer) {\n clearTimeout(status.timer);\n }\n });\n }\n };\n}\n","import type { Mods } from '../types/general';\n\nfunction push(list: string[], val: string | undefined): void {\n if (val) {\n list.push(val);\n }\n}\n\nexport function genClassName(\n component: string,\n css: Record<string, string>,\n mods: Mods\n): string {\n const res: string[] = [];\n\n push(res, css[component]);\n\n for (const key in mods) {\n if (mods.hasOwnProperty(key)) {\n const val = mods[key];\n if (val) {\n const cssKey = `${component}_${key}` + (typeof val === 'string' ? `_${val}` : '');\n\n push(res, css[cssKey]);\n }\n }\n }\n\n return res.join(' ');\n}\n","import type { RootCtxValue } from '../context/root';\nimport type { DivBase, TemplateContext } from '../../typings/common';\nimport type { DivBaseData } from '../types/base';\n\nexport interface DevtoolResult {\n destroy(): void;\n}\n\nfunction devtoolReal(node: HTMLElement, {\n json,\n origJson,\n templateContext,\n rootCtx\n}: {\n json: Partial<DivBaseData>;\n origJson?: DivBase | undefined;\n templateContext: TemplateContext;\n rootCtx: RootCtxValue;\n}): DevtoolResult {\n rootCtx.registerComponent?.({\n node,\n json,\n origJson,\n templateContext\n });\n\n return {\n destroy() {\n rootCtx.unregisterComponent?.({ node });\n }\n };\n}\n\nexport const devtool = process.env.DEVTOOL ? devtoolReal : undefined;\n","import type { AppearanceTransition, DivBaseData } from '../types/base';\nimport type { TemplateContext } from '../../typings/common';\nimport type { TransitionChange } from '../types/base';\n\nexport const STATE_CTX = Symbol('state');\n\nexport interface StateInterface {\n getChild(id: string): StateInterface | undefined;\n setState(stateId: string): void;\n}\n\nexport interface StateCtxValue {\n registerInstance(id: string, block: StateInterface): void;\n\n unregisterInstance(id: string): void;\n\n registerChildWithTransitionIn(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: AppearanceTransition,\n node: HTMLElement\n ): Promise<void>;\n\n registerChildWithTransitionOut(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: AppearanceTransition,\n node: HTMLElement\n ): Promise<void>;\n\n registerChildWithTransitionChange(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: TransitionChange,\n node: HTMLElement\n ): Promise<void>;\n\n hasTransitionChange(id?: string): boolean;\n\n runVisibilityTransition(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: AppearanceTransition,\n node: HTMLElement,\n direction: 'in' | 'out'\n ): Promise<void>;\n\n registerChild(id: string): void;\n unregisterChild(id: string): void;\n}\n","import type { EdgeInsets } from '../types/edgeInserts';\nimport { pxToEm } from './pxToEm';\n\nexport function edgeInsertsToCss(edgeInsets: EdgeInsets): string {\n return pxToEm(edgeInsets.top || 0) +\n ' ' +\n pxToEm(edgeInsets.right || 0) +\n ' ' +\n pxToEm(edgeInsets.bottom || 0) +\n ' ' +\n pxToEm(edgeInsets.left || 0);\n}\n","export function isNumber(val: number | undefined): val is number {\n if (typeof val !== 'number' && typeof val !== 'string') {\n return false;\n }\n\n const num = Number(val);\n\n return !isNaN(num);\n}\n","import { isNumber } from './isNumber';\n\nexport function isNonNegativeNumber(val: number | undefined): val is number {\n return isNumber(val) && val >= 0;\n}\n","import type { EdgeInsets } from '../types/edgeInserts';\nimport { edgeInsertsToCss } from './edgeInsertsToCss';\nimport { isNonNegativeNumber } from './isNonNegativeNumber';\n\nexport function correctEdgeInserts(edgeInsets: EdgeInsets | undefined, defaultVal: string): string {\n if (!edgeInsets) {\n return defaultVal;\n }\n\n const list = [\n edgeInsets.top,\n edgeInsets.right,\n edgeInsets.bottom,\n edgeInsets.left\n ];\n\n for (let i = 0; i < list.length; ++i) {\n if (list[i] && !isNonNegativeNumber(list[i])) {\n return defaultVal;\n }\n }\n\n return edgeInsertsToCss(edgeInsets);\n}\n","export function correctNonNegativeNumber(val: number | undefined, defaultVal: number): number {\n const num = Number(val);\n if (isNaN(num) || num < 0) {\n return defaultVal;\n }\n return num;\n}\n","const hasOwnProperty = Object.prototype.hasOwnProperty;\n\nexport function isDeepEqual<A, B>(a: A, b: B): boolean {\n if (Object.is(a, b)) {\n return true;\n }\n\n if (\n typeof a !== 'object' ||\n a === null ||\n typeof b !== 'object' ||\n b === null\n ) {\n return Object.is(a, b);\n }\n\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n for (let i = 0; i < keysA.length; i++) {\n const key = keysA[i];\n\n if (!hasOwnProperty.call(b, key) || !isDeepEqual(a[key as keyof A], b[key as keyof B])) {\n return false;\n }\n }\n\n return true;\n}\n","import { isDeepEqual } from './isDeepEqual';\n\nexport function assignIfDifferent<A, B>(newVal: A, defaultVal: B): A | B {\n if (isDeepEqual(newVal, defaultVal)) {\n return defaultVal;\n }\n return newVal;\n}\n","import type { Interpolation } from '../types/base';\n\nexport function correctCSSInterpolator(\n interpolator: string | undefined,\n defaultVal: Interpolation\n): Interpolation {\n if (\n interpolator === 'linear' ||\n interpolator === 'ease' ||\n interpolator === 'ease_in_out' ||\n interpolator === 'ease_in' ||\n interpolator === 'ease_out'\n ) {\n return interpolator;\n }\n\n return defaultVal;\n}\n","export function correctNumber(val: number | undefined, defaultVal: number): number {\n const num = Number(val);\n if (isNaN(num)) {\n return defaultVal;\n }\n return num;\n}\n","import { ActionAnimation, AnyAnimation } from '../types/actionable';\n\nexport function flattenAnimation(animation: ActionAnimation): AnyAnimation[] {\n const res: AnyAnimation[] = [];\n\n if (animation.name === 'set') {\n (animation.items || []).forEach(item => {\n res.push(...flattenAnimation(item));\n });\n } else {\n res.push(animation);\n }\n\n return res;\n}\n","import type { EdgeInsets } from '../types/edgeInserts';\nimport { isNonNegativeNumber } from './isNonNegativeNumber';\n\nexport function correctEdgeInsertsObject(\n edgeInsets: EdgeInsets | undefined,\n defaultVal: EdgeInsets | null\n): EdgeInsets | null {\n if (!edgeInsets || typeof edgeInsets !== 'object') {\n return defaultVal;\n }\n\n const list = [\n 'top',\n 'right',\n 'bottom',\n 'left'\n ] as const;\n\n for (let i = 0; i < list.length; ++i) {\n if (edgeInsets[list[i]] && !isNonNegativeNumber(edgeInsets[list[i]])) {\n return defaultVal;\n }\n }\n\n return edgeInsets;\n}\n","import type { CornersRadius } from '../types/border';\nimport { pxToEm } from './pxToEm';\n\nexport function borderRadius(cornersRadius: CornersRadius, defaultRadius = 0, fontSize = 10): string {\n return [\n cornersRadius['top-left'],\n cornersRadius['top-right'],\n cornersRadius['bottom-right'],\n cornersRadius['bottom-left']\n ]\n .map(it => pxToEm((it || defaultRadius) / fontSize * 10))\n .join(' ');\n}\n","// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport function doNothing(): void {}\n","export const ACTION_CTX = Symbol('action');\n\nexport interface ActionCtxValue {\n hasAction(): boolean;\n}\n","<script lang=\"ts\">\n import { getContext, setContext } from 'svelte';\n\n import rootCss from '../Root.module.css';\n\n import type { Action } from '../../../typings/common';\n import type { MaybeMissing } from '../../expressions/json';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { doNothing } from '../../utils/doNothing';\n import { ACTION_CTX, ActionCtxValue } from '../../context/action';\n import { wrapError } from '../../utils/wrapError';\n import { getUrlSchema, isBuiltinSchema } from '../../utils/url';\n import { Coords, getTouchCoords } from '../../utils/getTouchCoords';\n\n export let actions: MaybeMissing<Action[]> | undefined = undefined;\n export let doubleTapActions: MaybeMissing<Action[]> | undefined = undefined;\n export let longTapActions: MaybeMissing<Action[]> | undefined = undefined;\n export let cls = '';\n export let style: string | null = null;\n export let attrs: Record<string, string | undefined> | undefined = undefined;\n export let use: ((element: HTMLElement, opts?: any) => void) = doNothing;\n export let customAction: ((event: Event) => boolean) | null = null;\n export let isNativeActionAnimation = true;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n const actionCtx = getContext<ActionCtxValue>(ACTION_CTX);\n\n setContext<ActionCtxValue>(ACTION_CTX, {\n hasAction(): boolean {\n return Boolean(actionCtx.hasAction() || actions?.length);\n }\n });\n\n const MIN_SWIPE_PX = 8;\n const MIN_LONG_TAP_DURATION = 400;\n\n let href = '';\n let target: string | undefined = undefined;\n let startTs = -1;\n let startCoords: Coords | null = null;\n let isChanged = false;\n let hasJSAction = false;\n\n $: {\n if (Array.isArray(actions) && actions?.length) {\n for (let i = 0; i < actions.length; ++i) {\n const url = actions[i].url;\n\n if (url) {\n href = url;\n target = actions[i].target || undefined;\n break;\n }\n }\n }\n\n if (Array.isArray(actions) && actions?.length && actionCtx.hasAction()) {\n href = '';\n rootCtx.logError(wrapError(new Error('Actionable element is forbidden inside other actionable element'), {\n level: 'warn',\n additional: {\n actions\n }\n }));\n }\n\n hasJSAction = Boolean(customAction);\n if (href && !isBuiltinSchema(getUrlSchema(href), rootCtx.getBuiltinProtocols())) {\n href = '';\n hasJSAction = true;\n } else if (!href && Array.isArray(actions) && actions?.length) {\n hasJSAction = true;\n rootCtx.logError(wrapError(new Error('The component has a list of actions, but does not have a real action'), {\n level: 'warn',\n additional: {\n actions\n }\n }));\n }\n }\n\n async function onClick(event: MouseEvent): Promise<void> {\n if (actionCtx.hasAction()) {\n return;\n }\n\n if (event.button !== undefined && event.button !== 0) {\n return;\n }\n\n const cancelled = customAction?.(event) === false;\n\n if (cancelled) {\n event.preventDefault();\n } else if (actions) {\n const hasCustomAction = actions.some(action => {\n const url = action?.url;\n if (!url) {\n return false;\n }\n\n const schema = getUrlSchema(url);\n\n return schema && !isBuiltinSchema(schema, rootCtx.getBuiltinProtocols());\n });\n if (hasCustomAction) {\n event.preventDefault();\n }\n rootCtx.execAnyActions(actions);\n }\n }\n\n function onDoubleClick(event: MouseEvent): void {\n if (actionCtx.hasAction()) {\n return;\n }\n\n if (event.button !== undefined && event.button !== 0) {\n return;\n }\n\n rootCtx.execAnyActions(doubleTapActions, true);\n }\n\n function onTouchStart(event: TouchEvent): void {\n if (event.touches.length > 1) {\n return;\n }\n\n startCoords = getTouchCoords(event);\n isChanged = false;\n startTs = Date.now();\n }\n\n function onTouchMove(event: TouchEvent): void {\n if (!startCoords) {\n return;\n }\n\n const coords = getTouchCoords(event);\n\n if (Math.abs(startCoords.x - coords.x) > MIN_SWIPE_PX || Math.abs(startCoords.y - coords.y) > MIN_SWIPE_PX) {\n isChanged = true;\n }\n }\n\n function onTouchEnd(): void {\n if (!startCoords || startTs < 0) {\n return;\n }\n\n if (!isChanged && (Date.now() - startTs) >= MIN_LONG_TAP_DURATION) {\n rootCtx.execAnyActions(longTapActions, true);\n }\n\n startCoords = null;\n startTs = -1;\n }\n\n function onKeydown(event: KeyboardEvent): void {\n // todo check event.target is not inside current element\n\n const target = event.target;\n if (target instanceof HTMLElement) {\n if (target.tagName === 'INPUT' || target.contentEditable === 'true') {\n return;\n }\n }\n\n if (event.ctrlKey || event.metaKey || event.altKey || event.shiftKey) {\n return;\n }\n\n if (event.key === 'Enter' && Array.isArray(actions) && actions.length) {\n rootCtx.execAnyActions(actions);\n event.preventDefault();\n }\n }\n</script>\n\n{#if href}\n <a\n use:use\n {href}\n {target}\n {style}\n class=\"{cls} {isNativeActionAnimation ? rootCss.root__clickable : rootCss['root__clickable-no-transition']} {longTapActions?.length ? rootCss['root_disabled-context-menu'] : ''}\"\n on:click={onClick}\n on:click\n on:dblclick={doubleTapActions?.length ? onDoubleClick : null}\n on:touchstart={longTapActions?.length ? onTouchStart : null}\n on:touchmove={longTapActions?.length ? onTouchMove : null}\n on:touchend={longTapActions?.length ? onTouchEnd : null}\n on:touchcancel={longTapActions?.length ? onTouchEnd : null}\n on:keydown={onKeydown}\n on:focus\n on:blur\n {...attrs}\n >\n <slot />\n </a>\n{:else}\n <!-- svelte-ignore a11y-no-noninteractive-tabindex -->\n <span\n use:use\n class=\"{cls}{hasJSAction ? ` ${isNativeActionAnimation ? rootCss.root__clickable : rootCss['root__clickable-no-transition']} ${rootCss.root__unselectable}` : ''} {longTapActions?.length ? rootCss['root_disabled-context-menu'] : ''}\"\n {style}\n role={hasJSAction ? 'button' : null}\n tabindex={hasJSAction ? 0 : null}\n on:click={hasJSAction ? onClick : null}\n on:click\n on:dblclick={doubleTapActions?.length ? onDoubleClick : null}\n on:touchstart={longTapActions?.length ? onTouchStart : null}\n on:touchmove={longTapActions?.length ? onTouchMove : null}\n on:touchend={longTapActions?.length ? onTouchEnd : null}\n on:touchcancel={longTapActions?.length ? onTouchEnd : null}\n on:keydown={onKeydown}\n on:focus\n on:blur\n {...attrs}\n >\n <slot />\n </span>\n{/if}\n","// extracted by mini-css-extract-plugin\nexport default {\"outer-background\":\"divkit-bf253\",\"outer-background_clip\":\"divkit-dcad7\",\"outer-background__item\":\"divkit-b921d\",\"outer-background__item_hidden\":\"divkit-cd613\"};","import { isNumber } from './isNumber';\n\nexport function isPositiveNumber(val: number | undefined): val is number {\n return isNumber(val) && val > 0;\n}\n","import type { Filter } from '../types/filter';\nimport type { MaybeMissing } from '../expressions/json';\nimport { LogError, wrapError } from './wrapError';\nimport { isPositiveNumber } from './isPositiveNumber';\nimport { pxToEmWithUnits } from './pxToEm';\n\nexport function getCssFilter(filters: MaybeMissing<Filter>[], logError: LogError): string {\n return filters.map(filter => {\n if (filter?.type === 'blur') {\n if (isPositiveNumber(filter.radius)) {\n return `blur(${pxToEmWithUnits(filter.radius / 2)})`;\n }\n } else {\n logError(wrapError(new Error('Unknown filter'), {\n level: 'warn',\n additional: {\n filter: filter?.type\n }\n }));\n }\n }).filter(Boolean).join(' ');\n}\n","<script lang=\"ts\">\n import { getContext } from 'svelte';\n\n import css from './OuterBackground.module.css';\n\n import type { Style } from '../../types/general';\n import type { Background } from '../../types/background';\n import type { MaybeMissing } from '../../expressions/json';\n import { getBackground } from '../../utils/background';\n import { makeStyle } from '../../utils/makeStyle';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { getCssFilter } from '../../utils/filters';\n\n export let background: MaybeMissing<Background[]> = [];\n export let radius = '';\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n $: styles = background.map(bg => {\n const stl: Style = {};\n const obj: {\n image_url?: string;\n style: Style;\n } = {\n style: stl\n };\n\n if (bg.type === 'nine_patch_image' && bg.insets) {\n stl['border-image'] = `url(\"${bg.image_url}\") ${bg.insets.top || 0} ${bg.insets.right || 0} ${bg.insets.bottom || 0} ${bg.insets.left || 0} fill`;\n stl['border-image-width'] = 'auto';\n } else {\n const res = getBackground([bg]);\n\n if (bg.type === 'solid') {\n stl['background-color'] = res.color;\n }\n if (bg.type === 'gradient') {\n stl['background-image'] = res.image;\n }\n if (bg.type === 'image') {\n stl.opacity = Number(bg.alpha);\n obj.image_url = bg.image_url;\n stl['object-fit'] = res.size;\n stl['object-position'] = res.position;\n\n if (Array.isArray(bg.filters) && bg.filters.length) {\n stl.filter = getCssFilter(bg.filters, rootCtx.logError);\n }\n }\n }\n\n return obj;\n });\n\n function onImgError(event: Event): void {\n if (event.target && 'classList' in event.target) {\n (event.target as HTMLElement).classList.add(css['outer-background__item_hidden']);\n }\n }\n</script>\n\n<span\n class={css['outer-background'] + (radius ? ' ' + css['outer-background_clip'] : '')}\n style:border-radius={radius}\n>\n {#each styles as item}\n {#if item.image_url}\n <img\n src={item.image_url}\n alt=\"\"\n aria-hidden=\"true\"\n loading=\"lazy\"\n decoding=\"async\"\n class={css['outer-background__item']}\n style={makeStyle(item.style)}\n on:error={onImgError}\n >{:else}<span class={css['outer-background__item']} style={makeStyle(item.style)}></span>\n {/if}\n {/each}\n</span>\n","<script lang=\"ts\">\n import { getContext, onDestroy, tick } from 'svelte';\n\n import css from './Outer.module.css';\n\n import type { DivBaseData } from '../../types/base';\n import type { Mods, Style } from '../../types/general';\n import type { ActionAnimation, AnyAnimation, DivActionableData } from '../../types/actionable';\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivBase, DivExtension, TemplateContext } from '../../../typings/common';\n import type { Visibility } from '../../types/base';\n import type { Action } from '../../../typings/common';\n import type { MaybeMissing } from '../../expressions/json';\n import type { EdgeInsets } from '../../types/edgeInserts';\n import type { CornersRadius } from '../../types/border';\n import type { WrapContentSize } from '../../types/sizes';\n import type { Background } from '../../types/background';\n import { makeStyle } from '../../utils/makeStyle';\n import { pxToEm, pxToEmWithUnits } from '../../utils/pxToEm';\n import { getBackground } from '../../utils/background';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { visibilityAction } from '../../use/visibilityAction';\n import { genClassName } from '../../utils/genClassName';\n import { devtool, DevtoolResult } from '../../use/devtool';\n import { STATE_CTX, StateCtxValue } from '../../context/state';\n import { correctEdgeInserts } from '../../utils/correctEdgeInserts';\n import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n import { correctAlpha } from '../../utils/correctAlpha';\n import { assignIfDifferent } from '../../utils/assignIfDifferent';\n import { correctColor } from '../../utils/correctColor';\n import { correctVisibility } from '../../utils/correctVisibility';\n import { wrapError } from '../../utils/wrapError';\n import { correctCSSInterpolator } from '../../utils/correctCSSInterpolator';\n import { correctNumber } from '../../utils/correctNumber';\n import { flattenAnimation } from '../../utils/flattenAnimation';\n import { correctEdgeInsertsObject } from '../../utils/correctEdgeInsertsObject';\n import { edgeInsertsToCss } from '../../utils/edgeInsertsToCss';\n import { sumEdgeInsets } from '../../utils/sumEdgeInsets';\n import { correctBorderRadiusObject } from '../../utils/correctBorderRadiusObject';\n import { borderRadius } from '../../utils/borderRadius';\n import { isNonNegativeNumber } from '../../utils/isNonNegativeNumber';\n import Actionable from './Actionable.svelte';\n import OuterBackground from './OuterBackground.svelte';\n import { Truthy } from '../../utils/truthy';\n\n export let json: Partial<DivBaseData & DivActionableData> = {};\n export let origJson: DivBase | undefined = undefined;\n export let templateContext: TemplateContext;\n export let cls = '';\n export let style: Style | undefined = undefined;\n export let layoutParams: LayoutParams = {};\n export let customDescription = false;\n export let customPaddings = false;\n export let customActions = '';\n export let additionalPaddings: EdgeInsets | null = null;\n export let heightByAspect = false;\n export let parentOf: DivBaseData[] | undefined = undefined;\n export let replaceItems: ((items: DivBaseData[]) => void) | undefined = undefined;\n\n const HORIZONTAL_ALIGN_TO_GENERAL = {\n left: 'start',\n center: 'center',\n right: 'end'\n };\n\n const VERTICAL_ALIGN_TO_GENERAL = {\n top: 'start',\n center: 'center',\n bottom: 'end',\n baseline: 'baseline'\n };\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n const stateCtx = getContext<StateCtxValue>(STATE_CTX);\n\n let currentNode: HTMLElement;\n let attrs: Record<string, string> | undefined;\n let extensions: DivExtension[] | null = null;\n\n let prevChilds: string[] = [];\n $: {\n prevChilds.forEach(id => {\n rootCtx.unregisterParentOf(id);\n });\n prevChilds = [];\n if (parentOf) {\n parentOf.forEach(item => {\n if (item.id) {\n prevChilds.push(item.id);\n rootCtx.registerParentOf(item.id, {\n replaceWith\n });\n }\n });\n }\n }\n\n function replaceWith(id: string, items?: DivBase[]): void {\n if (!Array.isArray(parentOf) || !replaceItems) {\n return;\n }\n\n const index = parentOf.findIndex(json => json?.id === id);\n const newItems = parentOf.slice();\n newItems.splice(index, 1, ...(items || []));\n\n parentOf = newItems;\n\n replaceItems(newItems);\n }\n\n $: jsonFocus = rootCtx.getDerivedFromVars(json.focus);\n\n $: jsonBorder = rootCtx.getDerivedFromVars(json.border);\n let borderStyle: Style = {};\n let borderElemStyle: Style = {};\n let hasBorder = false;\n let strokeWidth = 1;\n let strokeColor = 'transparent';\n let cornerRadius = 0;\n let cornersRadius: CornersRadius = {\n 'top-left': 0,\n 'top-right': 0,\n 'bottom-right': 0,\n 'bottom-left': 0\n };\n let backgroundRadius = '';\n $: {\n const border = hasCustomFocus && $jsonFocus?.border ? $jsonFocus.border : $jsonBorder;\n let newBorderStyle: Style = {};\n let newBorderElemStyle: Style = {};\n let newHasBorder = false;\n let newBackgroundRadius = '';\n\n if (border) {\n if (border.has_shadow) {\n const shadow = border.shadow;\n if (shadow) {\n newBorderStyle['box-shadow'] =\n pxToEm(shadow.offset?.x?.value || 0) + ' ' +\n pxToEm(shadow.offset?.y?.value || 0) + ' ' +\n pxToEm(shadow.blur ?? 2) + ' ' +\n correctColor(shadow.color || '#000000', shadow.alpha ?? 0.19);\n } else {\n newBorderStyle['box-shadow'] = '0 1px 2px 0 rgba(0,0,0,.18), 0 0 0 1px rgba(0,0,0,.07)';\n }\n }\n if (border.stroke) {\n newHasBorder = true;\n strokeWidth = correctNonNegativeNumber(border.stroke.width, strokeWidth);\n strokeColor = correctColor(border.stroke.color, 1, strokeColor);\n newBorderElemStyle.border = `${pxToEm(strokeWidth)} solid ${strokeColor}`;\n }\n if (border.corners_radius) {\n cornersRadius = correctBorderRadiusObject(border.corners_radius, cornersRadius);\n newBorderElemStyle['border-radius'] = newBorderStyle['border-radius'] = borderRadius(cornersRadius);\n } else if (border.corner_radius) {\n cornerRadius = correctNonNegativeNumber(border.corner_radius, cornerRadius);\n cornersRadius = {\n 'top-left': cornerRadius,\n 'top-right': cornerRadius,\n 'bottom-right': cornerRadius,\n 'bottom-left': cornerRadius\n };\n newBorderElemStyle['border-radius'] = newBorderStyle['border-radius'] = pxToEm(cornerRadius);\n }\n\n // Clip browser rendering artifacts by border-radius + border-width/2\n if (newHasBorder && strokeWidth && (border.corners_radius || border.corner_radius)) {\n let radius: CornersRadius = { ...cornersRadius };\n\n ([\n 'top-left',\n 'top-right',\n 'bottom-right',\n 'bottom-left'\n ] as const).forEach(corner => {\n radius[corner] = (radius[corner] || 0) + strokeWidth / 2;\n });\n\n newBackgroundRadius = borderRadius(radius);\n }\n }\n borderStyle = assignIfDifferent(newBorderStyle, borderStyle);\n borderElemStyle = assignIfDifferent(newBorderElemStyle, borderElemStyle);\n hasBorder = newHasBorder;\n backgroundRadius = newBackgroundRadius;\n }\n\n $: jsonPaddings = rootCtx.getDerivedFromVars(json.paddings);\n let selfPadding: EdgeInsets | null = null;\n $: {\n selfPadding = correctEdgeInsertsObject(($jsonPaddings && !customPaddings) ? $jsonPaddings : undefined, selfPadding);\n }\n\n $: padding = edgeInsertsToCss(sumEdgeInsets(selfPadding, additionalPaddings));\n\n $: jsonMargins = rootCtx.getDerivedFromVars(json.margins);\n let margin = '';\n $: {\n margin = correctEdgeInserts($jsonMargins, margin);\n }\n\n $: jsonWidth = rootCtx.getDerivedFromVars(json.width);\n $: jsonAlignmentHorizontal = rootCtx.getDerivedFromVars(json.alignment_horizontal);\n let widthMods: Mods = {};\n let width: string | undefined;\n let widthMin: string | undefined;\n let widthMax: string | undefined;\n let widthNum = 0;\n let widthFlexGrow = 0;\n let widthFlexShrink = 0;\n let widthFill = false;\n let hasWidthError = false;\n $: {\n let widthType: 'parent' | 'content' | undefined = undefined;\n let newWidth: string | undefined = undefined;\n let newWidthMin: string | undefined = undefined;\n let newWidthMax: string | undefined = undefined;\n let newWidthMods: Mods = {};\n let newFlexGrow = 0;\n let newFlexShrink = 0;\n let newWidthFill = false;\n let newWidthError = false;\n\n const type = $jsonWidth?.type;\n\n if (type === 'fixed') {\n widthNum = correctNonNegativeNumber($jsonWidth?.value, widthNum);\n newWidth = pxToEm(widthNum);\n } else if (\n type === 'wrap_content' ||\n !layoutParams.overlapParent && (type === 'match_parent' || !type) && layoutParams.parentHorizontalWrapContent\n ) {\n widthType = 'content';\n if (\n type === 'wrap_content' && $jsonWidth?.constrained ||\n (type === 'match_parent' || !type) && layoutParams.parentHorizontalWrapContent\n ) {\n newWidthMods['width-constrained'] = true;\n if (layoutParams.parentContainerOrientation === 'horizontal') {\n newFlexShrink = 1;\n }\n }\n\n if (type === 'wrap_content') {\n const width = $jsonWidth as WrapContentSize;\n if (width.min_size && isNonNegativeNumber(width.min_size.value)) {\n newWidthMin = pxToEm(width.min_size.value);\n }\n if (width.max_size && isNonNegativeNumber(width.max_size.value)) {\n newWidthMax = pxToEm(width.max_size.value);\n }\n }\n\n if (type === 'match_parent' || !type) {\n rootCtx.logError(wrapError(new Error('Cannot place child with match_parent size inside wrap_content'), {\n level: 'warn'\n }));\n }\n } else {\n widthType = 'parent';\n if (layoutParams.parentContainerOrientation === 'vertical' && layoutParams.parentContainerWrap) {\n newWidthError = true;\n rootCtx.logError(wrapError(new Error('Cannot place a match_parent items on the cross-axis of wrap'), {\n level: 'error'\n }));\n }\n if (layoutParams.parentLayoutOrientation === 'vertical') {\n newWidth = `calc(100% - ${pxToEmWithUnits(($jsonMargins?.left || 0) + ($jsonMargins?.right || 0))})`;\n } else if (layoutParams.parentContainerOrientation === 'horizontal') {\n newFlexGrow = $jsonWidth && 'weight' in $jsonWidth && $jsonWidth.weight || 1;\n if (layoutParams.parentContainerWrap) {\n newWidthFill = true;\n }\n }\n }\n\n if (widthType === 'parent') {\n newWidthMods['halign-self'] = 'stretch';\n } else {\n const align = $jsonAlignmentHorizontal;\n if (align === 'left' || align === 'center' || align === 'right') {\n newWidthMods['halign-self'] = HORIZONTAL_ALIGN_TO_GENERAL[align];\n } else {\n newWidthMods['halign-self'] = layoutParams.parentHAlign || 'start';\n }\n }\n\n if (widthType) {\n newWidthMods.width = widthType;\n }\n\n width = newWidth;\n widthMin = newWidthMin;\n widthMax = newWidthMax;\n widthFlexGrow = newFlexGrow;\n widthFlexShrink = newFlexShrink;\n widthMods = assignIfDifferent(newWidthMods, widthMods);\n widthFill = newWidthFill;\n hasWidthError = newWidthError;\n }\n\n $: jsonHeight = rootCtx.getDerivedFromVars(json.height);\n $: jsonAlignmentVertical = rootCtx.getDerivedFromVars(json.alignment_vertical);\n let heightMods: Mods = {};\n let height: string | undefined;\n let heightMin: string | undefined;\n let heightMax: string | undefined;\n let heightNum = 0;\n let heightFlexGrow = 0;\n let heightFlexShrink = 0;\n let heightFill = false;\n let hasHeightError = false;\n $: {\n let heightType: 'parent' | 'content' | undefined = undefined;\n let newHeight: string | undefined = undefined;\n let newHeightMin: string | undefined = undefined;\n let newHeightMax: string | undefined = undefined;\n let newHeightMods: Mods = {};\n let newFlexGrow = 0;\n let newFlexShrink = 0;\n let newHeightFill = false;\n let newHeightError = false;\n\n const type = $jsonHeight?.type;\n\n if (heightByAspect) {\n // auto height\n // no special css needed, so no special heightType\n } else if (type === 'fixed') {\n heightNum = correctNonNegativeNumber($jsonHeight?.value, heightNum);\n newHeight = pxToEm(heightNum);\n } else if (type === 'match_parent' && (layoutParams.overlapParent || !layoutParams.parentVerticalWrapContent)) {\n heightType = 'parent';\n if (layoutParams.parentContainerOrientation === 'horizontal' && layoutParams.parentContainerWrap) {\n newHeightError = true;\n rootCtx.logError(wrapError(new Error('Cannot place a match_parent items on the cross-axis of wrap'), {\n level: 'error'\n }));\n }\n if (layoutParams.parentLayoutOrientation === 'horizontal') {\n newHeight = `calc(100% - ${pxToEmWithUnits(($jsonMargins?.top || 0) + ($jsonMargins?.bottom || 0))})`;\n } else if (layoutParams.parentContainerOrientation === 'vertical') {\n newFlexGrow = $jsonHeight?.weight || 1;\n if (layoutParams.parentContainerWrap) {\n newHeightFill = true;\n }\n }\n } else {\n heightType = 'content';\n if (\n type === 'wrap_content' && $jsonHeight?.constrained ||\n type === 'match_parent' && layoutParams.parentVerticalWrapContent\n ) {\n newHeightMods['height-constrained'] = true;\n if (layoutParams.parentContainerOrientation === 'vertical') {\n newFlexShrink = 1;\n }\n }\n\n if (type === 'wrap_content') {\n const height = $jsonHeight as WrapContentSize;\n if (height?.min_size && isNonNegativeNumber(height.min_size.value)) {\n newHeightMin = pxToEm(height.min_size.value);\n }\n if (height?.max_size && isNonNegativeNumber(height.max_size.value)) {\n newHeightMax = pxToEm(height.max_size.value);\n }\n }\n\n if (type === 'match_parent') {\n rootCtx.logError(wrapError(new Error('Cannot place child with match_parent size inside wrap_content'), {\n level: 'warn'\n }));\n }\n }\n\n if (heightType === 'parent') {\n newHeightMods['valign-self'] = 'stretch';\n } else {\n const align = $jsonAlignmentVertical;\n if (\n align === 'top' ||\n align === 'center' ||\n align === 'bottom' ||\n align === 'baseline' && layoutParams.parentContainerOrientation === 'horizontal'\n ) {\n newHeightMods['valign-self'] = VERTICAL_ALIGN_TO_GENERAL[align];\n } else {\n newHeightMods['valign-self'] = layoutParams.parentVAlign || 'start';\n }\n }\n\n if (heightType) {\n newHeightMods.height = heightType;\n }\n\n height = newHeight;\n heightMin = newHeightMin;\n heightMax = newHeightMax;\n heightFlexGrow = newFlexGrow;\n heightFlexShrink = newFlexShrink;\n heightMods = assignIfDifferent(newHeightMods, heightMods);\n heightFill = newHeightFill;\n hasHeightError = newHeightError;\n }\n\n $: parentOverlapMod = layoutParams.overlapParent ? true : undefined;\n\n $: parentOverlapAbsoluteMod = layoutParams.overlapParent &&\n (!$jsonWidth || $jsonWidth.type === 'match_parent') &&\n $jsonHeight?.type === 'match_parent';\n\n $: gridArea = layoutParams.gridArea ?\n `${layoutParams.gridArea.y + 1}/${layoutParams.gridArea.x + 1}/span ${layoutParams.gridArea.rowSpan}/span ${layoutParams.gridArea.colSpan}` :\n undefined;\n\n $: jsonAlpha = rootCtx.getDerivedFromVars(json.alpha);\n let alpha = 1;\n let opacity: number | undefined;\n $: {\n alpha = correctAlpha($jsonAlpha, alpha);\n opacity = alpha === 1 ? undefined : alpha;\n }\n\n $: jsonAccessibility = rootCtx.getDerivedFromVars(json.accessibility);\n $: {\n attrs = undefined;\n if ($jsonAccessibility && !customDescription && $jsonAccessibility.description) {\n attrs = {};\n attrs['aria-label'] = $jsonAccessibility.description;\n }\n }\n\n $: jsonBackground = rootCtx.getDerivedFromVars(json.background);\n let background: MaybeMissing<Background[]> | undefined;\n let backgroundStyle: Style;\n let hasSeparateBg: boolean;\n $: {\n background = hasCustomFocus && $jsonFocus?.background ? $jsonFocus.background : $jsonBackground;\n backgroundStyle = {};\n hasSeparateBg = false;\n if (Array.isArray(background)) {\n hasSeparateBg =\n background.some(it => it.type === 'image' || it.type === 'nine_patch_image') ||\n Boolean(backgroundRadius);\n\n if (!hasSeparateBg) {\n const res = getBackground(background);\n backgroundStyle['background-color'] = res.color;\n backgroundStyle['background-image'] = res.image;\n backgroundStyle['background-size'] = res.size;\n backgroundStyle['background-position'] = res.position;\n backgroundStyle['background-repeat'] = 'no-repeat';\n }\n }\n }\n\n const jsonTransitionTriggers = layoutParams.fakeElement ?\n [] :\n (json.transition_triggers || ['state_change', 'visibility_change']);\n const hasStateChangeTrigger = jsonTransitionTriggers.indexOf('state_change') !== -1 && json.id;\n const hasVisibilityChangeTrigger = jsonTransitionTriggers.indexOf('visibility_change') !== -1 && json.id;\n\n let stateChangingInProgress: boolean | undefined;\n let visibilityChangingInProgress: boolean | undefined;\n let transitionChangeInProgress: boolean | undefined;\n $: {\n stateChangingInProgress = undefined;\n if (hasStateChangeTrigger && json.transition_in && rootCtx.isRunning('stateChange')) {\n stateChangingInProgress = true;\n }\n }\n $: {\n transitionChangeInProgress = undefined;\n if (\n hasStateChangeTrigger && json.transition_change &&\n rootCtx.isRunning('stateChange') && stateCtx.hasTransitionChange(json.id)\n ) {\n transitionChangeInProgress = true;\n }\n }\n\n $: jsonAction = rootCtx.getDerivedFromVars(json.action);\n $: jsonActions = rootCtx.getDerivedFromVars(json.actions);\n $: jsonDoubleTapActions = rootCtx.getDerivedFromVars(json.doubletap_actions);\n $: jsonLongTapActions = rootCtx.getDerivedFromVars(json.longtap_actions);\n let actions: MaybeMissing<Action>[] = [];\n let doubleTapActions: MaybeMissing<Action>[] = [];\n let longTapActions: MaybeMissing<Action>[] = [];\n let focusActions: MaybeMissing<Action>[] = [];\n let blurActions: MaybeMissing<Action>[] = [];\n $: {\n let newActions = $jsonActions || $jsonAction && [$jsonAction] || [];\n let newDoubleTapActions = $jsonDoubleTapActions || [];\n let newLongTapActions = $jsonLongTapActions || [];\n let newFocusActions = $jsonFocus?.on_focus || [];\n let newBlurActions = $jsonFocus?.on_blur || [];\n\n if (layoutParams.fakeElement) {\n newActions = [];\n newDoubleTapActions = [];\n newLongTapActions = [];\n newFocusActions = [];\n newBlurActions = [];\n } else {\n if (!Array.isArray(newActions)) {\n newActions = [];\n rootCtx.logError(wrapError(new Error('Actions should be array')));\n }\n if (!Array.isArray(newDoubleTapActions)) {\n newDoubleTapActions = [];\n rootCtx.logError(wrapError(new Error('DoubleTapActions should be array')));\n }\n if (!Array.isArray(newLongTapActions)) {\n newLongTapActions = [];\n rootCtx.logError(wrapError(new Error('LongTapActions should be array')));\n }\n if (!Array.isArray(newFocusActions)) {\n newFocusActions = [];\n rootCtx.logError(wrapError(new Error('FocusActions should be array')));\n }\n if (!Array.isArray(newBlurActions)) {\n newBlurActions = [];\n rootCtx.logError(wrapError(new Error('BlurActions should be array')));\n }\n }\n\n if ((newActions.length || newDoubleTapActions.length || newLongTapActions.length) && customActions) {\n newActions = [];\n newDoubleTapActions = [];\n newLongTapActions = [];\n rootCtx.logError(wrapError(new Error(`Cannot use action on component \"${customActions}\"`)));\n }\n\n // todo check parent actions with customActions\n actions = newActions;\n doubleTapActions = newDoubleTapActions;\n longTapActions = newLongTapActions;\n focusActions = newFocusActions;\n blurActions = newBlurActions;\n }\n\n $: jsonActionAnimation = rootCtx.getDerivedFromVars(json.action_animation);\n let actionAnimationList: AnyAnimation[] = [];\n let actionAnimationTransition = '';\n let animationOpacityStart: number | undefined = undefined;\n let animationOpacityEnd: number | undefined = undefined;\n let animationScaleStart: number | undefined = undefined;\n let animationScaleEnd: number | undefined = undefined;\n $: {\n if ($jsonActionAnimation) {\n actionAnimationList = flattenAnimation($jsonActionAnimation as ActionAnimation);\n actionAnimationTransition = actionAnimationList.map(parseActionAnimation).filter(Boolean).join(', ');\n }\n }\n\n function hasNativeAnimation(list: AnyAnimation[]) {\n return list.some(it => it.name === 'native');\n }\n\n function parseActionAnimation(animation: MaybeMissing<AnyAnimation>): string {\n const startValue = correctNumber(animation.start_value, 1);\n const endValue = correctNumber(animation.end_value, 1);\n const delay = correctNonNegativeNumber(animation.start_delay, 0);\n const duration = correctNonNegativeNumber(animation.duration, 300);\n const interpolator = correctCSSInterpolator(animation.interpolator, 'ease_in_out').replace(/_/g, '-');\n\n switch (animation.name) {\n case 'fade':\n animationOpacityStart = startValue;\n animationOpacityEnd = endValue;\n return `opacity ${duration}ms ${interpolator} ${delay}ms`;\n case 'scale':\n animationScaleStart = startValue;\n animationScaleEnd = endValue;\n return `transform ${duration}ms ${interpolator} ${delay}ms`;\n case 'native':\n case 'no_animation':\n return '';\n default:\n rootCtx.logError(wrapError(new Error('Unknown action_animation name'), {\n additional: {\n animation: animation.name\n }\n }));\n return '';\n }\n }\n\n let isVisibilityInited = false;\n let visibility: Visibility = 'visible';\n $: jsonVisibility = rootCtx.getDerivedFromVars(json.visibility);\n $: {\n const prevVisibility = visibility;\n const nextVisibility = correctVisibility($jsonVisibility, visibility);\n\n if (prevVisibility !== nextVisibility) {\n if (isVisibilityInited && (visibility === 'visible' || nextVisibility === 'visible')) {\n onVisibilityChange(nextVisibility);\n } else {\n visibility = nextVisibility;\n }\n }\n\n if (!isVisibilityInited) {\n isVisibilityInited = true;\n }\n }\n\n async function onVisibilityChange(nextVisibility: Visibility) {\n visibility = nextVisibility;\n\n const direction = nextVisibility === 'visible' ? 'in' : 'out';\n const transition = direction === 'in' ? json.transition_in : json.transition_out;\n\n if (\n hasVisibilityChangeTrigger &&\n transition\n ) {\n await tick();\n\n if (direction === 'in') {\n visibilityChangingInProgress = true;\n }\n stateCtx.runVisibilityTransition(\n {\n ...json,\n visibility: 'visible'\n } as DivBaseData,\n templateContext,\n transition,\n currentNode,\n direction\n ).then(() => {\n if (direction === 'in') {\n visibilityChangingInProgress = false;\n }\n }).catch(e => {\n if (direction === 'in') {\n visibilityChangingInProgress = false;\n }\n throw e;\n });\n }\n }\n\n $: mods = {\n ...widthMods,\n ...heightMods,\n 'parent-overlap': parentOverlapMod,\n 'parent-overlap-absolute': parentOverlapAbsoluteMod,\n 'scroll-snap': layoutParams.scrollSnap,\n 'hide-on-transition-in': stateChangingInProgress ||\n visibilityChangingInProgress ||\n transitionChangeInProgress,\n visibility,\n 'has-action-animation': Boolean(actionAnimationTransition),\n 'parent-flex': layoutParams.parentContainerOrientation || undefined,\n 'parent-grid': Boolean(layoutParams.gridArea) || undefined,\n 'has-custom-focus': Boolean(hasCustomFocus && json.focus)\n };\n\n $: jsonTransform = rootCtx.getDerivedFromVars(json.transform);\n let pivotXNum = 0;\n let pivotYNum = 0;\n let transformOrigin: string | undefined;\n let transform: string | undefined;\n $: {\n if ($jsonTransform && $jsonTransform.rotation !== undefined) {\n const pivotX = $jsonTransform.pivot_x || {\n type: 'pivot-percentage',\n value: 50\n };\n pivotXNum = correctNumber(pivotX.value, pivotXNum);\n const pivotXCSSValue = pivotX.type === 'pivot-fixed' ? pxToEm(pivotXNum) : `${pivotXNum}%`;\n const pivotY = $jsonTransform.pivot_y || {\n type: 'pivot-percentage',\n value: 50\n };\n pivotYNum = correctNumber(pivotY.value, pivotYNum);\n const pivotYCSSValue = pivotY.type === 'pivot-fixed' ? pxToEm(pivotYNum) : `${pivotYNum}%`;\n transformOrigin = `${pivotXCSSValue} ${pivotYCSSValue}`;\n transform = `rotate(${$jsonTransform.rotation}deg)`;\n }\n }\n\n // eslint-disable-next-line no-nested-ternary\n $: flexBasis = (widthFill || heightFill) ?\n '100%' :\n ((widthFlexGrow || heightFlexGrow) ? 0 : undefined);\n\n $: stl = {\n ...style,\n ...backgroundStyle,\n ...borderStyle,\n width,\n 'min-width': widthMin,\n 'max-width': widthMax,\n height,\n 'min-height': heightMin,\n // input max-height\n 'max-height': heightMax || style?.['max-height'],\n 'grid-area': gridArea,\n padding,\n margin,\n opacity,\n transition: actionAnimationTransition,\n 'transform-origin': transformOrigin,\n transform,\n 'flex-grow': widthFlexGrow || heightFlexGrow || undefined,\n 'flex-shrink': (widthFlexShrink || heightFlexShrink) ? 1 : undefined,\n 'flex-basis': flexBasis,\n '--divkit-animation-opacity-start': animationOpacityStart,\n '--divkit-animation-opacity-end': animationOpacityEnd,\n '--divkit-animation-scale-start': animationScaleStart,\n '--divkit-animation-scale-end': animationScaleEnd\n };\n\n function useAction(node: HTMLElement) {\n currentNode = node;\n if (hasStateChangeTrigger && json.transition_in) {\n stateCtx.registerChildWithTransitionIn(\n json as DivBaseData,\n templateContext,\n json.transition_in,\n node\n ).then(() => {\n stateChangingInProgress = false;\n }).catch(e => {\n stateChangingInProgress = false;\n throw e;\n });\n }\n if (hasStateChangeTrigger && json.transition_out) {\n stateCtx.registerChildWithTransitionOut(\n json as DivBaseData,\n templateContext,\n json.transition_out,\n node\n );\n }\n if (hasStateChangeTrigger && json.transition_change) {\n stateCtx.registerChildWithTransitionChange(\n json as DivBaseData,\n templateContext,\n json.transition_change,\n node\n ).then(() => {\n transitionChangeInProgress = false;\n }).catch(e => {\n transitionChangeInProgress = false;\n throw e;\n });\n }\n\n const visibilityActions = layoutParams.fakeElement ?\n [] :\n (\n json.visibility_actions ||\n json.visibility_action && [json.visibility_action]\n );\n\n const disappearActions = layoutParams.fakeElement ? [] : json.disappear_actions;\n\n if (\n Array.isArray(visibilityActions) && visibilityActions.length ||\n Array.isArray(disappearActions) && disappearActions.length\n ) {\n visibilityAction(node, {\n visibilityActions,\n disappearActions,\n rootCtx\n });\n }\n\n const id = json.id;\n if (id) {\n stateCtx.registerChild(id);\n }\n\n let dev: DevtoolResult | null = null;\n\n if (devtool && !layoutParams.fakeElement) {\n dev = devtool(node, {\n json,\n origJson,\n rootCtx,\n templateContext\n });\n }\n\n if (Array.isArray(json.extensions)) {\n const ctx = rootCtx.getExtensionContext();\n extensions = json.extensions.map(it => {\n const instance = rootCtx.getExtension(it.id, it.params);\n\n if (instance) {\n instance.mountView?.(node, ctx);\n }\n\n return instance;\n }).filter(Truthy);\n }\n\n return {\n destroy() {\n if (id) {\n stateCtx.unregisterChild(id);\n }\n if (extensions) {\n const ctx = rootCtx.getExtensionContext();\n extensions.forEach(it => {\n it.unmountView?.(node, ctx);\n });\n extensions = null;\n }\n if (dev) {\n dev.destroy();\n }\n }\n };\n }\n\n let hasCustomFocus: boolean;\n $: isPointerFocus = rootCtx.isPointerFocus;\n\n function focusHandler() {\n if (!json.focus) {\n return;\n }\n\n if (!$isPointerFocus) {\n hasCustomFocus = true;\n }\n\n rootCtx.execAnyActions(focusActions);\n }\n\n function blurHandler() {\n if (!json.focus) {\n return;\n }\n\n hasCustomFocus = false;\n rootCtx.execAnyActions(blurActions);\n }\n\n onDestroy(() => {\n prevChilds.forEach(id => {\n rootCtx.unregisterParentOf(id);\n });\n prevChilds = [];\n });\n</script>\n\n{#if !hasWidthError && !hasHeightError}\n <Actionable\n use={useAction}\n cls=\"{cls} {genClassName('outer', css, mods)}\"\n style={makeStyle(stl)}\n {actions}\n {doubleTapActions}\n {longTapActions}\n {attrs}\n isNativeActionAnimation={!actionAnimationList.length || hasNativeAnimation(actionAnimationList)}\n on:focus={focusHandler}\n on:blur={blurHandler}\n >\n {#if hasSeparateBg}<OuterBackground background={background} radius={backgroundRadius} />{/if}<slot {focusHandler} {blurHandler} {hasCustomFocus} />{#if hasBorder}<span class={css.outer__border} style={makeStyle(borderElemStyle)}></span>{/if}\n </Actionable>\n{/if}\n","import type { CornersRadius } from '../types/border';\nimport { isNonNegativeNumber } from './isNonNegativeNumber';\n\nexport function correctBorderRadiusObject(\n cornersRadius: CornersRadius,\n defaultVal: CornersRadius\n): CornersRadius {\n const list = [\n cornersRadius['top-left'],\n cornersRadius['top-right'],\n cornersRadius['bottom-right'],\n cornersRadius['bottom-left']\n ];\n\n for (let i = 0; i < list.length; ++i) {\n if (list[i] && !isNonNegativeNumber(list[i])) {\n return defaultVal;\n }\n }\n\n return cornersRadius;\n}\n","import type { EdgeInsets } from '../types/edgeInserts';\n\nexport function sumEdgeInsets(a: EdgeInsets | null, b: EdgeInsets | null): EdgeInsets {\n if (!a && !b) {\n return {};\n }\n\n if (!b) {\n return a as EdgeInsets;\n }\n\n if (!a) {\n return b;\n }\n\n const res: EdgeInsets = {};\n\n ([\n 'top',\n 'right',\n 'bottom',\n 'left'\n ] as const).forEach(side => {\n const aVal = a[side];\n if (aVal) {\n res[side] = aVal;\n }\n const bVal = b[side];\n if (bVal) {\n res[side] = (res[side] || 0) + bVal;\n }\n });\n\n return res;\n}\n","import { isNonNegativeNumber } from './isNonNegativeNumber';\n\nexport function correctAlpha(val: number | undefined, defaultVal: number): number {\n if (!isNonNegativeNumber(val) || val === undefined || val > 1) {\n return defaultVal;\n }\n return Number(val);\n}\n","import { Visibility } from '../types/base';\n\nexport function correctVisibility(visibility: string | undefined, defaultVal: Visibility): Visibility {\n if (\n visibility === 'visible' ||\n visibility === 'invisible' ||\n visibility === 'gone'\n ) {\n return visibility;\n }\n\n return defaultVal;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"text-range\":\"divkit-faf07\",\"text-range_singleline\":\"divkit-ccb64\",\"text-range__top-offset\":\"divkit-d9237\",\"text-range_decoration_both\":\"divkit-d7e07\",\"text-range_decoration_underline\":\"divkit-f3dde\",\"text-range_decoration_strike\":\"divkit-d27b7\",\"text-range_decoration_none\":\"divkit-c6b0f\"};","export function correctPositiveNumber(val: number | undefined, defaultVal: number): number {\n const num = Number(val);\n if (isNaN(num) || num <= 0) {\n return defaultVal;\n }\n return num;\n}\n","import type { FontWeight } from '../types/text';\n\nexport function fontWeightToCss(fontWeight?: FontWeight | undefined): number | undefined {\n if (\n fontWeight === 'light' ||\n fontWeight === 'medium' ||\n fontWeight === 'bold' ||\n fontWeight === 'regular'\n ) {\n if (fontWeight === 'medium') {\n return 500;\n } else if (fontWeight === 'bold') {\n return 700;\n } else if (fontWeight === 'light') {\n return 300;\n }\n\n return 400;\n }\n}\n","import type { FontWeight } from '../types/text';\nimport { fontWeightToCss } from './fontWeightToCss';\n\nexport function correctFontWeight(\n fontWeight: FontWeight | undefined,\n defaultVal: number | undefined\n): number | undefined {\n return fontWeightToCss(fontWeight) || defaultVal;\n}\n","<script lang=\"ts\">\n import { getContext } from 'svelte';\n import css from './TextRange.module.css';\n\n import type { TextRange } from '../../types/text';\n import type { Action } from '../../../typings/common';\n import type { MaybeMissing } from '../../expressions/json';\n import Actionable from '../utilities/Actionable.svelte';\n import { pxToEm } from '../../utils/pxToEm';\n import { makeStyle } from '../../utils/makeStyle';\n import { genClassName } from '../../utils/genClassName';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { isPositiveNumber } from '../../utils/isPositiveNumber';\n import { correctFontWeight } from '../../utils/correctFontWeight';\n import { correctColor } from '../../utils/correctColor';\n import { isNonNegativeNumber } from '../../utils/isNonNegativeNumber';\n import { getBackground } from '../../utils/background';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n\n export let text: string;\n export let rootFontSize: number;\n export let textStyles: Partial<TextRange> = {};\n export let singleline = false;\n export let actions: MaybeMissing<Action[]> | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n let decoration = 'none';\n $: {\n let newDecoration = 'none';\n\n if (textStyles.underline || textStyles.strike) {\n if (textStyles.underline === 'single' && textStyles.strike === 'single') {\n newDecoration = 'both';\n } else if (textStyles.underline === 'single') {\n newDecoration = 'underline';\n } else if (textStyles.strike === 'single') {\n newDecoration = 'strike';\n }\n }\n\n decoration = newDecoration;\n }\n\n let fontSize = 12;\n $: {\n fontSize = correctPositiveNumber(textStyles.font_size, fontSize);\n }\n\n let lineHeight = 1.25;\n $: {\n if (isPositiveNumber(textStyles.line_height)) {\n lineHeight = Number(textStyles.line_height) / fontSize;\n }\n }\n\n let letterSpacing = '';\n $: {\n if (isNonNegativeNumber(textStyles.letter_spacing)) {\n letterSpacing = pxToEm(textStyles.letter_spacing);\n }\n }\n\n let fontWeight: number | undefined = undefined;\n let fontFamily = '';\n $: {\n fontWeight = correctFontWeight(textStyles.font_weight, fontWeight);\n if (typeof textStyles.font_family === 'string' && textStyles.font_family) {\n fontFamily = rootCtx.typefaceProvider(textStyles.font_family, {\n fontWeight: fontWeight || 400\n });\n } else {\n fontFamily = '';\n }\n }\n\n let color = '';\n $: {\n color = correctColor(textStyles.text_color, 1, color);\n }\n\n $: topOffset = textStyles.top_offset ? pxToEm(textStyles.top_offset) : '';\n\n $: bg = textStyles.background ? getBackground([textStyles.background]) : null;\n\n let border: {\n color: string;\n width: number;\n } | null = null;\n $: if (textStyles.border?.stroke && correctColor(textStyles.border.stroke.color) !== 'transparent' && isPositiveNumber(textStyles.border.stroke.width)) {\n border = {\n color: textStyles.border.stroke.color,\n width: textStyles.border.stroke.width\n };\n } else {\n border = null;\n }\n\n $: borderRadius = correctPositiveNumber(textStyles.border?.corner_radius, 0);\n\n $: mods = {\n singleline,\n decoration\n };\n\n $: style = {\n 'font-size': pxToEm((fontSize * 10) / rootFontSize),\n 'line-height': lineHeight,\n 'letter-spacing': letterSpacing,\n 'font-weight': fontWeight,\n 'font-family': fontFamily,\n color,\n background: bg?.color || undefined,\n /**\n * box-shadow instead of border because:\n * 1) Doesn't take space as border does\n * 2) There should not be a border-radius on line breaks, but there should be a border\n */\n 'box-shadow': border ? `inset 0 0 0 ${pxToEm(border.width)} ${border.color}` : undefined,\n 'border-radius': borderRadius ? pxToEm(borderRadius) : undefined\n };\n</script>\n\n{#if topOffset}<span class={css['text-range__top-offset']} style:margin-top={topOffset}></span>{/if}<Actionable\n cls={genClassName('text-range', css, mods)}\n {actions}\n style={makeStyle(style)}\n>\n {text}\n</Actionable>\n","import type { AlignmentHorizontal } from '../types/alignment';\n\nexport function correctAlignmentHorizontal(\n orientation: string | undefined,\n defaultVal: AlignmentHorizontal\n): AlignmentHorizontal {\n if (\n orientation === 'left' ||\n orientation === 'center' ||\n orientation === 'right'\n ) {\n return orientation;\n }\n\n return defaultVal;\n}\n","import type { AlignmentVertical } from '../types/alignment';\n\nexport function correctAlignmentVertical(\n orientation: string | undefined,\n defaultVal: AlignmentVertical\n): AlignmentVertical {\n if (\n orientation === 'top' ||\n orientation === 'center' ||\n orientation === 'bottom' ||\n orientation === 'baseline'\n ) {\n return orientation;\n }\n\n return defaultVal;\n}\n","export function correctBooleanInt(val: number | boolean | undefined, defaultVal: boolean): boolean {\n if (val === 1 || val === 0 || val === false || val === true) {\n return Boolean(val);\n }\n return defaultVal;\n}\n","import type { TintMode } from '../types/image';\n\nexport function correctTintMode(tintMode: TintMode | undefined, defaultVal: TintMode): TintMode {\n if (\n tintMode === 'source_in' ||\n tintMode === 'source_atop' ||\n tintMode === 'darken' ||\n tintMode === 'lighten' ||\n tintMode === 'multiply' ||\n tintMode === 'screen'\n ) {\n return tintMode;\n }\n\n return defaultVal;\n}\n","<script lang=\"ts\">\n import { getContext, onDestroy } from 'svelte';\n\n import css from './Text.module.css';\n import rootCss from '../Root.module.css';\n\n import type { DivTextData, TextImage, TextRange, TextStyles } from '../../types/text';\n import type { Style } from '../../types/general';\n import type { LayoutParams } from '../../types/layoutParams';\n import type { Action, DivBase, TemplateContext } from '../../../typings/common';\n import type { AlignmentHorizontal, AlignmentVertical } from '../../types/alignment';\n import type { TintMode } from '../../types/image';\n import type { MaybeMissing } from '../../expressions/json';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import Outer from '../utilities/Outer.svelte';\n import TextRangeView from './TextRange.svelte';\n import { makeStyle } from '../../utils/makeStyle';\n import { pxToEm } from '../../utils/pxToEm';\n import { wrapError } from '../../utils/wrapError';\n import { genClassName } from '../../utils/genClassName';\n import { getBackground } from '../../utils/background';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { isPositiveNumber } from '../../utils/isPositiveNumber';\n import { correctAlignmentHorizontal } from '../../utils/correctAlignmentHorizontal';\n import { correctAlignmentVertical } from '../../utils/correctAlignmentVertical';\n import { correctColor } from '../../utils/correctColor';\n import { correctBooleanInt } from '../../utils/correctBooleanInt';\n import { propToString } from '../../utils/propToString';\n import { correctTintMode } from '../../utils/correctTintMode';\n\n export let json: Partial<DivTextData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n let hasError = false;\n $: jsonText = rootCtx.getDerivedFromVars(json.text);\n let text = '';\n $: {\n text = propToString($jsonText, text);\n if (!text) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Missing \"text\" prop for div \"text\"')));\n } else {\n hasError = false;\n }\n }\n $: jsonRanges = rootCtx.getDerivedFromVars(json.ranges);\n $: jsonImages = rootCtx.getDerivedFromVars(json.images);\n\n $: jsonRootTextStyles = rootCtx.getDerivedFromVars({\n font_size: json.font_size,\n letter_spacing: json.letter_spacing,\n font_weight: json.font_weight,\n font_family: json.font_family,\n text_color: json.text_color,\n underline: json.underline,\n strike: json.strike,\n line_height: json.line_height\n });\n\n $: jsonTextSize = rootCtx.getDerivedFromVars(json.font_size);\n let fontSize = 12;\n $: {\n fontSize = correctPositiveNumber($jsonTextSize, fontSize);\n }\n\n $: jsonLineHeight = rootCtx.getDerivedFromVars(json.line_height);\n let lineHeight = 1.25;\n let customLineHeight = false;\n $: {\n const newLineHeight = $jsonLineHeight;\n if (isPositiveNumber(newLineHeight)) {\n lineHeight = Number(newLineHeight) / fontSize;\n customLineHeight = true;\n } else {\n customLineHeight = false;\n }\n }\n\n $: jsonMaxLines = rootCtx.getDerivedFromVars(json.max_lines);\n $: singleline = $jsonMaxLines === 1;\n let maxHeight = '';\n let lineClamp: string | number = '';\n let multiline = false;\n $: {\n let newMaxHeight = '';\n let newLineClamp: string | number = '';\n let newMultiline = false;\n\n if ($jsonMaxLines && $jsonMaxLines > 1) {\n let lines = Number($jsonMaxLines);\n\n newMaxHeight = lines * lineHeight + 'em';\n\n // multiline overflow enabled only if there is no images and ranges\n if (!$jsonRanges && !$jsonImages) {\n newLineClamp = lines;\n newMultiline = true;\n }\n }\n\n maxHeight = newMaxHeight;\n lineClamp = newLineClamp;\n multiline = newMultiline;\n }\n\n let halign: AlignmentHorizontal = 'left';\n $: jsonHAlign = rootCtx.getDerivedFromVars(json.text_alignment_horizontal);\n $: {\n halign = correctAlignmentHorizontal($jsonHAlign, halign);\n }\n\n let valign: AlignmentVertical = 'top';\n $: jsonVAlign = rootCtx.getDerivedFromVars(json.text_alignment_vertical);\n $: {\n valign = correctAlignmentVertical($jsonVAlign, valign);\n }\n\n $: isAllTextSameColor =\n !$jsonRanges ||\n (\n text && $jsonRanges.length === 1 && $jsonRanges[0] &&\n $jsonRanges[0].start === 0 && typeof $jsonRanges[0].end === 'number' && $jsonRanges[0].end >= text.length\n );\n\n $: jsonTextColor = rootCtx.getDerivedFromVars(json.text_color);\n\n $: isOnlyOneColorDefined = Boolean($jsonTextColor) !==\n Boolean($jsonRanges && $jsonRanges[0] && $jsonRanges[0].text_color);\n\n let rootTextColor = '';\n $: {\n let newRootTextColor = '';\n\n if ($jsonMaxLines && isAllTextSameColor && isOnlyOneColorDefined) {\n // Recolor the ellipsis only if the entire text have the same color\n newRootTextColor = correctColor(\n ($jsonTextColor || ($jsonRanges && $jsonRanges[0] && $jsonRanges[0].text_color)) as string,\n 1,\n rootTextColor\n );\n }\n\n rootTextColor = newRootTextColor;\n }\n\n let focusTextColor = '';\n $: jsonFocusTextColor = rootCtx.getDerivedFromVars(json.focused_text_color);\n $: {\n focusTextColor = correctColor($jsonFocusTextColor, 1, focusTextColor);\n }\n\n $: jsonTruncate = rootCtx.getDerivedFromVars(json.truncate);\n $: truncate = $jsonTruncate === 'none' ? 'none' : '';\n\n $: jsonTextGradient = rootCtx.getDerivedFromVars(json.text_gradient);\n let gradient = '';\n $: {\n let newGradient = '';\n\n if ($jsonTextGradient) {\n const bg = getBackground([$jsonTextGradient]);\n if (bg.image) {\n newGradient = bg.image;\n }\n }\n\n gradient = newGradient;\n }\n\n $: jsonSelectable = rootCtx.getDerivedFromVars(json.selectable);\n let selectable = false;\n $: {\n selectable = correctBooleanInt($jsonSelectable, selectable);\n }\n\n let renderList: ({\n text: string;\n textStyles: TextStyles;\n actions?: MaybeMissing<Action[]>;\n } | {\n image: {\n url: string;\n width: string;\n height: string;\n wrapperStyle: Style;\n svgFilterId: string;\n };\n })[] = [];\n let usedTintColors: [string, TintMode][] = [];\n\n function updateRenderList(\n text: string,\n textRanges: MaybeMissing<TextRange[]> | undefined,\n textImages: MaybeMissing<TextImage[]> | undefined\n ) {\n let newRenderList: typeof renderList = [];\n\n usedTintColors.forEach(([color, mode]) => {\n rootCtx.removeSvgFilter(color, mode);\n });\n usedTintColors = [];\n\n if (!(Array.isArray(textRanges) && textRanges.length || Array.isArray(textImages) && textImages.length && text)) {\n renderList = [];\n return;\n }\n\n const content = text;\n let ranges = textRanges || [\n {\n start: 0,\n end: content.length\n }\n ];\n let images = textImages || [];\n let prevIndex = 0;\n let activeRanges: TextStyles[] = [];\n let list: ({\n index: number;\n range: MaybeMissing<TextRange> & {\n start: number;\n end: number;\n };\n type: 'rangeStart' | 'rangeEnd';\n isStart?: boolean;\n } | {\n index: number;\n type: 'image';\n arrayIndex: number;\n image: MaybeMissing<TextImage> & {\n start: number;\n url: string;\n };\n })[] = [];\n\n ranges.forEach(range => {\n if (range.start !== undefined && range.end !== undefined) {\n list.push({\n index: range.start,\n range: range as typeof range & {\n start: number;\n end: number;\n },\n type: 'rangeStart',\n isStart: true\n });\n list.push({\n index: range.end,\n range: range as typeof range & {\n start: number;\n end: number;\n },\n type: 'rangeEnd'\n });\n }\n });\n images.forEach((image, index) => {\n if (image.start !== undefined && image.url && image.start <= content.length) {\n list.push({\n index: image.start,\n image: image as typeof image & {\n start: number;\n url: string;\n },\n type: 'image',\n arrayIndex: index\n });\n }\n });\n list.sort((a, b) => {\n if (a.index === b.index) {\n if (a.type !== b.type) {\n if (a.type === 'image') {\n return -1;\n } else if (b.type === 'image') {\n return 1;\n }\n\n return a.type < b.type ? -1 : 1;\n } else if (a.type === 'image' && b.type === 'image') {\n return b.arrayIndex - a.arrayIndex;\n } else if (a.type === 'rangeStart' && b.type === 'rangeStart') {\n return a.range.end - b.range.end;\n } else if (a.type === 'rangeStart') {\n return 1;\n } else if (b.type === 'rangeStart') {\n return -1;\n }\n if (a.type !== 'image' && b.type !== 'image') {\n return a.range.start - b.range.start;\n }\n return 0;\n }\n\n return a.index - b.index;\n });\n list.forEach(item => {\n let range = item.type === 'image' ? null : item.range;\n let index = item.index;\n\n if (index > prevIndex) {\n let textStyles = Object.assign({ ...$jsonRootTextStyles }, ...activeRanges as any[]) as TextStyles;\n newRenderList.push({\n text: content.substring(prevIndex, index),\n textStyles,\n actions: item.type === 'rangeEnd' && item.range?.actions || undefined\n });\n }\n\n if (item.type === 'rangeStart' && range) {\n activeRanges.push(range);\n } else if (item.type === 'rangeEnd') {\n activeRanges = activeRanges.filter(range => range !== item.range);\n } else if (item.type === 'image') {\n let textStyles2 = Object.assign({ ...$jsonRootTextStyles }, ...activeRanges as any[]) as TextStyles;\n let imageWidth = pxToEm(\n (((item.image.width && item.image.width.value) || 20) * 10) / (textStyles2.font_size || 12)\n );\n let imageHeight = pxToEm(\n (((item.image.height && item.image.height.value) || 20) * 10) / (textStyles2.font_size || 12)\n );\n const wrapperStyle: Style = {\n 'font-size': pxToEm(((Number(textStyles2.font_size) || 12) * 10) / fontSize)\n };\n\n let svgFilterId = '';\n const tintColor = item.image.tint_color;\n const tintMode = correctTintMode(item.image.tint_mode, 'source_in');\n if (tintColor) {\n const color = correctColor(item.image.tint_color);\n svgFilterId = rootCtx.addSvgFilter(color, tintMode);\n usedTintColors.push([color, tintMode]);\n }\n\n newRenderList.push({\n image: {\n url: item.image.url,\n width: imageWidth,\n height: imageHeight,\n wrapperStyle,\n svgFilterId\n }\n });\n }\n\n prevIndex = index;\n });\n\n if (prevIndex < content.length) {\n newRenderList.push({\n text: content.substring(prevIndex),\n textStyles: { ...$jsonRootTextStyles } as TextStyles\n });\n }\n\n renderList = newRenderList;\n }\n\n $: updateRenderList(text, $jsonRanges, $jsonImages);\n\n $: mods = {\n singleline,\n multiline,\n halign,\n valign,\n truncate\n };\n\n $: innerMods = {\n gradient: Boolean(gradient)\n };\n\n $: style = {\n 'font-size': pxToEm(fontSize),\n 'line-height': lineHeight,\n 'max-height': maxHeight,\n '-webkit-line-clamp': lineClamp,\n color: rootTextColor,\n 'background-image': gradient,\n '--divkit-text-focus-color': focusTextColor\n };\n\n function onImgError(event: Event): void {\n if (event.target && 'classList' in event.target) {\n (event.target as HTMLElement).classList.add(css.text__image_hidden);\n }\n }\n\n onDestroy(() => {\n usedTintColors.forEach(([color, mode]) => {\n rootCtx.removeSvgFilter(color, mode);\n });\n });\n</script>\n\n{#if !hasError}\n <Outer\n cls=\"{genClassName('text', css, mods)} {selectable ? '' : rootCss.root__unselectable}\"\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n >\n <span class={genClassName('text__inner', css, innerMods)} style={makeStyle(style)}>\n {#if renderList.length}\n {#each renderList as item, index}\n {#if 'text' in item}\n {#if item.text}\n <TextRangeView\n text={item.text}\n rootFontSize={fontSize}\n textStyles={item.textStyles}\n {singleline}\n actions={item.actions}\n />\n {/if}\n {:else if item.image}\n <span style={makeStyle(item.image.wrapperStyle)}><img\n class={css.text__image}\n src={item.image.url}\n loading=\"lazy\"\n decoding=\"async\"\n aria-hidden=\"true\"\n alt=\"\"\n style={makeStyle({\n width: item.image.width,\n height: item.image.height,\n // Normalizes line-height for the containing text line\n 'margin-top': customLineHeight ? `-${item.image.height}` : undefined,\n 'margin-bottom': customLineHeight ? `-${item.image.height}` : undefined,\n filter: item.image.svgFilterId ? `url(#${item.image.svgFilterId})` : undefined\n })}\n on:error={onImgError}\n ></span>\n {/if}\n {/each}\n {:else}\n <TextRangeView\n {text}\n rootFontSize={fontSize}\n textStyles={$jsonRootTextStyles}\n {singleline}\n />\n {/if}\n </span>\n </Outer>\n{/if}\n","import { VariableValue } from '../expressions/variable';\n\nexport function propToString(val: VariableValue | undefined, defaultVal: string): string {\n const valToString = String(val ?? '');\n\n return valToString || defaultVal;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"divkit-d37d6\",\"container_wrap\":\"divkit-c8551\",\"container_orientation_vertical\":\"divkit-ddc33\",\"container_valign_top\":\"divkit-a331a\",\"container_valign_center\":\"divkit-aae61\",\"container_valign_bottom\":\"divkit-c2226\",\"container_valign_space-between\":\"divkit-ce053\",\"container_valign_space-around\":\"divkit-cf29b\",\"container_valign_space-evenly\":\"divkit-b4b04\",\"container_halign_left\":\"divkit-a3091\",\"container_halign_center\":\"divkit-bac9d\",\"container_halign_right\":\"divkit-f4230\",\"container_halign_space-between\":\"divkit-e5c38\",\"container_halign_space-around\":\"divkit-feff2\",\"container_halign_space-evenly\":\"divkit-e5e05\",\"container_orientation_horizontal\":\"divkit-fe458\",\"container_orientation_overlap\":\"divkit-a644d\"};","import type { BooleanInt } from '../../typings/common';\nimport type { DrawableStyle } from './correctDrawableStyles';\nimport type { EdgeInsets } from '../types/edgeInserts';\nimport type { ContainerOrientation } from '../types/container';\nimport { pxToEm } from './pxToEm';\n\nexport interface SeparatorStyle {\n show_at_start?: BooleanInt;\n show_at_end?: BooleanInt;\n show_between?: BooleanInt;\n style: DrawableStyle;\n margins: PreparedMargins;\n}\n\nexport interface PreparedMargins {\n top: number;\n right: number;\n bottom: number;\n left: number;\n}\n\nexport function prepareMargins(margins?: EdgeInsets): PreparedMargins {\n return {\n top: Number(margins?.top) || 0,\n right: Number(margins?.right) || 0,\n bottom: Number(margins?.bottom) || 0,\n left: Number(margins?.left) || 0\n };\n}\n\nfunction setAdditionalPadding(\n insets: EdgeInsets,\n separator: SeparatorStyle | null,\n crossAxis: boolean\n): void {\n const hMargin = (separator?.margins.left || 0) + (separator?.margins.right || 0);\n const vMargin = (separator?.margins.top || 0) + (separator?.margins.bottom || 0);\n\n if (separator?.show_at_start) {\n if (crossAxis) {\n insets.top = separator.style.height + vMargin;\n } else {\n insets.left = separator.style.width + hMargin;\n }\n }\n\n if (separator?.show_at_end) {\n if (crossAxis) {\n insets.bottom = separator.style.height + vMargin;\n } else {\n insets.right = separator.style.width + hMargin;\n }\n }\n}\n\nexport function calcAdditionalPaddings(\n orientation: ContainerOrientation,\n separator: SeparatorStyle | null,\n lineSeparator: SeparatorStyle | null\n) {\n const res: EdgeInsets = {};\n\n setAdditionalPadding(res, separator, orientation === 'vertical');\n setAdditionalPadding(res, lineSeparator, orientation === 'horizontal');\n\n return res;\n}\n\nexport function calcItemsGap(\n orientation: ContainerOrientation,\n separator: SeparatorStyle | null,\n lineSeparator: SeparatorStyle | null\n): string {\n let vals: number[];\n const separatorHMargins = (separator?.margins.left || 0) + (separator?.margins.right || 0);\n const separatorVMargins = (separator?.margins.top || 0) + (separator?.margins.bottom || 0);\n const lineSeparatorHMargins = (lineSeparator?.margins.left || 0) + (lineSeparator?.margins.right || 0);\n const lineSeparatorVMargins = (lineSeparator?.margins.top || 0) + (lineSeparator?.margins.bottom || 0);\n\n if (orientation === 'horizontal') {\n vals = [\n lineSeparator?.show_between ? (lineSeparator.style.height + lineSeparatorVMargins) : 0,\n separator?.show_between ? (separator.style.width + separatorHMargins) : 0\n ];\n } else {\n vals = [\n separator?.show_between ? (separator.style.height + separatorVMargins) : 0,\n lineSeparator?.show_between ? (lineSeparator.style.width + lineSeparatorHMargins) : 0\n ];\n }\n\n return vals.map(pxToEm).join(' ');\n}\n","import type { Drawable } from '../types/drawable';\nimport type { Style } from '../types/general';\nimport type { MaybeMissing } from '../expressions/json';\nimport type { Circle, RoundedRectangle } from '../types/shape';\nimport type { Stroke } from '../types/border';\nimport { correctColor } from './correctColor';\nimport { pxToEm } from './pxToEm';\n\nexport interface DrawableStyle extends Style {\n width: number;\n height: number;\n borderRadius: number;\n background: string;\n boxShadow?: string;\n}\n\ninterface DrawableSize {\n width: number;\n height: number;\n radius: number;\n}\n\nfunction calcRoundedRectangleSize(shape: MaybeMissing<RoundedRectangle>): DrawableSize {\n return {\n width: Number(shape.item_width?.value || 10),\n height: Number(shape.item_height?.value || 10),\n radius: Number(shape.corner_radius?.value ?? 5)\n };\n}\n\nfunction calcCircleSize(shape: MaybeMissing<Circle>): DrawableSize {\n const size = Number(shape.radius?.value || 10) * 2;\n\n return {\n width: size,\n height: size,\n radius: size\n };\n}\n\nfunction calcDrawableStyle(\n size: DrawableSize,\n shape: MaybeMissing<RoundedRectangle | Circle>,\n old?: {\n stroke?: MaybeMissing<Stroke>;\n color?: string;\n }\n): DrawableStyle {\n const stl: Partial<DrawableStyle> = {};\n\n const stroke = shape.stroke || old?.stroke;\n const borderColor = stroke?.color ? correctColor(stroke.color) : '';\n const borderWidth = stroke?.width ? Number(stroke.width ?? 1) : '';\n\n stl.width = size.width;\n stl.height = size.height;\n stl.borderRadius = size.radius;\n\n const bgColor = shape.background_color || old?.color;\n stl.background = correctColor(bgColor);\n\n if (borderColor && borderWidth) {\n stl.boxShadow = `inset 0 0 0 ${pxToEm(borderWidth)} ${borderColor}`;\n }\n\n return stl as DrawableStyle;\n}\n\nexport function correctDrawableStyle<D = DrawableStyle>(\n drawable: MaybeMissing<Drawable> | undefined,\n availShapes: string[],\n defaultValue: D\n): D {\n if (\n !drawable || !drawable.shape ||\n !drawable.shape.type || !availShapes.includes(drawable.shape.type) ||\n drawable.type !== 'shape_drawable'\n ) {\n return defaultValue;\n }\n let size: DrawableSize;\n if (drawable.shape.type === 'rounded_rectangle') {\n size = calcRoundedRectangleSize(drawable.shape);\n } else if (drawable.shape.type === 'circle') {\n size = calcCircleSize(drawable.shape);\n } else {\n return defaultValue;\n }\n\n return calcDrawableStyle(size, drawable.shape, {\n color: drawable.color,\n stroke: drawable.stroke\n }) as unknown as D;\n}\n","let res: boolean;\n\n/**\n * Based on the Chris Smith work in Modernizr\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/css/flexgap.js\n * MIT License\n */\nexport function hasGapSupport(): boolean {\n if (res !== undefined) {\n return res;\n }\n\n const flex = document.createElement('div');\n flex.style.position = 'absolute';\n flex.style.display = 'flex';\n flex.style.flexDirection = 'column';\n flex.style.gap = '1px';\n\n flex.appendChild(document.createElement('div'));\n flex.appendChild(document.createElement('div'));\n\n document.body.appendChild(flex);\n res = flex.scrollHeight === 1;\n document.body.removeChild(flex);\n\n return res;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"container-separator\":\"divkit-a7719\",\"container-separator__item\":\"divkit-c770e\",\"container-separator__shape\":\"divkit-f6e9a\"};","<script lang=\"ts\">\n import { onDestroy, onMount } from 'svelte';\n\n import css from './ContainerSeparator.module.css';\n import outerCss from '../utilities/Outer.module.css';\n\n import type { ContainerOrientation } from '../../types/container';\n import type { SeparatorStyle } from '../../utils/container';\n import type { DrawableStyle } from '../../utils/correctDrawableStyles';\n import { simpleThrottle } from '../../utils/simpleThrottle';\n import { Box, getMarginBox } from '../../utils/getMarginBox';\n\n export let orientation: ContainerOrientation;\n export let separator: SeparatorStyle | null;\n export let lineSeparator: SeparatorStyle | null;\n\n const THROTTLE_TIMEOUT = 10;\n const throttledUpdated = simpleThrottle(updateSeparators, THROTTLE_TIMEOUT);\n\n interface SeparatorItem {\n left: number;\n top: number;\n width: number;\n height: number;\n style: DrawableStyle;\n }\n let separators: SeparatorItem[] = [];\n let node: HTMLElement;\n $: parentElement = node?.parentElement || null;\n let mounted = false;\n let mutationObserver: MutationObserver | null = null;\n let resizeObserver: ResizeObserver | null = null;\n\n $: if (mounted && parentElement || mutationObserver || resizeObserver) {\n if (mutationObserver) {\n mutationObserver.disconnect();\n mutationObserver = null;\n }\n if (resizeObserver) {\n resizeObserver.disconnect();\n resizeObserver = null;\n }\n if (mounted && parentElement) {\n if (typeof MutationObserver !== 'undefined') {\n mutationObserver = new MutationObserver(mutationObserverCallback);\n mutationObserver.observe(parentElement, {\n childList: true,\n attributes: true,\n characterData: true,\n subtree: true\n });\n }\n if (typeof ResizeObserver !== 'undefined') {\n resizeObserver = new ResizeObserver(throttledUpdated);\n resizeObserver.observe(parentElement);\n }\n }\n }\n\n $: if (mounted && parentElement) {\n throttledUpdated();\n }\n\n function mutationObserverCallback(records: MutationRecord[]): void {\n if (records.some(record => {\n const classList = (record.target as HTMLElement)?.classList;\n\n return !classList?.contains(css['container-separator__shape']) &&\n !classList?.contains(css['container-separator']);\n })) {\n throttledUpdated();\n }\n }\n\n // eslint-disable-next-line max-params\n function appendSeparator(\n separators: SeparatorItem[],\n separatorStyle: SeparatorStyle,\n box0: Box,\n box1: Box,\n containingBox: Box,\n crossAxis: boolean\n ) {\n const leftMargin = separatorStyle.margins.left;\n const rightMargin = separatorStyle.margins.right;\n const topMargin = separatorStyle.margins.top;\n const bottomMargin = separatorStyle.margins.bottom;\n\n if (crossAxis) {\n separators.push({\n top: box0.bottom + topMargin,\n left: containingBox.left + leftMargin,\n width: Math.max(0, containingBox.right - containingBox.left - leftMargin - rightMargin),\n height: box1.top - box0.bottom - topMargin - bottomMargin,\n style: separatorStyle.style\n });\n } else {\n separators.push({\n top: containingBox.top + topMargin,\n left: box0.right + leftMargin,\n width: box1.left - box0.right - leftMargin - rightMargin,\n height: Math.max(0, containingBox.bottom - containingBox.top - topMargin - bottomMargin),\n style: separatorStyle.style\n });\n }\n }\n\n function appendSeparators(\n separators: SeparatorItem[],\n separator: SeparatorStyle,\n boxes: Box[],\n crossAxis: boolean\n ): void {\n const containingBox = {\n top: Math.min(...boxes.map(it => it.top)),\n right: Math.max(...boxes.map(it => it.right)),\n bottom: Math.max(...boxes.map(it => it.bottom)),\n left: Math.min(...boxes.map(it => it.left))\n };\n\n if (separator?.show_at_start) {\n appendSeparator(\n separators,\n separator,\n // only right and bottom is used\n {\n top: 0,\n right: boxes[0].left - separator.style.width - separator.margins.left - separator.margins.right,\n bottom: boxes[0].top - separator.style.height - separator.margins.top - separator.margins.bottom,\n left: 0\n },\n boxes[0],\n containingBox,\n crossAxis\n );\n }\n if (separator?.show_between) {\n for (let i = 0; i < boxes.length - 1; ++i) {\n appendSeparator(\n separators,\n separator,\n boxes[i],\n boxes[i + 1],\n containingBox,\n crossAxis\n );\n }\n }\n if (separator?.show_at_end) {\n const lastBox = boxes[boxes.length - 1];\n\n appendSeparator(\n separators,\n separator,\n lastBox,\n // only top and left is used\n {\n top: lastBox.bottom + separator.style.height + separator.margins.top + separator.margins.bottom,\n right: 0,\n bottom: 0,\n left: lastBox.right + separator.style.width + separator.margins.left + separator.margins.right\n },\n containingBox,\n crossAxis\n );\n }\n }\n\n function updateSeparators(): void {\n if (!parentElement) {\n return;\n }\n\n const parentBbox = parentElement.getBoundingClientRect();\n\n separators = [];\n\n let children = [...parentElement.children]\n .filter(it => it !== node && !it.classList.contains(outerCss.outer__border)) as HTMLElement[];\n let rows: HTMLElement[][] = [];\n\n while (children.length) {\n const row: HTMLElement[] = [];\n const firstChild = children.shift() as HTMLElement;\n row.push(firstChild);\n\n let bbox = firstChild.getBoundingClientRect();\n let right = bbox.right;\n let bottom = bbox.bottom;\n\n while (children.length) {\n let first = children[0];\n let bbox = first.getBoundingClientRect();\n\n if (orientation === 'vertical') {\n if (bbox.top < bottom) {\n break;\n }\n } else if (bbox.left < right) {\n break;\n }\n\n right = Math.max(right, bbox.right);\n bottom = Math.max(bottom, bbox.bottom);\n row.push(first);\n children.shift();\n }\n\n rows.push(row);\n }\n\n const rowBoxes: Box[] = [];\n rows.forEach(row => {\n const boxes = row.map(it => getMarginBox(it));\n\n if (separator) {\n appendSeparators(separators, separator as SeparatorStyle, boxes, orientation === 'vertical');\n }\n\n const rowBox = {\n top: Math.min(...boxes.map(it => it.top)),\n right: Math.max(...boxes.map(it => it.right)),\n bottom: Math.max(...boxes.map(it => it.bottom)),\n left: Math.min(...boxes.map(it => it.left))\n };\n rowBoxes.push(rowBox);\n });\n if (lineSeparator) {\n appendSeparators(separators, lineSeparator, rowBoxes, orientation === 'horizontal');\n }\n\n separators.forEach(separator => {\n separator.top -= parentBbox.top;\n separator.left -= parentBbox.left;\n });\n }\n\n onMount(() => {\n mounted = true;\n });\n\n onDestroy(() => {\n mounted = false;\n });\n</script>\n\n<svelte:window on:resize={throttledUpdated} />\n\n<div bind:this={node} class={css['container-separator']}>\n {#each separators as item}\n <div\n class={css['container-separator__item']}\n style:left=\"{item.left}px\"\n style:top=\"{item.top}px\"\n style:width=\"{item.width}px\"\n style:height=\"{item.height}px\"\n >\n <div\n class={css['container-separator__shape']}\n style:width=\"{item.style.width}px\"\n style:height=\"{item.style.height}px\"\n style:border-radius=\"{item.style.borderRadius}px\"\n style:background=\"{item.style.background}\"\n style:box-shadow=\"{item.style.boxShadow}\"\n ></div>\n </div>\n {/each}\n</div>\n","export function simpleThrottle<F extends(...args: any[]) => any>(fn: F, timeout: number): F {\n let runTs = 0;\n let prevRes: unknown;\n let awaits = false;\n\n return function(this: any) {\n const now = Date.now();\n\n if (!runTs || Math.abs(now - runTs) > timeout) {\n runTs = now;\n\n // eslint-disable-next-line prefer-rest-params\n return (prevRes = fn.apply(this, arguments as unknown as any[]));\n }\n\n if (!awaits) {\n awaits = true;\n setTimeout(() => {\n awaits = false;\n // eslint-disable-next-line prefer-rest-params\n prevRes = fn.apply(this, arguments as unknown as any[]);\n }, timeout);\n }\n\n return prevRes;\n } as unknown as F;\n}\n","export interface Box {\n top: number;\n right: number;\n bottom: number;\n left: number;\n}\n\nexport function getMarginBox(elem: HTMLElement): Box {\n const bbox = elem.getBoundingClientRect();\n const computed = getComputedStyle(elem);\n\n return {\n top: bbox.top - parseFloat(computed.marginTop),\n right: bbox.right + parseFloat(computed.marginRight),\n bottom: bbox.bottom + parseFloat(computed.marginBottom),\n left: bbox.left - parseFloat(computed.marginLeft)\n };\n}\n","<script lang=\"ts\">\n import { getContext } from 'svelte';\n\n import css from './Container.module.css';\n\n import type { ContainerOrientation, DivContainerData } from '../../types/container';\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivBaseData } from '../../types/base';\n import type {\n ContentAlignmentHorizontal,\n ContentAlignmentVertical\n } from '../../types/alignment';\n import type { SeparatorStyle } from '../../utils/container';\n import { prepareMargins } from '../../utils/container';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { wrapError } from '../../utils/wrapError';\n import { genClassName } from '../../utils/genClassName';\n import { correctContainerOrientation } from '../../utils/correctContainerOrientation';\n import { assignIfDifferent } from '../../utils/assignIfDifferent';\n import { correctDrawableStyle, DrawableStyle } from '../../utils/correctDrawableStyles';\n import { calcAdditionalPaddings, calcItemsGap } from '../../utils/container';\n import { hasGapSupport } from '../../utils/hasGapSupport';\n import { isPositiveNumber } from '../../utils/isPositiveNumber';\n import ContainerSeparators from './ContainerSeparators.svelte';\n import Unknown from '../utilities/Unknown.svelte';\n import Outer from '../utilities/Outer.svelte';\n import { correctContentAlignmentVertical } from '../../utils/correctContentAlignmentVertical';\n import { correctContentAlignmentHorizontal } from '../../utils/correctContentAlignmentHorizontal';\n\n export let json: Partial<DivContainerData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const HALIGN_MAP = {\n left: 'start',\n center: 'center',\n right: 'end',\n // 'space-*' values doesn't supported for cross-axis in wrap-container\n 'space-between': 'start',\n 'space-around': 'start',\n 'space-evenly': 'start'\n } as const;\n\n const VALIGN_MAP = {\n top: 'start',\n center: 'center',\n bottom: 'end',\n baseline: 'baseline',\n // 'space-*' doesn't supported for cross-axis in wrap-container\n 'space-between': 'start',\n 'space-around': 'start',\n 'space-evenly': 'start'\n } as const;\n\n const AVAIL_SEPARATOR_SHAPES = ['rounded_rectangle', 'circle'];\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n let hasItemsError = false;\n $: jsonItems = json.items;\n $: {\n if (!jsonItems?.length || !Array.isArray(jsonItems)) {\n hasItemsError = true;\n rootCtx.logError(wrapError(new Error('Incorrect or empty \"items\" prop for div \"container\"')));\n } else {\n hasItemsError = false;\n }\n }\n\n function replaceItems(items: DivBaseData[]): void {\n json = {\n ...json,\n items\n };\n }\n\n $: items = (!hasItemsError && jsonItems || []).map(item => {\n let childJson: DivBaseData = item as DivBaseData;\n let childContext: TemplateContext = templateContext;\n\n ({\n templateContext: childContext,\n json: childJson\n } = rootCtx.processTemplate(childJson, childContext));\n\n return {\n json: childJson,\n templateContext: childContext,\n origJson: item\n };\n });\n\n let orientation: ContainerOrientation = 'vertical';\n $: jsonOrientation = rootCtx.getDerivedFromVars(json.orientation);\n $: {\n orientation = correctContainerOrientation($jsonOrientation, orientation);\n }\n\n let contentVAlign: ContentAlignmentVertical = 'top';\n $: jsonContentVAlign = rootCtx.getDerivedFromVars(json.content_alignment_vertical);\n $: {\n contentVAlign = correctContentAlignmentVertical($jsonContentVAlign, contentVAlign);\n }\n\n let contentHAlign: ContentAlignmentHorizontal = 'left';\n $: jsonContentHAlign = rootCtx.getDerivedFromVars(json.content_alignment_horizontal);\n $: {\n contentHAlign = correctContentAlignmentHorizontal($jsonContentHAlign, contentHAlign);\n }\n\n $: jsonLayoutMode = rootCtx.getDerivedFromVars(json.layout_mode);\n $: wrap = $jsonLayoutMode === 'wrap';\n\n $: jsonSeparator = rootCtx.getDerivedFromVars(json.separator);\n let separator: SeparatorStyle | null = null;\n $: {\n if ($jsonSeparator?.style && orientation !== 'overlap' && hasGapSupport()) {\n const style = correctDrawableStyle<DrawableStyle | null>(\n $jsonSeparator.style,\n AVAIL_SEPARATOR_SHAPES,\n separator?.style || null\n );\n\n if (style) {\n separator = {\n show_at_start: Boolean($jsonSeparator.show_at_start ?? false),\n show_at_end: Boolean($jsonSeparator.show_at_end ?? false),\n show_between: Boolean($jsonSeparator.show_between ?? true),\n style,\n margins: prepareMargins($jsonSeparator.margins)\n };\n } else {\n separator = null;\n }\n } else {\n separator = null;\n }\n }\n\n $: jsonLineSeparator = rootCtx.getDerivedFromVars(json.line_separator);\n let lineSeparator: SeparatorStyle | null = null;\n $: {\n if ($jsonLineSeparator?.style && orientation !== 'overlap' && hasGapSupport()) {\n const style = correctDrawableStyle<DrawableStyle | null>(\n $jsonLineSeparator.style,\n AVAIL_SEPARATOR_SHAPES,\n lineSeparator?.style || null\n );\n\n if (style) {\n lineSeparator = {\n show_at_start: Boolean($jsonLineSeparator.show_at_start ?? false),\n show_at_end: Boolean($jsonLineSeparator.show_at_end ?? false),\n show_between: Boolean($jsonLineSeparator.show_between ?? true),\n style,\n margins: prepareMargins($jsonLineSeparator.margins)\n };\n } else {\n lineSeparator = null;\n }\n } else {\n lineSeparator = null;\n }\n }\n\n $: additionalPaddings = (separator || lineSeparator) ?\n calcAdditionalPaddings(orientation, separator, lineSeparator) :\n null;\n\n $: jsonAspect = rootCtx.getDerivedFromVars(json.aspect);\n let aspect: number | undefined = undefined;\n $: {\n const newRatio = $jsonAspect?.ratio;\n if (newRatio && isPositiveNumber(newRatio)) {\n aspect = newRatio;\n } else {\n aspect = undefined;\n }\n }\n\n $: jsonWidth = rootCtx.getDerivedFromVars(json.width);\n $: jsonHeight = rootCtx.getDerivedFromVars(json.height);\n\n let childLayoutParams: LayoutParams = {};\n $: {\n let newChildLayoutParams: LayoutParams = {};\n\n if (layoutParams?.fakeElement) {\n newChildLayoutParams.fakeElement = true;\n }\n if (orientation === 'overlap') {\n newChildLayoutParams.overlapParent = true;\n }\n if (orientation !== 'horizontal') {\n newChildLayoutParams.parentHAlign = wrap ? 'start' : HALIGN_MAP[contentHAlign];\n if (\n !aspect && (\n !$jsonHeight ||\n $jsonHeight.type === 'wrap_content' ||\n $jsonHeight.type === 'match_parent' && layoutParams?.parentVerticalWrapContent\n )\n ) {\n newChildLayoutParams.parentVerticalWrapContent = true;\n }\n }\n if (orientation !== 'vertical') {\n newChildLayoutParams.parentVAlign = wrap ? 'start' : VALIGN_MAP[contentVAlign];\n if (\n $jsonWidth?.type === 'wrap_content' ||\n $jsonWidth?.type === 'match_parent' && layoutParams?.parentHorizontalWrapContent\n ) {\n newChildLayoutParams.parentHorizontalWrapContent = true;\n }\n }\n if (orientation === 'horizontal') {\n newChildLayoutParams.parentContainerOrientation = 'horizontal';\n }\n if (orientation === 'vertical') {\n newChildLayoutParams.parentContainerOrientation = 'vertical';\n }\n if (wrap) {\n newChildLayoutParams.parentContainerWrap = true;\n }\n\n childLayoutParams = assignIfDifferent(newChildLayoutParams, childLayoutParams);\n }\n\n $: mods = {\n orientation,\n valign: contentVAlign,\n halign: contentHAlign,\n wrap\n };\n\n $: style = {\n gap: (separator || lineSeparator) ?\n calcItemsGap(orientation, separator, lineSeparator) :\n undefined,\n 'aspect-ratio': aspect\n };\n</script>\n\n{#if !hasItemsError}\n <Outer\n cls={genClassName('container', css, mods)}\n {style}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n {additionalPaddings}\n heightByAspect={Boolean(aspect)}\n parentOf={jsonItems}\n {replaceItems}\n >\n {#key jsonItems}\n {#each items as item}\n <Unknown layoutParams={childLayoutParams} div={item.json} templateContext={item.templateContext} origJson={item.origJson} />\n {/each}\n {/key}\n\n {#if separator || lineSeparator}\n <ContainerSeparators\n {separator}\n {lineSeparator}\n {orientation}\n />\n {/if}\n </Outer>\n{/if}\n","import type { ContainerOrientation } from '../types/container';\n\nexport function correctContainerOrientation(\n orientation: string | undefined,\n defaultVal: ContainerOrientation\n): ContainerOrientation {\n if (\n orientation === 'vertical' ||\n orientation === 'horizontal' ||\n orientation === 'overlap'\n ) {\n return orientation;\n }\n\n return defaultVal;\n}\n","import type { ContentAlignmentVertical } from '../types/alignment';\n\nexport function correctContentAlignmentVertical(\n orientation: string | undefined,\n defaultVal: ContentAlignmentVertical\n): ContentAlignmentVertical {\n if (\n orientation === 'top' ||\n orientation === 'center' ||\n orientation === 'bottom' ||\n orientation === 'baseline' ||\n orientation === 'space-between' ||\n orientation === 'space-around' ||\n orientation === 'space-evenly'\n ) {\n return orientation;\n }\n\n return defaultVal;\n}\n","import type { ContentAlignmentHorizontal } from '../types/alignment';\n\nexport function correctContentAlignmentHorizontal(\n orientation: string | undefined,\n defaultVal: ContentAlignmentHorizontal\n): ContentAlignmentHorizontal {\n if (\n orientation === 'left' ||\n orientation === 'center' ||\n orientation === 'right' ||\n orientation === 'space-between' ||\n orientation === 'space-around' ||\n orientation === 'space-evenly'\n ) {\n return orientation;\n }\n\n return defaultVal;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"separator\":\"divkit-a30bb\",\"separator_orientation_horizontal\":\"divkit-f529e\",\"separator_orientation_vertical\":\"divkit-e9e27\",\"separator__inner\":\"divkit-db7d8\"};","import type { Orientation } from '../types/orientation';\n\nexport function correctGeneralOrientation(\n orientation: string | undefined,\n defaultVal: Orientation\n): Orientation {\n if (\n orientation === 'vertical' ||\n orientation === 'horizontal'\n ) {\n return orientation;\n }\n\n return defaultVal;\n}\n","<script lang=\"ts\">\n import { getContext } from 'svelte';\n\n import css from './Separator.module.css';\n\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivSeparatorData } from '../../types/separator';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { Orientation } from '../../types/orientation';\n import Outer from '../utilities/Outer.svelte';\n import { makeStyle } from '../../utils/makeStyle';\n import { pxToEm } from '../../utils/pxToEm';\n import { genClassName } from '../../utils/genClassName';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { correctGeneralOrientation } from '../../utils/correctGeneralOrientation';\n import { correctColor } from '../../utils/correctColor';\n\n export let json: Partial<DivSeparatorData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n $: jsonDelimiterStyle = rootCtx.getDerivedFromVars(json.delimiter_style);\n let orientation: Orientation = 'horizontal';\n $: {\n orientation = correctGeneralOrientation($jsonDelimiterStyle?.orientation, orientation);\n }\n\n // Avoid transparent separator creation\n $: hasContent = !(\n $jsonDelimiterStyle?.color &&\n (\n $jsonDelimiterStyle.color === 'transparent' ||\n (\n $jsonDelimiterStyle.color.length === 9 &&\n $jsonDelimiterStyle.color.indexOf('#00') === 0\n )\n )\n );\n\n // let background = correctColor('#14000000');\n let background = 'rgba(0,0,0,0.08)';\n $: {\n background = correctColor($jsonDelimiterStyle?.color, 1, background);\n }\n\n $: width = orientation === 'horizontal' ? '100%' : pxToEm(1);\n $: height = orientation === 'horizontal' ? pxToEm(1) : '100%';\n\n $: style = {\n background,\n width,\n height\n };\n\n $: mods = {\n orientation\n };\n</script>\n\n<Outer\n cls={genClassName('separator', css, mods)}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n>\n {#if hasContent}\n <span class={css.separator__inner} style={makeStyle(style)}></span>\n {/if}\n</Outer>\n","// extracted by mini-css-extract-plugin\nexport default {\"image\":\"divkit-a448f\",\"image_is-width-content\":\"divkit-fe14a\",\"image_is-height-content\":\"divkit-f4d92\",\"image__image\":\"divkit-ce046\",\"image_error\":\"divkit-f10d9\",\"image__aspect-wrapper\":\"divkit-dc808\",\"image_aspect\":\"divkit-ae784\",\"image_loaded\":\"divkit-cf4e0\",\"divkit-image-appearance\":\"divkit-e555f\",\"image_before-appearance\":\"divkit-ffe8a\"};","import { htmlFilter } from './htmlFilter';\n\nexport function prepareBase64(data: string): string {\n if (data.startsWith('data:')) {\n return htmlFilter(data);\n }\n return `data:image/jpg;base64,${htmlFilter(data)}`;\n}\n","<script lang=\"ts\">\n import { getContext, onDestroy } from 'svelte';\n\n import css from './Image.module.css';\n\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivImageData, TintMode } from '../../types/image';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { AlignmentHorizontal, AlignmentVertical } from '../../types/alignment';\n import Outer from '../utilities/Outer.svelte';\n import { makeStyle } from '../../utils/makeStyle';\n import { genClassName } from '../../utils/genClassName';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { wrapError } from '../../utils/wrapError';\n import { htmlFilter } from '../../utils/htmlFilter';\n import { imageSize } from '../../utils/background';\n import { correctImagePosition } from '../../utils/correctImagePosition';\n import { isPositiveNumber } from '../../utils/isPositiveNumber';\n import { correctColor } from '../../utils/correctColor';\n import { correctCSSInterpolator } from '../../utils/correctCSSInterpolator';\n import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n import { correctTintMode } from '../../utils/correctTintMode';\n import { getCssFilter } from '../../utils/filters';\n import { prepareBase64 } from '../../utils/prepareBase64';\n\n export let json: Partial<DivImageData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const FALLBACK_IMAGE = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n // const DEFAULT_PLACEHOLDER_COLOR = correctColor('#14000000');\n const DEFAULT_PLACEHOLDER_COLOR = 'rgba(0,0,0,0.08)';\n\n const STATE_LOADING = 0;\n const STATE_LOADED = 1;\n const STATE_ERROR = 2;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n $: jsonImageUrl = rootCtx.getDerivedFromVars(json.image_url);\n\n $: jsonGifUrl = rootCtx.getDerivedFromVars(json.gif_url);\n $: imageUrl = $jsonImageUrl || $jsonGifUrl;\n\n let state = STATE_LOADING;\n let placeholderColor = DEFAULT_PLACEHOLDER_COLOR;\n\n function updateImageUrl(_url: string | undefined): void {\n state = STATE_LOADING;\n }\n $: updateImageUrl(imageUrl);\n\n let hasError = false;\n $: {\n if (!imageUrl) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Missing \"image_url\" for \"image\"')));\n } else {\n hasError = false;\n }\n }\n\n $: jsonWidth = rootCtx.getDerivedFromVars(json.width);\n $: isWidthContent = $jsonWidth?.type === 'wrap_content';\n\n $: jsonHeight = rootCtx.getDerivedFromVars(json.height);\n $: isHeightContent = $jsonHeight?.type === 'wrap_content';\n\n $: jsonPreview = rootCtx.getDerivedFromVars(json.preview);\n let backgroundImage = '';\n $: {\n const preview = $jsonPreview;\n\n if ((state === STATE_LOADING || state === STATE_ERROR) && preview) {\n backgroundImage = `url(\"${prepareBase64(preview)}\")`;\n } else {\n backgroundImage = '';\n }\n }\n\n $: jsonPlaceholderColor = rootCtx.getDerivedFromVars(json.placeholder_color);\n function updatePlaceholderColor(state: number, color: string | undefined): void {\n if (state === STATE_LOADING || state === STATE_ERROR) {\n placeholderColor = correctColor(color, 1, placeholderColor);\n } else {\n placeholderColor = '';\n }\n }\n $: updatePlaceholderColor(state, $jsonPlaceholderColor);\n\n $: jsonScale = rootCtx.getDerivedFromVars(json.scale);\n // Exactly \"none\", \"scale-down\" would not match android\n let scale = 'none';\n $: {\n scale = imageSize($jsonScale) || scale;\n }\n\n $: jsonPosition = rootCtx.getDerivedFromVars({\n content_alignment_horizontal: json.content_alignment_horizontal,\n content_alignment_vertical: json.content_alignment_vertical\n });\n let position = '50% 50%';\n function updatePosition(pos: {\n content_alignment_horizontal?: AlignmentHorizontal;\n content_alignment_vertical?: AlignmentVertical;\n }): void {\n position = correctImagePosition(pos, position);\n }\n $: updatePosition($jsonPosition);\n\n $: jsonA11y = rootCtx.getDerivedFromVars(json.accessibility);\n $: alt = $jsonA11y?.description || '';\n\n $: jsonAspect = rootCtx.getDerivedFromVars(json.aspect);\n let aspectPaddingBottom = '0';\n $: {\n const newRatio = $jsonAspect?.ratio;\n if (newRatio && isPositiveNumber(newRatio)) {\n aspectPaddingBottom = (100 / Number(newRatio)).toFixed(2);\n } else {\n aspectPaddingBottom = '0';\n }\n }\n\n $: jsonTintColor = rootCtx.getDerivedFromVars(json.tint_color);\n let tintColor: string | undefined = undefined;\n $: jsonTintMode = rootCtx.getDerivedFromVars(json.tint_mode);\n let tintMode: TintMode = 'source_in';\n let svgFilterId = '';\n $: {\n const val = $jsonTintColor;\n const newTintColor = val ? correctColor(val) : undefined;\n const newTintMode = correctTintMode($jsonTintMode, tintMode);\n if (newTintColor !== tintColor || newTintMode !== tintMode) {\n rootCtx.removeSvgFilter(tintColor, tintMode);\n svgFilterId = newTintColor ? rootCtx.addSvgFilter(newTintColor, newTintMode) : '';\n tintColor = newTintColor;\n tintMode = newTintMode;\n }\n }\n\n $: jsonAppearanceAnimation = rootCtx.getDerivedFromVars(json.appearance_animation);\n let animationInterpolator = '';\n let animationFadeStart = 0;\n let animationDelay = 0;\n let animationDuration = 0;\n\n $: if ($jsonAppearanceAnimation && $jsonAppearanceAnimation.type === 'fade') {\n const animation = $jsonAppearanceAnimation;\n\n animationInterpolator = correctCSSInterpolator(animation.interpolator, 'ease_in_out').replace(/_/g, '-');\n animationDuration = correctNonNegativeNumber(animation.duration, 300);\n animationDelay = correctNonNegativeNumber(animation.start_delay, 0);\n animationFadeStart = correctNonNegativeNumber(animation.alpha, 0);\n }\n\n $: jsonFilters = rootCtx.getDerivedFromVars(json.filters);\n let filter = '';\n let filterClipPath = '';\n $: {\n let newFilter = '';\n let newClipPath = '';\n if (Array.isArray($jsonFilters) && $jsonFilters.length) {\n newFilter = getCssFilter($jsonFilters, rootCtx.logError);\n }\n if (newFilter) {\n newClipPath = 'polygon(0% 0%, 0% 100%, 100% 100%, 100% 0%)';\n }\n filter = newFilter;\n filterClipPath = newClipPath;\n }\n\n $: mods = {\n aspect: aspectPaddingBottom !== '0',\n 'is-width-content': isWidthContent,\n 'is-height-content': isHeightContent,\n loaded: state === STATE_LOADED,\n 'before-appearance': Boolean(animationInterpolator) && state === STATE_LOADING\n };\n\n $: style = {\n // Image preview shows, if loading of original image is failed\n 'background-image': backgroundImage,\n 'background-color': backgroundImage ? undefined : placeholderColor,\n 'background-size': scale,\n 'clip-path': filterClipPath || undefined,\n 'object-fit': scale,\n 'object-position': position,\n filter: [\n state === STATE_LOADED && svgFilterId ? `url(#${svgFilterId})` : '',\n filter\n ].filter(Boolean).join(' '),\n '--divkit-appearance-interpolator': animationInterpolator || undefined,\n '--divkit-appearance-fade-start': animationInterpolator ? animationFadeStart : undefined,\n '--divkit-appearance-delay': animationInterpolator ? `${animationDelay}ms` : undefined,\n '--divkit-appearance-duration': animationInterpolator ? `${animationDuration}ms` : undefined\n };\n\n function onLoad(): void {\n if (state === STATE_LOADING) {\n state = STATE_LOADED;\n }\n }\n\n function onError(): void {\n if (state === STATE_LOADING) {\n state = STATE_ERROR;\n }\n }\n\n onDestroy(() => {\n rootCtx.removeSvgFilter(tintColor, tintMode);\n });\n\n // Recreate image on svg filter change for the Safari\n</script>\n\n{#if !hasError}\n <Outer\n cls={genClassName('image', css, mods)}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n customDescription={true}\n >\n {#key svgFilterId}\n {#if mods.aspect}\n <span class={css['image__aspect-wrapper']} style:padding-bottom=\"{aspectPaddingBottom}%\">\n <img\n class={css.image__image}\n src={state === STATE_ERROR ? FALLBACK_IMAGE : imageUrl}\n loading=\"lazy\"\n decoding=\"async\"\n style={makeStyle(style)}\n {alt}\n aria-hidden={alt ? null : 'true'}\n on:load={onLoad}\n on:error={onError}\n >\n </span>\n {:else}\n <img\n class={css.image__image}\n src={state === STATE_ERROR ? FALLBACK_IMAGE : imageUrl}\n loading=\"lazy\"\n decoding=\"async\"\n style={makeStyle(style)}\n {alt}\n aria-hidden={alt ? null : 'true'}\n on:load={onLoad}\n on:error={onError}\n >\n {/if}\n {/key}\n </Outer>\n{/if}\n","import type { AlignmentHorizontal, AlignmentVertical } from '../types/alignment';\nimport { imagePos } from './background';\n\nexport function correctImagePosition(obj: {\n content_alignment_horizontal?: AlignmentHorizontal;\n content_alignment_vertical?: AlignmentVertical;\n}, defaultVal: string): string {\n const halign = obj.content_alignment_horizontal;\n const valign = obj.content_alignment_vertical;\n\n if (\n halign && halign !== 'left' && halign !== 'center' && halign !== 'right' ||\n valign && valign !== 'top' && valign !== 'center' && valign !== 'bottom'\n ) {\n return defaultVal;\n }\n\n return imagePos(obj);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"grid\":\"divkit-d9080\",\"grid_halign_left\":\"divkit-f63b3\",\"grid_halign_center\":\"divkit-a14a6\",\"grid_halign_right\":\"divkit-b0717\",\"grid_valign_top\":\"divkit-fbca8\",\"grid_valign_center\":\"divkit-d4310\",\"grid_valign_bottom\":\"divkit-e4205\"};","import { pxToEm } from './pxToEm';\n\n/**\n * Filter weights, that would result in < 1fr\n * @param weight\n */\nfunction isSpannedWeight(weight: number): boolean {\n return weight > 0 && weight < 1;\n}\n\nfunction formatWeight(weight: number): string {\n return String(Math.ceil(weight * 1000) / 1000);\n}\n\nexport function gridCalcTemplates(weights: number[], minSizes: number[], length: number): string {\n // If result weight is lesser than 1, multiply all weights so all of them would exceed 1\n if (weights.some(isSpannedWeight)) {\n const multiply = Math.max(...weights.filter(isSpannedWeight).map(weight => 1 / weight));\n weights = weights.map(weight => weight * multiply);\n }\n\n const allTracksHasWeight = weights.every(Boolean);\n let minSize = 0;\n let totalWeight = 0;\n const template: string[] = [];\n\n if (allTracksHasWeight) {\n totalWeight = weights.reduce((acc, item) => {\n return acc + item;\n }, 0);\n\n for (let i = 0; i < length; ++i) {\n if (!minSizes[i]) {\n continue;\n }\n\n const minTrackSize = (minSizes[i] / weights[i]) * totalWeight;\n\n if (minTrackSize > minSize) {\n minSize = minTrackSize;\n }\n }\n }\n\n for (let i = 0; i < length; ++i) {\n if (minSize) {\n template[i] =\n `minmax(${pxToEm((minSize * weights[i]) / totalWeight)},${formatWeight(weights[i])}fr)`;\n } else if (weights[i]) {\n template[i] = `${formatWeight(weights[i])}fr`;\n } else {\n template[i] = 'auto';\n }\n }\n\n return template.join(' ');\n}\n","<script lang=\"ts\">\n import { getContext } from 'svelte';\n import { derived, Readable } from 'svelte/store';\n\n import css from './Grid.module.css';\n\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivGridData } from '../../types/grid';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivBaseData } from '../../types/base';\n import type { Size } from '../../types/sizes';\n import type { AlignmentHorizontal, AlignmentVertical } from '../../types/alignment';\n import type { MaybeMissing } from '../../expressions/json';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import Outer from '../utilities/Outer.svelte';\n import Unknown from '../utilities/Unknown.svelte';\n import { wrapError } from '../../utils/wrapError';\n import { genClassName } from '../../utils/genClassName';\n import { gridCalcTemplates } from '../../utils/gridCalcTemplates';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { correctAlignmentVertical } from '../../utils/correctAlignmentVertical';\n import { correctAlignmentHorizontal } from '../../utils/correctAlignmentHorizontal';\n\n export let json: Partial<DivGridData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n let hasItemsError = false;\n $: jsonItems = json.items;\n $: {\n if (!jsonItems?.length || !Array.isArray(jsonItems)) {\n hasItemsError = true;\n rootCtx.logError(wrapError(new Error('Incorrect or empty \"items\" prop for div \"grid\"')));\n } else {\n hasItemsError = false;\n }\n }\n\n\n let columnCount = 1;\n $: jsonColumnCount = rootCtx.getDerivedFromVars(json.column_count);\n $: {\n columnCount = correctPositiveNumber($jsonColumnCount, columnCount);\n }\n\n $: items = (!hasItemsError && jsonItems || []).map(item => {\n let childJson: DivBaseData = item as DivBaseData;\n let childContext: TemplateContext = templateContext;\n\n ({\n templateContext: childContext,\n json: childJson\n } = rootCtx.processTemplate(childJson, childContext));\n\n return {\n json: childJson,\n templateContext: childContext,\n origJson: item\n };\n });\n\n function replaceItems(items: DivBaseData[]): void {\n json = {\n ...json,\n items\n };\n }\n\n interface ChildInfo {\n rowSpan: number | undefined;\n columnSpan: number | undefined;\n width: MaybeMissing<Size> | undefined;\n height: MaybeMissing<Size> | undefined;\n }\n let childStore: Readable<ChildInfo[]>;\n $: {\n let children: Readable<ChildInfo>[] = [];\n\n items.forEach(item => {\n children.push(\n rootCtx.getDerivedFromVars({\n rowSpan: item.json.row_span,\n columnSpan: item.json.column_span,\n width: item.json.width,\n height: item.json.height\n })\n );\n });\n\n // Create a new array every time so that it is not equal to the previous one\n childStore = derived(children, val => [...val]);\n }\n\n let resultItems: {\n json: DivBaseData;\n templateContext: TemplateContext;\n origJson: DivBaseData;\n layoutParams: LayoutParams;\n }[];\n let columnsWeight: number[] = [];\n let rowsWeight: number[] = [];\n let columnsMinWidth: number[] = [];\n let rowsMinHeight: number[] = [];\n let rowCount = 0;\n let hasLayoutError = false;\n $: {\n const used: Record<string, boolean> = {};\n let x = 0;\n let y = 0;\n columnsWeight = [];\n rowsWeight = [];\n columnsMinWidth = [];\n rowsMinHeight = [];\n hasLayoutError = false;\n\n resultItems = items.map((item, index) => {\n const childInfo = $childStore[index];\n const colSpan = Number(childInfo.columnSpan) || 1;\n const rowSpan = Number(childInfo.rowSpan) || 1;\n\n const gridArea = {\n x,\n y,\n colSpan,\n rowSpan\n };\n\n const widthWeight =\n childInfo.width?.type === 'match_parent' ?\n Number(childInfo.width.weight || 1) / colSpan :\n 0;\n const heightWeight =\n childInfo.height?.type === 'match_parent' ?\n Number(childInfo.height.weight || 1) / rowSpan :\n 0;\n const widthMin =\n colSpan === 1 && childInfo.width?.type === 'fixed' && childInfo.width.value ?\n Number(childInfo.width.value) / colSpan :\n 0;\n const heightMin =\n rowSpan === 1 && childInfo.height?.type === 'fixed' && childInfo.height.value ?\n Number(childInfo.height.value) / rowSpan :\n 0;\n\n for (let i = x; i < x + colSpan; ++i) {\n for (let j = y; j < y + rowSpan; ++j) {\n if (used[i + '_' + j]) {\n hasLayoutError = true;\n continue;\n }\n\n used[i + '_' + j] = true;\n\n if (!columnsWeight[i] || columnsWeight[i] < widthWeight) {\n columnsWeight[i] = widthWeight;\n }\n\n if (!rowsWeight[j] || rowsWeight[j] < heightWeight) {\n rowsWeight[j] = heightWeight;\n }\n\n if (!columnsMinWidth[i] || columnsMinWidth[i] < widthMin) {\n columnsMinWidth[i] = widthMin;\n }\n\n if (!rowsMinHeight[j] || rowsMinHeight[j] < heightMin) {\n rowsMinHeight[j] = heightMin;\n }\n }\n }\n\n do {\n ++x;\n\n if (x >= columnCount) {\n x = 0;\n ++y;\n }\n } while (used[x + '_' + y]);\n\n return {\n ...item,\n layoutParams: {\n gridArea,\n fakeElement: layoutParams?.fakeElement || false\n }\n };\n });\n\n if (x !== 0) {\n hasLayoutError = true;\n }\n\n if (hasLayoutError) {\n rootCtx.logError(wrapError(new Error('Mismatching \"grid\" rows/columns')));\n }\n\n rowCount = y;\n }\n\n let contentVAlign: AlignmentVertical = 'top';\n $: jsonContentVAlign = rootCtx.getDerivedFromVars(json.content_alignment_vertical);\n $: {\n contentVAlign = correctAlignmentVertical($jsonContentVAlign, contentVAlign);\n }\n\n let contentHAlign: AlignmentHorizontal = 'left';\n $: jsonContentHAlign = rootCtx.getDerivedFromVars(json.content_alignment_horizontal);\n $: {\n contentHAlign = correctAlignmentHorizontal($jsonContentHAlign, contentHAlign);\n }\n\n $: mods = {\n valign: contentVAlign,\n halign: contentHAlign\n };\n\n $: style = {\n 'grid-template-columns': gridCalcTemplates(columnsWeight, columnsMinWidth, columnCount),\n 'grid-template-rows': gridCalcTemplates(rowsWeight, rowsMinHeight, rowCount)\n };\n\n $: hasError = hasItemsError || hasLayoutError;\n</script>\n\n{#if !hasError}\n <Outer\n cls={genClassName('grid', css, mods)}\n {json}\n {origJson}\n {templateContext}\n {style}\n {layoutParams}\n parentOf={json.items}\n {replaceItems}\n >\n {#key resultItems}\n {#each resultItems as item}\n <Unknown layoutParams={item.layoutParams} div={item.json} templateContext={item.templateContext} origJson={item.origJson} />\n {/each}\n {/key}\n </Outer>\n{/if}\n","// extracted by mini-css-extract-plugin\nexport default {\"gallery\":\"divkit-cbb0f\",\"gallery_orientation_horizontal\":\"divkit-c9be7\",\"gallery_orientation_vertical\":\"divkit-a72d5\",\"gallery__scroller\":\"divkit-a4e39\",\"gallery_scroll-snap\":\"divkit-f606e\",\"gallery__items-grid\":\"divkit-eb4a5\",\"gallery__items\":\"divkit-af276\",\"gallery__arrow\":\"divkit-b72d7\",\"gallery__arrow-icon\":\"divkit-d100d\",\"gallery__arrow_left\":\"divkit-a0a5d\",\"gallery__arrow_right\":\"divkit-f0f59\",\"gallery__arrow-icon-path\":\"divkit-b4173\"};","export function joinTemplateSizes(sizes: string[]): string {\n const result: string[] = [];\n let temp = sizes[0];\n let counter = 1;\n\n for (let i = 1; i <= sizes.length; i++) {\n if (sizes[i] !== temp) {\n result.push(counter > 1 ? `repeat(${counter}, ${temp})` : temp);\n temp = sizes[i];\n counter = 1;\n } else {\n counter++;\n }\n }\n\n return result.join(' ');\n}\n","type SimpleFunction = (...args: any[]) => any;\ntype DebouncedFunction<F extends SimpleFunction> = (...args: Parameters<F>) => void;\n\nexport function debounce<F extends SimpleFunction>(fn: F, timeout: number): DebouncedFunction<F> {\n let timer: ReturnType<typeof setTimeout> | null;\n\n return function(this: ThisParameterType<F>, ...args: Parameters<F>) {\n if (timer !== null) {\n clearTimeout(timer);\n }\n\n timer = setTimeout(() => {\n fn.apply(this, args);\n timer = null;\n }, timeout);\n };\n}\n","<script lang=\"ts\">\n import { getContext, onDestroy, onMount } from 'svelte';\n import { derived, Readable } from 'svelte/store';\n\n import css from './Gallery.module.css';\n import rootCss from '../Root.module.css';\n\n import type { Align, LayoutParams } from '../../types/layoutParams';\n import type { DivGalleryData } from '../../types/gallery';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivBaseData } from '../../types/base';\n import type { Overflow, SwitchElements } from '../../types/switch-elements';\n import type { Orientation } from '../../types/orientation';\n import type { MaybeMissing } from '../../expressions/json';\n import type { Size } from '../../types/sizes';\n import type { Style } from '../../types/general';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import Outer from '../utilities/Outer.svelte';\n import Unknown from '../utilities/Unknown.svelte';\n import { wrapError } from '../../utils/wrapError';\n import { genClassName } from '../../utils/genClassName';\n import { pxToEm } from '../../utils/pxToEm';\n import { makeStyle } from '../../utils/makeStyle';\n import { correctGeneralOrientation } from '../../utils/correctGeneralOrientation';\n import { correctAlignment } from '../../utils/correctAlignment';\n import { assignIfDifferent } from '../../utils/assignIfDifferent';\n import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n import { correctEdgeInserts } from '../../utils/correctEdgeInserts';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { joinTemplateSizes } from '../../utils/joinTemplateSizes';\n import { debounce } from '../../utils/debounce';\n\n export let json: Partial<DivGalleryData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n let scroller: HTMLElement;\n let galleryItemsWrappers: HTMLElement[] = [];\n let hasScrollLeft = false;\n let hasScrollRight = false;\n\n let resizeObserver: ResizeObserver | null = null;\n let itemsGridElem: HTMLElement;\n let mounted = false;\n\n const leftClass = rootCtx.getCustomization('galleryLeftClass');\n const rightClass = rootCtx.getCustomization('galleryRightClass');\n\n let hasError = false;\n $: jsonItems = json.items;\n $: {\n if (!jsonItems?.length || !Array.isArray(jsonItems)) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Incorrect or empty \"items\" prop for div \"gallery\"')));\n } else {\n hasError = false;\n }\n }\n\n function replaceItems(items: DivBaseData[]): void {\n json = {\n ...json,\n items\n };\n }\n\n const isDesktop = rootCtx.isDesktop;\n\n interface Item {\n json: DivBaseData;\n templateContext: TemplateContext;\n origJson: DivBaseData;\n }\n\n $: items = (!hasError && jsonItems || []).map(item => {\n let childJson: DivBaseData = item as DivBaseData;\n let childContext: TemplateContext = templateContext;\n\n ({\n templateContext: childContext,\n json: childJson\n } = rootCtx.processTemplate(childJson, childContext));\n\n return {\n json: childJson,\n templateContext: childContext,\n origJson: item\n };\n });\n\n $: shouldCheckArrows = $isDesktop && mounted && !hasError;\n $: if (shouldCheckArrows) {\n if (typeof ResizeObserver !== 'undefined') {\n // Gallery can contain a dynamic content (e.g. loading images with auto-size)\n resizeObserver = new ResizeObserver(() => {\n updateArrowsVisibilityDebounced();\n });\n resizeObserver.observe(itemsGridElem);\n }\n } else if (resizeObserver) {\n resizeObserver.disconnect();\n resizeObserver = null;\n }\n\n $: jsonColumnCount = rootCtx.getDerivedFromVars(json.column_count);\n let columns = 1;\n $: {\n columns = correctPositiveNumber($jsonColumnCount, columns);\n }\n\n function rebuildItemsGrid(items: Item[], columns: number): Item[][] {\n let column = 0;\n let res: Item[][] = [];\n\n for (let i = 0; i < items.length; ++i) {\n if (!res[column]) {\n res[column] = [];\n }\n res[column].push(items[i]);\n if (++column >= columns) {\n column = 0;\n }\n }\n\n return res;\n }\n $: itemsGrid = rebuildItemsGrid(items, columns);\n\n $: jsonOrientation = rootCtx.getDerivedFromVars(json.orientation);\n let orientation: Orientation = 'horizontal';\n $: {\n orientation = correctGeneralOrientation($jsonOrientation, orientation);\n }\n\n let align: Align = 'start';\n $: jsonCrossContentAlignment = rootCtx.getDerivedFromVars(json.cross_content_alignment);\n $: {\n align = correctAlignment($jsonCrossContentAlignment, align);\n }\n\n let gridGap: string | undefined;\n let itemSpacing = 8;\n $: jsonItemSpacing = rootCtx.getDerivedFromVars(json.item_spacing);\n $: {\n itemSpacing = correctNonNegativeNumber($jsonItemSpacing, itemSpacing);\n gridGap = pxToEm(itemSpacing);\n }\n\n let crossGridGap: string | undefined;\n let crossSpacing;\n $: jsonCrossSpacing = rootCtx.getDerivedFromVars(json.cross_spacing);\n $: {\n crossSpacing = correctNonNegativeNumber($jsonCrossSpacing, itemSpacing);\n crossGridGap = pxToEm(crossSpacing);\n }\n\n $: jsonPaddings = rootCtx.getDerivedFromVars(json.paddings);\n let padding = '';\n $: {\n padding = correctEdgeInserts($jsonPaddings, padding);\n }\n\n $: gridTemplate = orientation === 'horizontal' ? 'grid-template-columns' : 'grid-template-rows';\n let templateSizes: string[] = [];\n\n let childStore: Readable<(MaybeMissing<Size> | undefined)[]>;\n $: {\n let children: Readable<MaybeMissing<Size> | undefined>[] = [];\n\n items.forEach(item => {\n const itemSize = orientation === 'horizontal' ? 'width' : 'height';\n children.push(rootCtx.getDerivedFromVars(item.json[itemSize]));\n });\n\n childStore = derived(children, val => val);\n }\n $: {\n templateSizes = [];\n if (columns > 1) {\n // TODO: think about match_parent in this task DIVKIT-307\n templateSizes.push('auto');\n } else {\n $childStore.forEach(childInfo => {\n if ((!childInfo && orientation === 'horizontal') || childInfo?.type === 'match_parent') {\n templateSizes.push('100%');\n } else {\n templateSizes.push('max-content');\n }\n });\n }\n }\n\n let scrollerStyle: Style = {};\n let scrollSnap = false;\n $: jsonScrollMode = rootCtx.getDerivedFromVars(json.scroll_mode);\n let childLayoutParams: LayoutParams = {};\n $: {\n const newScrollerStyle: Style = {};\n let newChildLayoutParams: LayoutParams = {};\n scrollSnap = false;\n\n if (layoutParams?.fakeElement) {\n newChildLayoutParams.fakeElement = true;\n }\n\n if (orientation === 'horizontal') {\n newChildLayoutParams.parentVAlign = align;\n } else {\n newChildLayoutParams.parentHAlign = align;\n }\n\n if ($jsonScrollMode === 'paging') {\n scrollSnap = true;\n newChildLayoutParams.scrollSnap = 'start';\n const scrollPadding = orientation === 'horizontal' ? 'scroll-padding-left' : 'scroll-padding-top';\n newScrollerStyle[scrollPadding] = pxToEm(itemSpacing / 2);\n }\n\n // todo multiple columns\n if (columns === 1) {\n newChildLayoutParams.parentLayoutOrientation = orientation;\n }\n\n scrollerStyle = assignIfDifferent(newScrollerStyle, scrollerStyle);\n childLayoutParams = assignIfDifferent(newChildLayoutParams, childLayoutParams);\n }\n\n $: jsonRestrictParentScroll = rootCtx.getDerivedFromVars(json.restrict_parent_scroll);\n\n $: gridStyle = {\n padding,\n 'grid-gap': crossGridGap\n };\n\n $: columnStyle = {\n 'grid-gap': gridGap,\n [gridTemplate]: joinTemplateSizes(templateSizes)\n };\n\n $: mods = {\n orientation,\n 'scroll-snap': scrollSnap\n };\n\n $: jsonDefaultItem = rootCtx.getDerivedFromVars(json.default_item);\n let defaultItem = 0;\n $: {\n defaultItem = correctNonNegativeNumber($jsonDefaultItem, defaultItem);\n }\n\n function updateArrowsVisibility(): void {\n if (!scroller) {\n return;\n }\n\n const scrollLeft = scroller.scrollLeft;\n const scrollWidth = scroller.scrollWidth;\n const containerWidth = scroller.offsetWidth;\n\n hasScrollLeft = scrollLeft > 2;\n hasScrollRight = scrollLeft + containerWidth < scrollWidth - 2;\n }\n\n const updateArrowsVisibilityDebounced = debounce(updateArrowsVisibility, 50);\n\n function scroll(type: 'left' | 'right'): void {\n scroller.scroll({\n left: scroller.scrollLeft + (scroller.offsetWidth * .75) * (type === 'right' ? 1 : -1),\n behavior: 'smooth'\n });\n }\n\n function getItems(): HTMLElement[] {\n let res: HTMLElement[] = [];\n let maxLen = galleryItemsWrappers[0].children.length;\n\n for (let j = 0; j < maxLen; ++j) {\n for (let i = 0; i < columns; ++i) {\n const elem = galleryItemsWrappers[i].children[j] as HTMLElement;\n if (elem) {\n res.push(elem);\n }\n }\n }\n\n return res;\n }\n\n function scrollToGalleryItem(galleryElements: HTMLElement[], index: number, behavior: ScrollBehavior = 'smooth'): void {\n const isHorizontal = orientation === 'horizontal';\n const elementOffset: keyof HTMLElement = isHorizontal ? 'offsetLeft' : 'offsetTop';\n const scrollDirection: keyof ScrollToOptions = isHorizontal ? 'left' : 'top';\n\n // 0.01 forces Chromium to use scroll-snap (exact correct scroll position will not trigger it)\n // Chromium will save scroll-snapped value and will not save exact one\n // Saved scroll position is used on resnapping (e.g. content change)\n\n const elem = galleryElements[index];\n\n if (elem) {\n scroller.scroll({\n [scrollDirection]: Math.max(0, elem[elementOffset] + .01 - itemSpacing / 2),\n behavior\n });\n }\n }\n\n function checkIsIntersecting(scroller: DOMRect, item: DOMRect): boolean {\n if (orientation === 'horizontal') {\n return item.right > scroller.left && scroller.right > item.left;\n }\n\n return item.bottom > scroller.top && scroller.bottom > item.top;\n }\n\n function checkIsFullyIntersecting(scroller: DOMRect, item: DOMRect): boolean {\n if (orientation === 'horizontal') {\n return item.left >= scroller.left && item.right <= scroller.right;\n }\n\n return item.top >= scroller.top && item.bottom <= scroller.bottom;\n }\n\n function calculateCurrentElementIndex(action: 'prev' | 'next'): number {\n const galleryElements = getItems();\n const scrollerRect = scroller.getBoundingClientRect();\n\n // Try to find the most left fully visible element\n const firstFullyVisibleElement = galleryElements.findIndex(el =>\n checkIsFullyIntersecting(scrollerRect, el.getBoundingClientRect())\n );\n\n if (firstFullyVisibleElement !== -1) {\n return firstFullyVisibleElement;\n }\n\n // If there is no fully visible elements, it means that:\n // - only one element is partly visible and its width bigger than gallery width\n // - two elements are partly visible\n const visibleElementsMap = galleryElements.map(el =>\n checkIsIntersecting(scrollerRect, el.getBoundingClientRect())\n );\n const firstVisibleElement = visibleElementsMap.findIndex(Boolean);\n\n if (firstVisibleElement !== -1) {\n // If two elements are partly visible, we should scroll to current element on \"set_item_previous\" action\n const isPreviousEqualCurrent = action === 'prev' && visibleElementsMap.filter(Boolean).length === 2;\n return isPreviousEqualCurrent ? firstVisibleElement + 1 : firstVisibleElement;\n }\n\n return action === 'prev' ? 1 : galleryElements.length - 2;\n }\n\n if (json.id && !hasError && !layoutParams?.fakeElement) {\n rootCtx.registerInstance<SwitchElements>(json.id, {\n setCurrentItem(item: number) {\n const galleryElements = getItems();\n if (item < 0 || item > galleryElements.length - 1) {\n throw new Error('Item is out of range in \"set-current-item\" action');\n }\n\n scrollToGalleryItem(galleryElements, item);\n },\n setPreviousItem(overflow: Overflow) {\n const currentElementIndex = calculateCurrentElementIndex('prev');\n const galleryElements = getItems();\n let previousItem = currentElementIndex - 1;\n\n if (previousItem < 0) {\n previousItem = overflow === 'ring' ? galleryElements.length - 1 : currentElementIndex;\n }\n\n scrollToGalleryItem(galleryElements, previousItem);\n },\n setNextItem(overflow: Overflow) {\n // Go to scroller start, if we reached right/bottom edge of scroller\n const isEdgeScroll = orientation === 'horizontal' ? (\n scroller.scrollLeft + scroller.offsetWidth === scroller.scrollWidth\n ) : (\n scroller.scrollTop + scroller.offsetHeight === scroller.scrollHeight\n );\n const galleryElements = getItems();\n if (isEdgeScroll && overflow === 'ring') {\n scrollToGalleryItem(galleryElements, 0);\n return;\n }\n\n const currentElementIndex = calculateCurrentElementIndex('next');\n let nextItem = currentElementIndex + 1;\n\n if (nextItem > galleryElements.length - 1) {\n nextItem = overflow === 'ring' ? 0 : currentElementIndex;\n }\n\n scrollToGalleryItem(galleryElements, nextItem);\n }\n });\n }\n\n onMount(() => {\n mounted = true;\n\n if (!hasError) {\n updateArrowsVisibility();\n\n if (defaultItem) {\n const galleryElements = getItems();\n scrollToGalleryItem(galleryElements, defaultItem, 'auto');\n }\n }\n });\n\n onDestroy(() => {\n mounted = false;\n\n if (json.id && !layoutParams?.fakeElement) {\n rootCtx.unregisterInstance(json.id);\n }\n });\n</script>\n\n<svelte:window on:resize={shouldCheckArrows ? updateArrowsVisibilityDebounced : null} />\n\n{#if !hasError}\n <Outer\n cls={genClassName('gallery', css, mods)}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n customPaddings={true}\n customActions={'gallery'}\n parentOf={jsonItems}\n {replaceItems}\n >\n <div\n class=\"{css.gallery__scroller} {$jsonRestrictParentScroll ? rootCss['root_restrict-scroll'] : ''}\"\n bind:this={scroller}\n on:scroll={shouldCheckArrows ? updateArrowsVisibility : null}\n style={makeStyle(scrollerStyle)}\n >\n <div\n bind:this={itemsGridElem}\n class={css['gallery__items-grid']}\n style={makeStyle(gridStyle)}\n >\n {#key itemsGrid}\n {#each itemsGrid as itemsRow, rowIndex}\n <div\n class={css.gallery__items}\n style={makeStyle(columnStyle)}\n bind:this={galleryItemsWrappers[rowIndex]}\n >\n {#each itemsRow as item}\n <Unknown\n layoutParams={childLayoutParams}\n div={item.json}\n templateContext={item.templateContext}\n origJson={item.origJson}\n />\n {/each}\n </div>\n {/each}\n {/key}\n </div>\n </div>\n {#if orientation === 'horizontal'}\n {#if hasScrollLeft && shouldCheckArrows}\n <!-- svelte-ignore a11y-click-events-have-key-events -->\n <div class=\"{leftClass || `${css.gallery__arrow} ${css.gallery__arrow_left}`}\" on:click={() => scroll('left')}>\n {#if !leftClass}\n <svg class={css['gallery__arrow-icon']} xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\">\n <path class={css['gallery__arrow-icon-path']} d=\"m10 16 8.3 8 1.03-1-4-6-.7-1 .7-1 4-6-1.03-1z\"/>\n </svg>\n {/if}\n </div>\n {/if}\n {#if hasScrollRight && shouldCheckArrows}\n <!-- svelte-ignore a11y-click-events-have-key-events -->\n <div class=\"{rightClass || `${css.gallery__arrow} ${css.gallery__arrow_right}`}\" on:click={() => scroll('right')}>\n {#if !rightClass}\n <svg class={css['gallery__arrow-icon']} xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\">\n <path class={css['gallery__arrow-icon-path']} d=\"M22 16l-8.3 8-1.03-1 4-6 .7-1-.7-1-4-6 1.03-1 8.3 8z\"/>\n </svg>\n {/if}\n </div>\n {/if}\n {/if}\n </Outer>\n{/if}\n","import type { Align } from '../types/layoutParams';\n\nexport function correctAlignment(\n orientation: string | undefined,\n defaultVal: Align\n): Align {\n if (\n orientation === 'start' ||\n orientation === 'center' ||\n orientation === 'end'\n ) {\n return orientation;\n }\n\n return defaultVal;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"tabs\":\"divkit-e0df5\",\"tabs__list\":\"divkit-ea19b\",\"tabs__item\":\"divkit-c25c7\",\"tabs__item_selected\":\"divkit-d560a\",\"tabs__item_actionable\":\"divkit-dfda0\",\"tabs__panels\":\"divkit-f5dc0\",\"tabs__swiper\":\"divkit-eb42c\",\"tabs__swiper_animated\":\"divkit-b9f18\",\"tabs__swiper_inited\":\"divkit-fa574\",\"tabs__panel\":\"divkit-cc9fb\",\"tabs__panel_visible\":\"divkit-e7306\",\"tabs__separator\":\"divkit-b85bf\"};","<script lang=\"ts\">\n import { getContext, onDestroy, tick } from 'svelte';\n import { writable } from 'svelte/store';\n\n import css from './Tabs.module.css';\n import rootCss from '../Root.module.css';\n\n import type { Mods } from '../../types/general';\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivTabsData } from '../../types/tabs';\n import type { Action, DivBase, TemplateContext } from '../../../typings/common';\n import type { EdgeInsets } from '../../types/edgeInserts';\n import type { SwitchElements, Overflow } from '../../types/switch-elements';\n import type { TabItem } from '../../types/tabs';\n import type { MaybeMissing } from '../../expressions/json';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import Outer from '../utilities/Outer.svelte';\n import Unknown from '../utilities/Unknown.svelte';\n import Actionable from '../utilities/Actionable.svelte';\n import { wrapError } from '../../utils/wrapError';\n import { genClassName } from '../../utils/genClassName';\n import { makeStyle } from '../../utils/makeStyle';\n import { ARROW_LEFT, ARROW_RIGHT, END, HOME } from '../../utils/keyboard/codes';\n import { pxToEm, pxToEmWithUnits } from '../../utils/pxToEm';\n import { isPositiveNumber } from '../../utils/isPositiveNumber';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { correctEdgeInserts } from '../../utils/correctEdgeInserts';\n import { correctBorderRadius } from '../../utils/correctBorderRadius';\n import { correctColor } from '../../utils/correctColor';\n import { correctFontWeight } from '../../utils/correctFontWeight';\n import { isNonNegativeNumber } from '../../utils/isNonNegativeNumber';\n import { assignIfDifferent } from '../../utils/assignIfDifferent';\n import { Coords, getTouchCoords } from '../../utils/getTouchCoords';\n import { correctEdgeInsertsObject } from '../../utils/correctEdgeInsertsObject';\n import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n import { edgeInsertsToCss } from '../../utils/edgeInsertsToCss';\n\n export let json: Partial<DivTabsData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n const instId = rootCtx.genId('tabs');\n\n let hasError = false;\n $: items = json.items || [];\n interface ChildInfo {\n index: number;\n title: MaybeMissing<string> | undefined;\n title_click_action?: MaybeMissing<Action> | undefined;\n }\n let childStore = writable<ChildInfo[]>([]);\n $: if (Array.isArray(items) && items.length) {\n let children: ChildInfo[] = [];\n\n items.forEach((item, index) => {\n const part = rootCtx.getJsonWithVars({\n index,\n title: item.title,\n title_click_action: item.title_click_action,\n });\n if (part.title && typeof part.title === 'string') {\n children.push(part as ChildInfo);\n } else {\n rootCtx.logError(wrapError(new Error('Incorrect title for the tab'), {\n additional: {\n index\n }\n }));\n }\n });\n\n childStore.set(children);\n } else {\n childStore.set([]);\n }\n\n $: {\n if (!$childStore?.length) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Incorrect or empty \"items\" prop for div \"tabs\"')));\n } else {\n hasError = false;\n }\n }\n\n $: jsonWidth = rootCtx.getDerivedFromVars(json.width);\n $: jsonHeight = rootCtx.getDerivedFromVars(json.height);\n let childLayoutParams: LayoutParams = {};\n $: {\n let newLayoutParams: LayoutParams = {};\n\n if (layoutParams?.fakeElement) {\n newLayoutParams.fakeElement = true;\n }\n if ($jsonWidth?.type === 'wrap_content') {\n newLayoutParams.parentHorizontalWrapContent = true;\n }\n if (!$jsonHeight || $jsonHeight.type === 'wrap_content') {\n newLayoutParams.parentVerticalWrapContent = true;\n }\n\n childLayoutParams = assignIfDifferent(newLayoutParams, childLayoutParams);\n }\n\n let tabsElem: HTMLElement;\n let panelsWrapper: HTMLElement;\n let swiperElem: HTMLElement;\n let mods: Mods = {};\n const jsonSelectedTab = rootCtx.getJsonWithVars(json.selected_tab);\n let selected = jsonSelectedTab && Number(jsonSelectedTab) || 0;\n\n $: if (!hasError && (selected < 0 || selected >= items.length)) {\n rootCtx.logError(wrapError(new Error('Incorrect \"selected_tab\" prop for div \"tabs\"'), {\n additional: {\n selected: json.selected_tab,\n length: items.length\n }\n }));\n selected = selected < 0 ? 0 : items.length - 1;\n }\n\n $: if (!hasError && !$childStore.some(it => selected === it.index)) {\n rootCtx.logError(wrapError(new Error('Incorrect \"selected_tab\" prop for div \"tabs\"'), {\n additional: {\n selected: json.selected_tab\n }\n }));\n selected = $childStore[0]?.index || 0;\n }\n\n $: jsonTabStyle = rootCtx.getDerivedFromVars(json.tab_title_style);\n $: tabStyle = $jsonTabStyle || {};\n\n let tabFontSize = 12;\n $: {\n tabFontSize = correctPositiveNumber(tabStyle.font_size, tabFontSize);\n }\n\n let tabPaddings = '';\n\n $: {\n if (tabStyle.font_size || tabStyle.paddings) {\n const paddings: EdgeInsets = tabStyle.paddings || {\n top: 6,\n right: 8,\n bottom: 6,\n left: 8\n };\n\n const adjustedPaddings: EdgeInsets = {\n top: (Number(paddings.top) || 0) / tabFontSize * 10,\n right: (Number(paddings.right) || 0) / tabFontSize * 10,\n bottom: (Number(paddings.bottom) || 0) / tabFontSize * 10,\n left: (Number(paddings.left) || 0) / tabFontSize * 10\n };\n\n tabPaddings = correctEdgeInserts(adjustedPaddings, tabPaddings);\n }\n }\n\n let tabLineHeight = '';\n $: {\n const lineHeight = tabStyle.line_height;\n if (lineHeight !== undefined && isPositiveNumber(lineHeight)) {\n tabLineHeight = pxToEm(lineHeight / tabFontSize * 10);\n }\n }\n\n let tabLetterSpacing = '';\n $: {\n const letterSpacing = tabStyle.letter_spacing;\n if (letterSpacing !== undefined && isNonNegativeNumber(letterSpacing)) {\n tabLetterSpacing = pxToEm(letterSpacing / tabFontSize * 10);\n }\n }\n\n let tabBorderRadius = '';\n $: {\n if (tabStyle.corner_radius || tabStyle.corners_radius || tabStyle.font_size) {\n const defaultRadius = tabStyle.corner_radius ?? 1000;\n\n if (tabStyle.corners_radius) {\n tabBorderRadius = correctBorderRadius(tabStyle.corners_radius, defaultRadius, tabFontSize, tabBorderRadius);\n } else if (isNonNegativeNumber(defaultRadius)) {\n tabBorderRadius = pxToEm(defaultRadius / tabFontSize * 10);\n }\n }\n }\n\n let tabActiveFontWeight: number | undefined = undefined;\n let tabActiveFontFamily = '';\n $: {\n tabActiveFontWeight = correctFontWeight(tabStyle.active_font_weight || tabStyle.font_weight, tabActiveFontWeight);\n if (tabStyle.font_family && typeof tabStyle.font_family === 'string') {\n tabActiveFontFamily = rootCtx.typefaceProvider(tabStyle.font_family, {\n fontWeight: tabActiveFontWeight || 400\n });\n } else {\n tabActiveFontFamily = '';\n }\n }\n\n let tabInactiveFontWeight: number | undefined = undefined;\n let tabInactiveFontFamily = '';\n $: {\n tabInactiveFontWeight = correctFontWeight(\n tabStyle.inactive_font_weight || tabStyle.font_weight,\n tabInactiveFontWeight\n );\n if (tabStyle.font_family && typeof tabStyle.font_family === 'string') {\n tabInactiveFontFamily = rootCtx.typefaceProvider(tabStyle.font_family, {\n fontWeight: tabInactiveFontWeight || 400\n });\n } else {\n tabInactiveFontFamily = '';\n }\n }\n\n let tabActiveTextColor = '';\n $: {\n tabActiveTextColor = correctColor(tabStyle.active_text_color, 1, tabActiveTextColor);\n }\n\n let tabInactiveTextColor = '';\n $: {\n tabInactiveTextColor = correctColor(tabStyle.inactive_text_color, 1, tabInactiveTextColor);\n }\n\n let tabActiveBackground = '';\n $: {\n tabActiveBackground = correctColor(tabStyle.active_background_color, 1, tabActiveBackground);\n }\n\n let tabInactiveBackground = '';\n $: {\n tabInactiveBackground = correctColor(tabStyle.inactive_background_color, 1, tabInactiveBackground);\n }\n\n let tabItemSpacing = 0;\n $: {\n tabItemSpacing = correctNonNegativeNumber(tabStyle.item_spacing, tabItemSpacing);\n }\n\n $: jsonSeparator = rootCtx.getDerivedFromVars(json.has_separator);\n $: jsonSeparatorColor = rootCtx.getDerivedFromVars(json.separator_color);\n $: jsonSeparatorPaddings = rootCtx.getDerivedFromVars(json.separator_paddings);\n let separatorBackground = '';\n let separatorMargins = '';\n $: {\n if ($jsonSeparator) {\n if ($jsonSeparatorColor) {\n separatorBackground = correctColor($jsonSeparatorColor, 1, separatorBackground);\n }\n if ($jsonSeparatorPaddings) {\n separatorMargins = correctEdgeInserts($jsonSeparatorPaddings, separatorMargins);\n }\n }\n }\n $: separatorStyle = {\n background: separatorBackground,\n margin: separatorMargins\n };\n\n $: jsonSwipeEnabled = rootCtx.getDerivedFromVars(json.switch_tabs_by_content_swipe_enabled);\n $: isSwipeEnabled = typeof $jsonSwipeEnabled === 'undefined' ?\n true :\n Boolean($jsonSwipeEnabled);\n\n $: jsonRestrictParentScroll = rootCtx.getDerivedFromVars(json.restrict_parent_scroll);\n\n $: jsonTitlePaddings = rootCtx.getDerivedFromVars(json.title_paddings);\n let titlePadding: EdgeInsets | null = null;\n $: {\n titlePadding = correctEdgeInsertsObject($jsonTitlePaddings ? $jsonTitlePaddings : undefined, titlePadding);\n }\n\n let isSwipeInitialized = false;\n let isAnimated = false;\n let previousSelected = selected;\n let showedPanels: boolean[] = [];\n let visiblePanels: boolean[] = [];\n function updateItems(_items: TabItem[]): void {\n if (hasError) {\n return;\n }\n\n showedPanels = items.map((_, i) => i === selected);\n visiblePanels = items.map((_, i) => i === selected);\n }\n $: updateItems(items);\n\n async function setSelected(val: number, focus = false): Promise<void> {\n previousSelected = selected;\n selected = val;\n initTabsSwipe();\n changeTab();\n\n if (focus) {\n await tick();\n\n const selectedTab = tabsElem.querySelector(`.${css.tabs__item_selected}`) as HTMLElement | null;\n if (selectedTab) {\n selectedTab.focus();\n }\n }\n }\n\n function moveSelected(shift: number, focus = false): void {\n const len = $childStore?.length;\n if (!len) {\n return;\n }\n const indices = $childStore.map(it => it.index);\n const selectedIndex = indices.indexOf(selected);\n\n let newSelectedIndex = selectedIndex + shift;\n\n if (newSelectedIndex >= len) {\n newSelectedIndex = 0;\n } else if (newSelectedIndex < 0) {\n newSelectedIndex = len - 1;\n }\n const newSelected = indices[newSelectedIndex];\n\n setSelected(newSelected, focus);\n }\n\n function selectItem(_event: Event, index: number): boolean {\n if (selected !== index) {\n setSelected(index);\n\n return false;\n }\n\n return true;\n }\n\n function changeTab(): void {\n isAnimated = true;\n updateTransform(-selected * 100);\n updateShowedPanels();\n updateWrapperHeight();\n hideNonVisiblePanels();\n currentTransform = -selected * panelsWrapper.clientWidth;\n }\n\n async function updateTransform(transform: number): Promise<void> {\n await tick();\n swiperElem.style.transform = `translate3d(${transform}%,0,0)`;\n }\n\n function updateShowedPanels(around = false): void {\n const start = around ?\n Math.max(0, selected - 1) :\n Math.min(selected, previousSelected);\n const end = around ?\n Math.min(items.length - 1, selected + 1) :\n Math.max(selected, previousSelected);\n\n showedPanels = showedPanels.map((isShowed, index) => isShowed || index >= start && index <= end);\n visiblePanels = visiblePanels.map((_, index) => index >= start && index <= end);\n }\n\n async function updateWrapperHeight(): Promise<void> {\n await tick();\n const activePanel = document.getElementById(`${instId}-panel-${selected}`);\n\n if (activePanel) {\n panelsWrapper.style.height = pxToEm(activePanel.offsetHeight);\n }\n }\n\n let hidePanelsTimeout: number | null = null;\n\n function hideNonVisiblePanels(): void {\n if (hidePanelsTimeout) {\n clearTimeout(hidePanelsTimeout);\n }\n hidePanelsTimeout = window.setTimeout(() => {\n visiblePanels = items.map((_, i) => i === selected);\n }, 400);\n }\n\n function onTabKeydown(event: KeyboardEvent): void {\n if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) {\n return;\n }\n if (!items) {\n return;\n }\n\n if (event.which === ARROW_LEFT) {\n moveSelected(-1, true);\n } else if (event.which === ARROW_RIGHT) {\n moveSelected(1, true);\n } else if (event.which === HOME) {\n setSelected(0, true);\n } else if (event.which === END) {\n setSelected(items.length - 1, true);\n } else {\n return;\n }\n\n event.preventDefault();\n }\n\n // todo desktop arrows\n\n function initTabsSwipe(): void {\n if (isSwipeInitialized) {\n return;\n }\n\n isSwipeInitialized = true;\n panelsWrapper.style.height = pxToEm(panelsWrapper.clientHeight);\n swiperElem.style.transform = `translate3d(${-previousSelected * 100}%,0,0)`;\n }\n\n let startCoords: Coords | null = null;\n let moveCoords: Coords | null = null;\n let swipeStartTime: number;\n let isSwipeStarted = false;\n let isSwipeCanceled = false;\n let startTransform: number;\n let currentTransform: number;\n\n function onTouchStart(event: TouchEvent): void {\n const target = event.target as HTMLElement | null;\n const restrictClosest = target?.closest?.(`.${rootCss['root_restrict-scroll']}`);\n\n if (\n items.length < 2 ||\n event.touches.length > 1 ||\n (restrictClosest && restrictClosest !== panelsWrapper)\n ) {\n return;\n }\n\n isSwipeStarted = false;\n isSwipeCanceled = false;\n startCoords = getTouchCoords(event);\n moveCoords = null;\n swipeStartTime = Date.now();\n startTransform = currentTransform || -selected * panelsWrapper.clientWidth;\n isAnimated = false;\n\n if (hidePanelsTimeout) {\n clearTimeout(hidePanelsTimeout);\n }\n }\n\n function onTouchMove(event: TouchEvent): void {\n const coords = getTouchCoords(event);\n if (\n !startCoords ||\n moveCoords && moveCoords.x === coords.x && moveCoords.y === coords.y\n ) {\n return;\n }\n\n moveCoords = coords;\n const panelsWrapperWidth = panelsWrapper.clientWidth;\n if (isSwipeStarted) {\n currentTransform = coords.x - startCoords.x + startTransform;\n\n // Slowing down scroll on edges\n const scrollWidth = panelsWrapperWidth * items.length;\n if (currentTransform > 0) {\n currentTransform = currentTransform * panelsWrapperWidth / (currentTransform + panelsWrapperWidth * 3);\n } else if (-currentTransform + panelsWrapperWidth > scrollWidth) {\n let space = -currentTransform + panelsWrapperWidth - scrollWidth;\n space = space * panelsWrapperWidth / (space + panelsWrapperWidth * 3);\n currentTransform = panelsWrapperWidth - scrollWidth - space;\n }\n\n updateTransform(currentTransform * 100 / panelsWrapperWidth);\n } else if (Math.abs(coords.y - startCoords.y) > 10) {\n // Swipe is not started, so we cancel it because of vertical scroll\n isSwipeCanceled = true;\n } else if (!isSwipeCanceled && Math.abs(coords.x - startCoords.x) > 8) {\n initTabsSwipe();\n isSwipeStarted = true;\n startCoords = coords;\n updateTransform(-selected * 100);\n updateShowedPanels(true);\n }\n\n if (isSwipeStarted && event.cancelable) {\n event.preventDefault();\n }\n }\n\n function onTouchEnd(): void {\n isSwipeCanceled = false;\n startCoords = null;\n let newSelected = selected;\n if (!isSwipeStarted) {\n return;\n }\n isSwipeStarted = false;\n\n // 512px limit for big screens\n const panelsWrapperWidth = Math.min(512, panelsWrapper.clientWidth);\n const swipeDist = Math.abs(startTransform - currentTransform);\n const swipeCoefficient = Math.min(1, (Date.now() - swipeStartTime) / 750);\n if (swipeDist > (panelsWrapperWidth / 4) * swipeCoefficient) {\n newSelected += (startTransform > currentTransform) ? 1 : -1;\n }\n\n if (newSelected >= items.length) {\n newSelected = items.length - 1;\n } else if (newSelected < 0) {\n newSelected = 0;\n }\n\n if (newSelected === selected) {\n // Scroll back to current tab\n currentTransform = -newSelected * panelsWrapperWidth;\n updateTransform(-newSelected * 100);\n hideNonVisiblePanels();\n } else {\n setSelected(newSelected);\n }\n }\n\n if (json.id && !hasError && !layoutParams?.fakeElement) {\n rootCtx.registerInstance<SwitchElements>(json.id, {\n setCurrentItem(item: number) {\n if (item < 0 || item > items.length - 1) {\n throw new Error('Item is out of range in \"set-current-item\" action');\n }\n\n setSelected(item);\n },\n setPreviousItem(overflow: Overflow) {\n let previousItem = selected - 1;\n\n if (previousItem < 0) {\n previousItem = overflow === 'ring' ? items.length - 1 : selected;\n }\n\n setSelected(previousItem);\n },\n setNextItem(overflow: Overflow) {\n let nextItem = selected + 1;\n\n if (nextItem > items.length - 1) {\n nextItem = overflow === 'ring' ? 0 : selected;\n }\n\n setSelected(nextItem);\n }\n });\n }\n\n onDestroy(() => {\n if (json.id && !layoutParams?.fakeElement) {\n rootCtx.unregisterInstance(json.id);\n }\n });\n</script>\n\n{#if !hasError}\n <Outer\n cls={genClassName('tabs', css, mods)}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n customActions={'tabs'}\n >\n <!-- svelte-ignore a11y-interactive-supports-focus -->\n <div\n bind:this={tabsElem}\n class=\"{css.tabs__list} {$jsonRestrictParentScroll ? rootCss['root_restrict-scroll'] : ''}\"\n role=\"tablist\"\n style:--divkit-tabs-title-padding={titlePadding ? edgeInsertsToCss(titlePadding) : ''}\n style:--divkit-tabs-font-size={pxToEm(tabFontSize)}\n style:--divkit-tabs-paddings={tabPaddings}\n style:--divkit-tabs-line-height={tabLineHeight}\n style:--divkit-tabs-letter-spacing={tabLetterSpacing}\n style:--divkit-tabs-active-font-weight={tabActiveFontWeight || ''}\n style:--divkit-tabs-inactive-font-weight={tabInactiveFontWeight || ''}\n style:--divkit-tabs-active-font-family={tabActiveFontFamily || ''}\n style:--divkit-tabs-inactive-font-family={tabInactiveFontFamily || ''}\n style:--divkit-tabs-active-text-color={tabActiveTextColor}\n style:--divkit-tabs-inactive-text-color={tabInactiveTextColor}\n style:--divkit-tabs-active-background-color={tabActiveBackground}\n style:--divkit-tabs-inactive-background-color={tabInactiveBackground}\n style:--divkit-tabs-border-radius={tabBorderRadius}\n style:--divkit-tabs-items-spacing={tabItemSpacing ? pxToEmWithUnits(tabItemSpacing) : ''}\n on:keydown={onTabKeydown}\n >\n {#each $childStore as item}\n {@const index = item.index}\n {@const isSelected = index === selected}\n\n <Actionable\n cls={genClassName('tabs__item', css, {\n selected: isSelected,\n actionable: Boolean(item.title_click_action)\n })}\n actions={item.title_click_action && !layoutParams?.fakeElement ? [item.title_click_action] : []}\n attrs={{\n id: `${instId}-tab-${index}`,\n 'aria-controls': `${instId}-panel-${index}`,\n role: 'tab',\n // eslint-disable-next-line no-nested-ternary\n tabindex: isSelected && !layoutParams?.fakeElement ? (item.title_click_action ? undefined : '0') : '-1',\n 'aria-selected': isSelected ? 'true' : 'false'\n }}\n customAction={layoutParams?.fakeElement ? null : (event => selectItem(event, index))}\n >\n {item.title}\n </Actionable>\n {/each}\n </div>\n {#if $jsonSeparator}\n <div\n class={css.tabs__separator}\n style={makeStyle(separatorStyle)}\n ></div>\n {/if}\n <div\n class=\"{css.tabs__panels} {$jsonRestrictParentScroll ? rootCss['root_restrict-scroll'] : ''}\"\n bind:this={panelsWrapper}\n >\n <div\n class={genClassName('tabs__swiper', css, {\n inited: isSwipeInitialized,\n animated: isAnimated\n })}\n bind:this={swiperElem}\n on:touchstart={isSwipeEnabled ? onTouchStart : undefined}\n on:touchmove={isSwipeEnabled ? onTouchMove : undefined}\n on:touchend={isSwipeEnabled ? onTouchEnd : undefined}\n on:touchcancel={isSwipeEnabled ? onTouchEnd : undefined}\n >\n {#each $childStore as item}\n {@const index = item.index}\n\n <div\n class={genClassName('tabs__panel', css, {\n visible: visiblePanels[index]\n })}\n role=\"tabpanel\"\n id=\"{instId}-panel-{index}\"\n aria-labelledby=\"{instId}-tab-{index}\"\n style=\"left: {index * 100}%\"\n >\n {#if showedPanels[index]}\n <Unknown div={items[index].div} {templateContext} layoutParams={childLayoutParams} />\n {/if}\n </div>\n {/each}\n </div>\n </div>\n </Outer>\n{/if}\n","import type { CornersRadius } from '../types/border';\nimport { borderRadius } from './borderRadius';\nimport { isNonNegativeNumber } from './isNonNegativeNumber';\n\nexport function correctBorderRadius(\n cornersRadius: CornersRadius,\n defaultRadius: number,\n fontSize: number,\n defaultVal: string\n): string {\n const list = [\n cornersRadius['top-left'],\n cornersRadius['top-right'],\n cornersRadius['bottom-right'],\n cornersRadius['bottom-left']\n ];\n\n for (let i = 0; i < list.length; ++i) {\n if (list[i] && !isNonNegativeNumber(list[i])) {\n return defaultVal;\n }\n }\n\n return borderRadius(cornersRadius, defaultRadius, fontSize);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"state\":\"divkit-b8efc\",\"state__animations\":\"divkit-adaae\",\"state__animation-child\":\"divkit-eb860\",\"state__animation-child-inner\":\"divkit-e08c6\"};","export function interpolateEasing(table: number[]) {\n return (t: number) => {\n if (t <= 0) {\n return 0;\n } else if (t >= 1) {\n return 1;\n }\n\n const x = t * table.length;\n const i = Math.floor(x);\n const p0 = table[i];\n const p1 = table[i + 1];\n const t2 = x - i;\n\n return p0 * t2 + p1 * (1 - t2);\n };\n}\n","import { interpolateEasing } from './interpolateEasing';\n\nconst table = [\n 0.0021, 0.0045, 0.0071, 0.0100, 0.0131, 0.0165, 0.0202,\n 0.0242, 0.0284, 0.0330, 0.0378, 0.0429, 0.0483, 0.0540,\n 0.0601, 0.0664, 0.0731, 0.0800, 0.0872, 0.0948, 0.1026,\n 0.1108, 0.1192, 0.1279, 0.1369, 0.1461, 0.1556, 0.1653,\n 0.1753, 0.1855, 0.1958, 0.2064, 0.2171, 0.2279, 0.2389,\n 0.2500, 0.2612, 0.2725, 0.2839, 0.2952, 0.3067, 0.3181,\n 0.3295, 0.3410, 0.3524, 0.3637, 0.3750, 0.3863, 0.3974,\n 0.4085, 0.4195, 0.4304, 0.4412, 0.4519, 0.4624, 0.4729,\n 0.4832, 0.4934, 0.5034, 0.5133, 0.5231, 0.5327, 0.5422,\n 0.5516, 0.5608, 0.5699, 0.5788, 0.5876, 0.5963, 0.6048,\n 0.6132, 0.6214, 0.6295, 0.6375, 0.6453, 0.6530, 0.6606,\n 0.6680, 0.6754, 0.6825, 0.6896, 0.6965, 0.7034, 0.7101,\n 0.7166, 0.7231, 0.7295, 0.7357, 0.7418, 0.7479, 0.7538,\n 0.7596, 0.7653, 0.7709, 0.7764, 0.7818, 0.7871, 0.7923,\n 0.7974, 0.8024, 0.8073, 0.8122, 0.8169, 0.8216, 0.8261,\n 0.8306, 0.8350, 0.8394, 0.8436, 0.8478, 0.8518, 0.8558,\n 0.8598, 0.8636, 0.8674, 0.8711, 0.8747, 0.8783, 0.8818,\n 0.8852, 0.8886, 0.8919, 0.8951, 0.8983, 0.9014, 0.9044,\n 0.9074, 0.9103, 0.9131, 0.9159, 0.9187, 0.9213, 0.9240,\n 0.9265, 0.9290, 0.9315, 0.9339, 0.9362, 0.9385, 0.9408,\n 0.9430, 0.9451, 0.9472, 0.9492, 0.9512, 0.9532, 0.9551,\n 0.9569, 0.9587, 0.9605, 0.9622, 0.9638, 0.9655, 0.9670,\n 0.9686, 0.9701, 0.9715, 0.9729, 0.9743, 0.9756, 0.9769,\n 0.9782, 0.9794, 0.9805, 0.9817, 0.9828, 0.9838, 0.9848,\n 0.9858, 0.9868, 0.9877, 0.9886, 0.9894, 0.9902, 0.9910,\n 0.9917, 0.9924, 0.9931, 0.9937, 0.9943, 0.9949, 0.9954,\n 0.9959, 0.9964, 0.9969, 0.9973, 0.9977, 0.9980, 0.9983,\n 0.9986, 0.9989, 0.9991, 0.9993, 0.9995, 0.9997, 0.9998,\n 0.9999, 0.9999, 1.0000, 1.0000\n];\n\nexport const ease = interpolateEasing(table);\n","import { interpolateEasing } from './interpolateEasing';\n\nconst table = [\n 0.0005, 0.0020, 0.0045, 0.0078, 0.0119, 0.0168,\n 0.0224, 0.0286, 0.0355, 0.0429, 0.0508, 0.0592, 0.0681,\n 0.0774, 0.0870, 0.0969, 0.1072, 0.1177, 0.1285, 0.1395,\n 0.1507, 0.1621, 0.1736, 0.1853, 0.1970, 0.2089, 0.2208,\n 0.2328, 0.2448, 0.2569, 0.2689, 0.2810, 0.2930, 0.3050,\n 0.3170, 0.3289, 0.3408, 0.3526, 0.3644, 0.3760, 0.3876,\n 0.3991, 0.4105, 0.4218, 0.4330, 0.4440, 0.4550, 0.4658,\n 0.4765, 0.4871, 0.4975, 0.5078, 0.5180, 0.5280, 0.5379,\n 0.5477, 0.5573, 0.5668, 0.5761, 0.5853, 0.5944, 0.6033,\n 0.6120, 0.6206, 0.6291, 0.6374, 0.6456, 0.6537, 0.6616,\n 0.6693, 0.6770, 0.6845, 0.6918, 0.6990, 0.7061, 0.7130,\n 0.7199, 0.7265, 0.7331, 0.7395, 0.7458, 0.7520, 0.7580,\n 0.7640, 0.7698, 0.7755, 0.7810, 0.7865, 0.7918, 0.7971,\n 0.8022, 0.8072, 0.8121, 0.8169, 0.8216, 0.8262, 0.8307,\n 0.8351, 0.8394, 0.8436, 0.8477, 0.8517, 0.8557, 0.8595,\n 0.8633, 0.8669, 0.8705, 0.8740, 0.8775, 0.8808, 0.8841,\n 0.8873, 0.8904, 0.8934, 0.8964, 0.8993, 0.9022, 0.9049,\n 0.9076, 0.9103, 0.9129, 0.9154, 0.9178, 0.9202, 0.9226,\n 0.9249, 0.9271, 0.9293, 0.9314, 0.9335, 0.9355, 0.9375,\n 0.9394, 0.9413, 0.9431, 0.9449, 0.9466, 0.9483, 0.9500,\n 0.9516, 0.9532, 0.9547, 0.9562, 0.9576, 0.9591, 0.9605,\n 0.9618, 0.9631, 0.9644, 0.9657, 0.9669, 0.9681, 0.9692,\n 0.9703, 0.9714, 0.9725, 0.9736, 0.9746, 0.9756, 0.9765,\n 0.9775, 0.9784, 0.9793, 0.9802, 0.9810, 0.9818, 0.9826,\n 0.9834, 0.9842, 0.9849, 0.9856, 0.9863, 0.9870, 0.9877,\n 0.9883, 0.9890, 0.9896, 0.9902, 0.9908, 0.9913, 0.9919,\n 0.9924, 0.9930, 0.9935, 0.9940, 0.9944, 0.9949, 0.9954,\n 0.9958, 0.9963, 0.9967, 0.9971, 0.9975, 0.9979, 0.9983,\n 0.9986, 0.9990, 0.9993, 0.9997, 1.0000\n];\n\nexport const spring = interpolateEasing(table);\n","<script lang=\"ts\">\n import { setContext, getContext, tick, onDestroy } from 'svelte';\n\n import css from './State.module.css';\n\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivStateData, State } from '../../types/state';\n import type { AnyTransition, AppearanceTransition, DivBaseData, TransitionChange } from '../../types/base';\n import type { ChangeBoundsTransition } from '../../types/base';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { wrapError } from '../../utils/wrapError';\n import { STATE_CTX, StateCtxValue, StateInterface } from '../../context/state';\n import { calcMaxDuration, inOutTransition } from '../../utils/inOutTransition';\n import { changeBoundsTransition } from '../../utils/changeBoundsTransition';\n import { flattenTransition } from '../../utils/flattenTransition';\n import Outer from '../utilities/Outer.svelte';\n import Unknown from '../utilities/Unknown.svelte';\n\n export let json: Partial<DivStateData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n const stateCtx = getContext<StateCtxValue>(STATE_CTX);\n let animationRoot: HTMLElement | undefined;\n let transitionChangeBoxes: Map<string, DOMRect> = new Map();\n let childrenIds = new Set<string>();\n\n $: if (json) {\n childrenIds = new Set<string>();\n }\n\n let hasError = false;\n $: items = json.states || [];\n $: {\n if (!items?.length) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Empty \"states\" prop for div \"state\"')));\n } else {\n hasError = false;\n }\n }\n\n let childStateMap: Map<string, StateInterface> | null = null;\n\n interface AnimationItem {\n json: DivBaseData;\n templateContext: TemplateContext;\n elementBbox: DOMRect;\n rootBbox: DOMRect;\n transitions: AnyTransition[];\n alpha?: number;\n width: number;\n height: number;\n offsetTop: number;\n offsetLeft: number;\n direction: 'in' | 'out';\n resolvePromise?: (val?: void) => void;\n node: HTMLElement;\n }\n interface AnimationItemWithMaxDuration extends AnimationItem {\n maxDuration: number;\n }\n interface ChangeBoundsItem {\n json: DivBaseData;\n templateContext: TemplateContext;\n rootBbox: DOMRect;\n beforeBbox: DOMRect;\n afterBbox: DOMRect;\n transition: ChangeBoundsTransition;\n resolvePromise?: (val?: void) => void;\n node: HTMLElement;\n }\n let animationList: (AnimationItemWithMaxDuration | ChangeBoundsItem)[] = [];\n\n interface ChildWithTransition {\n json: DivBaseData;\n templateContext: TemplateContext;\n transitions: AppearanceTransition;\n node: HTMLElement;\n resolvePromise?: (val?: void) => void;\n }\n interface ChildWithTransitionChange {\n id: string;\n json: DivBaseData;\n templateContext: TemplateContext;\n transitions: TransitionChange;\n node: HTMLElement;\n resolvePromise?: (val?: void) => void;\n }\n let childrenWithTransitionIn: ChildWithTransition[] = [];\n let childrenWithTransitionOut: ChildWithTransition[] = [];\n let childrenWithTransitionChange: ChildWithTransitionChange[] = [];\n\n function haveFadeTransition(list: AnyTransition[]): boolean {\n return list.some(it => it.type === 'fade');\n }\n\n function getItemAnimation(rootBbox: DOMRect, child: ChildWithTransition, direction: 'in' | 'out'): AnimationItem {\n let { json, templateContext, transitions, node } = child;\n json = rootCtx.getJsonWithVars(json) as DivBaseData;\n transitions = rootCtx.getJsonWithVars(transitions) as AppearanceTransition;\n\n const transitionsList: AnyTransition[] = flattenTransition(transitions);\n const bbox = node.getBoundingClientRect();\n\n return {\n json: {\n ...json,\n margins: undefined,\n alpha: haveFadeTransition(transitionsList) ? undefined : json.alpha\n },\n templateContext,\n elementBbox: bbox,\n rootBbox,\n transitions: transitionsList,\n alpha: json.alpha,\n width: bbox.width,\n height: bbox.height,\n offsetTop: bbox.top - rootBbox.top,\n offsetLeft: bbox.left - rootBbox.left,\n direction,\n resolvePromise: child.resolvePromise,\n node: child.node\n };\n }\n\n function getTransitionChange(transitionOrSet: TransitionChange): ChangeBoundsTransition | null {\n if (transitionOrSet.type === 'change_bounds') {\n return transitionOrSet;\n } else if (transitionOrSet.type === 'set') {\n return getTransitionChange(transitionOrSet.items[0]);\n }\n return null;\n }\n\n const stateId = json.div_id || json.id;\n\n if (!stateId) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Missing \"id\" prop for div \"state\"')));\n } else if (!layoutParams?.fakeElement) {\n stateCtx.registerInstance(stateId, {\n async setState(stateId: string) {\n if (selectedId === stateId) {\n return;\n }\n\n rootCtx.setRunning('stateChange', true);\n\n const wasIds = new Set(childrenIds);\n\n animationList.forEach(it => {\n if (it.resolvePromise) {\n it.resolvePromise();\n }\n });\n animationList = [];\n let transitionsOutToRun: AnimationItem[] = [];\n if (animationRoot) {\n const rootBbox = animationRoot.getBoundingClientRect();\n transitionsOutToRun = childrenWithTransitionOut\n .map(it => getItemAnimation(rootBbox, it, 'out'));\n }\n childrenWithTransitionChange.forEach(child => {\n transitionChangeBoxes.set(child.id, child.node.getBoundingClientRect());\n });\n childrenWithTransitionIn = [];\n childrenWithTransitionOut = [];\n childrenWithTransitionChange = [];\n\n const newState = items.find(it => it.state_id === stateId) || null;\n if (newState) {\n selectedId = stateId;\n selectedState = newState;\n } else {\n rootCtx.logError(wrapError(new Error('Cannot find state with id'), {\n additional: {\n stateId\n }\n }));\n }\n\n await tick();\n\n if (!animationRoot) {\n return;\n }\n const rootBbox = animationRoot.getBoundingClientRect();\n\n let transitionsInToRun: AnimationItem[] =\n childrenWithTransitionIn.filter(it => {\n if (it.json.id && !wasIds.has(it.json.id)) {\n return true;\n }\n it.resolvePromise?.();\n return false;\n })\n .map(it => getItemAnimation(rootBbox, it, 'in'));\n\n transitionsOutToRun = transitionsOutToRun.filter(it => {\n if (it.json.id && !childrenIds.has(it.json.id)) {\n return true;\n }\n it.resolvePromise?.();\n return false;\n });\n\n const inOutList: AnimationItem[] = transitionsOutToRun.concat(transitionsInToRun);\n const maxDuration = inOutList.reduce((acc: number, item: AnimationItem) => {\n return Math.max(\n acc,\n calcMaxDuration(item.transitions)\n );\n }, 0);\n\n const changeList: ChangeBoundsItem[] = childrenWithTransitionChange\n .filter(child => transitionChangeBoxes.has(child.id))\n .map(child => {\n const res: ChangeBoundsItem = {\n json: {\n ...child.json,\n margins: undefined,\n width: { type: 'match_parent' },\n height: { type: 'match_parent' },\n },\n templateContext: child.templateContext,\n rootBbox,\n beforeBbox: transitionChangeBoxes.get(child.id) as DOMRect,\n afterBbox: child.node.getBoundingClientRect(),\n node: child.node,\n transition: getTransitionChange(child.transitions) as ChangeBoundsTransition,\n resolvePromise: child.resolvePromise\n };\n\n return res;\n });\n\n animationList = [\n ...inOutList.map(it => {\n return {\n ...it,\n maxDuration\n };\n }),\n ...changeList\n ];\n\n transitionChangeBoxes.clear();\n\n rootCtx.setRunning('stateChange', false);\n },\n getChild(id: string): StateInterface | undefined {\n if (childStateMap && childStateMap.has(id)) {\n return childStateMap.get(id);\n }\n\n rootCtx.logError(wrapError(new Error('Missing state block with id'), {\n additional: {\n id\n }\n }));\n return undefined;\n }\n });\n\n setContext<StateCtxValue>(STATE_CTX, {\n registerInstance(id: string, block: StateInterface) {\n if (!childStateMap) {\n childStateMap = new Map();\n }\n\n if (childStateMap.has(id)) {\n rootCtx.logError(wrapError(new Error('Duplicate state with id'), {\n additional: {\n id\n }\n }));\n } else {\n childStateMap.set(id, block);\n }\n },\n unregisterInstance(id: string) {\n childStateMap?.delete(id);\n },\n runVisibilityTransition(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: AppearanceTransition,\n node: HTMLElement,\n direction: 'in' | 'out'\n ) {\n if (!animationRoot) {\n return Promise.resolve();\n }\n\n const rootBbox = animationRoot.getBoundingClientRect();\n const item: AnimationItem = getItemAnimation(\n rootBbox,\n {\n json,\n templateContext,\n transitions,\n node\n },\n direction\n );\n\n const maxDuration = calcMaxDuration(item.transitions);\n const itemWithMaxDuration: AnimationItemWithMaxDuration = {\n ...item,\n maxDuration\n };\n animationList = [\n ...animationList.filter(it => it.node !== item.node),\n itemWithMaxDuration\n ];\n\n return new Promise<void>(resolve => {\n itemWithMaxDuration.resolvePromise = resolve;\n });\n },\n registerChildWithTransitionIn(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: AppearanceTransition,\n node: HTMLElement\n ) {\n const item: ChildWithTransition = {\n json,\n templateContext,\n transitions,\n node\n };\n childrenWithTransitionIn.push(item);\n\n return new Promise<void>(resolve => {\n item.resolvePromise = resolve;\n });\n },\n registerChildWithTransitionOut(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: AppearanceTransition,\n node: HTMLElement\n ) {\n const item: ChildWithTransition = {\n json,\n templateContext,\n transitions,\n node\n };\n childrenWithTransitionOut.push(item);\n\n return new Promise<void>(resolve => {\n item.resolvePromise = resolve;\n });\n },\n registerChildWithTransitionChange(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: TransitionChange,\n node: HTMLElement\n ) {\n const id = json.id;\n\n if (!id) {\n return Promise.resolve();\n }\n\n const item: ChildWithTransitionChange = {\n id,\n json,\n templateContext,\n transitions,\n node\n };\n childrenWithTransitionChange.push(item);\n\n return new Promise<void>(resolve => {\n item.resolvePromise = resolve;\n });\n },\n hasTransitionChange(id?: string) {\n if (!id) {\n return false;\n }\n\n return transitionChangeBoxes.has(id);\n },\n registerChild(id: string): void {\n childrenIds.add(id);\n },\n unregisterChild(id: string): void {\n childrenIds.delete(id);\n }\n });\n }\n\n let selectedId: string | undefined;\n let selectedState: State | null = null;\n const jsonDefaultStateId = rootCtx.getJsonWithVars(json.default_state_id);\n let inited = false;\n function initDefaultState(items: State[]): void {\n if (inited) {\n return;\n }\n inited = true;\n\n if (items.length) {\n if (jsonDefaultStateId) {\n selectedId = jsonDefaultStateId;\n selectedState = items.find(it => it.state_id === selectedId) || null;\n if (!selectedState) {\n rootCtx.logError(wrapError(new Error('Cannot find state for default_state_id'), {\n additional: {\n selectedId\n }\n }));\n }\n } else {\n selectedState = items[0];\n selectedId = selectedState.state_id;\n }\n }\n }\n $: initDefaultState(items);\n\n function onOutro(item: AnimationItem | ChangeBoundsItem): void {\n animationList = animationList.filter(it => it !== item);\n\n if (item.resolvePromise) {\n item.resolvePromise();\n }\n }\n\n onDestroy(() => {\n if (stateId && !layoutParams?.fakeElement) {\n stateCtx.unregisterInstance(stateId);\n }\n });\n</script>\n\n{#if !hasError}\n <Outer\n cls={css.state}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n >\n {#if selectedState?.div}\n {#key selectedState}\n <Unknown div={selectedState.div} templateContext={templateContext} />\n {/key}\n {/if}\n <div class={css.state__animations} bind:this={animationRoot} aria-hidden=\"true\">\n {#each animationList as item (item)}\n {#if 'direction' in item}\n <div\n class={css['state__animation-child']}\n style=\"left:{item.offsetLeft}px;top:{item.offsetTop}px;width:{item.width}px;height:{item.height}px\"\n in:inOutTransition={item}\n on:introend={() => onOutro(item)}\n >\n <div class={css['state__animation-child-inner']}>\n <Unknown div={item.json} templateContext={item.templateContext} layoutParams={{ fakeElement: true }} />\n </div>\n </div>\n {:else}\n <div\n class={css['state__animation-child']}\n in:changeBoundsTransition={item}\n on:introend={() => onOutro(item)}\n >\n <div class={css['state__animation-child-inner']}>\n <Unknown div={item.json} templateContext={item.templateContext} layoutParams={{ fakeElement: true }} />\n </div>\n </div>\n {/if}\n {/each}\n </div>\n </Outer>\n{/if}\n","// extracted by mini-css-extract-plugin\nexport default {\"pager\":\"divkit-c5feb\",\"pager__items\":\"divkit-f6987\",\"pager__item\":\"divkit-feca7\",\"pager_orientation_horizontal\":\"divkit-b0a1c\",\"pager_orientation_vertical\":\"divkit-f772f\"};","<script lang=\"ts\">\n import { getContext, onDestroy, onMount } from 'svelte';\n\n import css from './Pager.module.css';\n import rootCss from '../Root.module.css';\n\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivBaseData } from '../../types/base';\n import type { DivPagerData } from '../../types/pager';\n import type { LayoutParams } from '../../types/layoutParams';\n import type { Orientation } from '../../types/orientation';\n import type { PagerData } from '../../stores/pagers';\n import type { Overflow, SwitchElements } from '../../types/switch-elements';\n\n import Outer from '../utilities/Outer.svelte';\n import Unknown from '../utilities/Unknown.svelte';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { wrapError } from '../../utils/wrapError';\n import { genClassName } from '../../utils/genClassName';\n import { pxToEm, pxToEmWithUnits } from '../../utils/pxToEm';\n import { makeStyle } from '../../utils/makeStyle';\n import { correctGeneralOrientation } from '../../utils/correctGeneralOrientation';\n import { correctEdgeInserts } from '../../utils/correctEdgeInserts';\n import { isNonNegativeNumber } from '../../utils/isNonNegativeNumber';\n import { debounce } from '../../utils/debounce';\n\n export let json: Partial<DivPagerData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n const instId = rootCtx.genId('pager');\n\n let pagerItemsWrapper: HTMLElement;\n let mounted = false;\n\n let hasItemsError = false;\n $: {\n if (!json.items?.length || !Array.isArray(json.items)) {\n hasItemsError = true;\n rootCtx.logError(wrapError(new Error('Incorrect or empty \"items\" prop for div \"pager\"')));\n } else {\n hasItemsError = false;\n }\n }\n\n function replaceItems(items: DivBaseData[]): void {\n json = {\n ...json,\n items\n };\n }\n\n $: items = (!hasItemsError && json.items || []).map(item => {\n let childJson: DivBaseData = item as DivBaseData;\n let childContext: TemplateContext = templateContext;\n\n ({\n templateContext: childContext,\n json: childJson\n } = rootCtx.processTemplate(childJson, childContext));\n\n return {\n json: childJson,\n templateContext: childContext,\n origJson: item\n };\n });\n\n let currentItem = 0;\n let prevSelectedItem = 0;\n\n let hasLayoutModeError = false;\n $: jsonLayoutMode = rootCtx.getDerivedFromVars(json.layout_mode);\n $: {\n if (!$jsonLayoutMode) {\n hasLayoutModeError = true;\n rootCtx.logError(wrapError(new Error('Empty \"layout_mode\" prop for div \"pager\"')));\n } else if ($jsonLayoutMode.type !== 'percentage' && $jsonLayoutMode.type !== 'fixed') {\n hasLayoutModeError = true;\n rootCtx.logError(wrapError(new Error('Incorrect value of \"layout_mode.type\" for div \"pager\"')));\n } else {\n hasLayoutModeError = false;\n }\n }\n\n let orientation: Orientation = 'horizontal';\n $: jsonOrientation = rootCtx.getDerivedFromVars(json.orientation);\n $: {\n orientation = correctGeneralOrientation($jsonOrientation, orientation);\n }\n\n let itemSpacing = '';\n $: jsonItemSpacing = rootCtx.getDerivedFromVars(json.item_spacing);\n $: {\n const val = $jsonItemSpacing?.value;\n if (val && isNonNegativeNumber(val)) {\n itemSpacing = pxToEm(val || 0);\n }\n }\n\n $: jsonPaddings = rootCtx.getDerivedFromVars(json.paddings);\n let padding = '';\n $: {\n padding = correctEdgeInserts($jsonPaddings, padding);\n }\n\n $: jsonRestrictParentScroll = rootCtx.getDerivedFromVars(json.restrict_parent_scroll);\n\n $: gridAuto = orientation === 'horizontal' ? 'grid-auto-columns' : 'grid-auto-rows';\n let sizeVal = '';\n\n $: {\n if ($jsonLayoutMode?.type === 'fixed') {\n const paddings = orientation === 'horizontal' ?\n pxToEmWithUnits((json.paddings?.left || 0) + (json.paddings?.right || 0)) :\n pxToEmWithUnits((json.paddings?.top || 0) + (json.paddings?.bottom || 0));\n const neighbourPageWidth = $jsonLayoutMode.neighbour_page_width?.value;\n sizeVal = neighbourPageWidth ?\n `calc(100% + ${paddings} - 2 * ${pxToEmWithUnits(neighbourPageWidth)} - 2 * ${itemSpacing})` :\n '100%';\n } else if ($jsonLayoutMode?.type === 'percentage') {\n const pageWidth = $jsonLayoutMode.page_width?.value;\n sizeVal = `${Number(pageWidth)}%`;\n }\n }\n\n $: style = {\n 'grid-gap': itemSpacing,\n padding,\n [gridAuto]: sizeVal\n };\n\n $: mods = {\n orientation\n };\n\n $: hasError = hasItemsError || hasLayoutModeError;\n\n function checkIsFullyIntersecting(scroller: DOMRect, item: DOMRect): boolean {\n if (orientation === 'horizontal') {\n return item.left >= scroller.left && item.right <= scroller.right;\n }\n\n return item.top >= scroller.top && item.bottom <= scroller.bottom;\n }\n\n function calculateCurrentElementIndex(): number {\n const pagerElements = Array.from(pagerItemsWrapper.children) as HTMLElement[];\n const wrapperRect = pagerItemsWrapper.getBoundingClientRect();\n\n const firstFullyVisibleElement = pagerElements.findIndex(el =>\n checkIsFullyIntersecting(wrapperRect, el.getBoundingClientRect())\n );\n\n if (firstFullyVisibleElement !== -1) {\n return firstFullyVisibleElement;\n }\n\n return currentItem;\n }\n\n function onScroll(): void {\n if (!mounted) {\n // Already destroyed\n return;\n }\n\n const nextItem = calculateCurrentElementIndex();\n if (nextItem !== currentItem) {\n currentItem = nextItem;\n }\n }\n\n const onScrollDebounced = debounce(onScroll, 50);\n\n $: pagers = rootCtx.getStore<Map<string, PagerData>>('pagers');\n\n function pagerDataUpdate(size: number, currentItem: number): void {\n const pagerId = json.id;\n if (pagerId) {\n const newPagersMap = new Map($pagers);\n $pagers = newPagersMap.set(pagerId, { instId, size, currentItem, scrollToPagerItem });\n }\n }\n\n function runSelectedActions(currentItem: number): void {\n // prevent initial actions execution\n if (currentItem === prevSelectedItem) {\n return;\n }\n prevSelectedItem = currentItem;\n\n const actions = rootCtx.getJsonWithVars(items[currentItem].json?.selected_actions);\n if (!actions?.length) {\n return;\n }\n rootCtx.execAnyActions(actions);\n }\n\n $: pagerDataUpdate(items.length, currentItem);\n\n $: runSelectedActions(currentItem);\n\n function scrollToPagerItem(index: number, behavior: ScrollBehavior = 'smooth'): void {\n const isHorizontal = orientation === 'horizontal';\n const nextPagerItem = pagerItemsWrapper.children[index] as HTMLElement;\n const elementOffset: keyof HTMLElement = isHorizontal ? 'offsetLeft' : 'offsetTop';\n const scrollDirection: keyof ScrollToOptions = isHorizontal ? 'left' : 'top';\n\n pagerItemsWrapper.scroll({\n [scrollDirection]: nextPagerItem[elementOffset],\n behavior\n });\n currentItem = index;\n }\n\n if (json.id && !layoutParams?.fakeElement) {\n rootCtx.registerInstance<SwitchElements>(json.id, {\n setCurrentItem(item: number) {\n if (item < 0 || item > items.length - 1) {\n throw new Error('Item is out of range in \"set-current-item\" action');\n }\n\n scrollToPagerItem(item);\n },\n setPreviousItem(overflow: Overflow) {\n let previousItem = currentItem - 1;\n\n if (previousItem < 0) {\n previousItem = overflow === 'ring' ? items.length - 1 : currentItem;\n }\n\n scrollToPagerItem(previousItem);\n },\n setNextItem(overflow: Overflow) {\n let nextItem = currentItem + 1;\n\n if (nextItem > items.length - 1) {\n nextItem = overflow === 'ring' ? 0 : currentItem;\n }\n\n scrollToPagerItem(nextItem);\n }\n });\n }\n\n onMount(() => {\n mounted = true;\n\n const isIndicatorExist = Boolean(document.getElementById(`${instId}-tab-0`));\n\n if (isIndicatorExist) {\n const pagerItems = [...pagerItemsWrapper.children] as HTMLElement[];\n\n for (const [index, item] of pagerItems.entries()) {\n item.setAttribute('role', 'tabpanel');\n item.setAttribute('id', `${instId}-panel-${index}`);\n item.setAttribute('aria-labelledby', `${instId}-tab-${index}`);\n }\n }\n });\n\n onDestroy(() => {\n mounted = false;\n\n if (json.id && !layoutParams?.fakeElement) {\n rootCtx.unregisterInstance(json.id);\n }\n });\n</script>\n\n{#if !hasError}\n <Outer\n cls={genClassName('pager', css, mods)}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n customPaddings={true}\n parentOf={json.items}\n {replaceItems}\n >\n <div\n class=\"{css.pager__items} {$jsonRestrictParentScroll ? rootCss['root_restrict-scroll'] : ''}\"\n style={makeStyle(style)}\n bind:this={pagerItemsWrapper}\n on:scroll={onScrollDebounced}\n >\n {#key items}\n {#each items as item}\n <div class={css.pager__item}>\n <Unknown\n div={item.json}\n templateContext={item.templateContext}\n origJson={item.origJson}\n layoutParams={layoutParams?.fakeElement ? { fakeElement: true } : undefined}\n />\n </div>\n {/each}\n {/key}\n </div>\n </Outer>\n{/if}\n","// extracted by mini-css-extract-plugin\nexport default {\"indicator\":\"divkit-d8e3f\",\"indicator__scroller\":\"divkit-b5db0\",\"indicator__items\":\"divkit-d5d94\",\"indicator__item\":\"divkit-f6629\",\"indicator_placement_default\":\"divkit-c1670\",\"indicator__item_active\":\"divkit-b39cd\",\"indicator_placement_stretch\":\"divkit-b6bd3\"};","<script lang=\"ts\">\n import { getContext, tick } from 'svelte';\n\n import rootCss from '../Root.module.css';\n import css from './Indicator.module.css';\n\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivIndicatorData } from '../../types/indicator';\n import type { LayoutParams } from '../../types/layoutParams';\n import type { PagerData } from '../../stores/pagers';\n import type { MaybeMissing } from '../../expressions/json';\n import type { DivIndicatorDefaultItemPlacement, DivIndicatorStretchItemPlacement } from '../../types/indicator';\n\n import Outer from '../utilities/Outer.svelte';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { genClassName } from '../../utils/genClassName';\n import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n import { pxToEm } from '../../utils/pxToEm';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { ARROW_LEFT, ARROW_RIGHT, END, HOME } from '../../utils/keyboard/codes';\n import { correctDrawableStyle, DrawableStyle } from '../../utils/correctDrawableStyles';\n import { correctColor } from '../../utils/correctColor';\n\n export let json: Partial<DivIndicatorData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const AVAIL_SHAPES = ['rounded_rectangle', 'circle'];\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n $: jsonShape = rootCtx.getDerivedFromVars(json.shape);\n $: jsonActiveItemColor = rootCtx.getDerivedFromVars(json.active_item_color);\n $: jsonInactiveItemColor = rootCtx.getDerivedFromVars(json.inactive_item_color);\n $: jsonActiveItemSize = rootCtx.getDerivedFromVars(json.active_item_size);\n $: jsonActiveShape = rootCtx.getDerivedFromVars(json.active_shape);\n $: jsonInactiveShape = rootCtx.getDerivedFromVars(json.inactive_shape);\n let activeStyle: DrawableStyle = {\n width: 13,\n height: 13,\n borderRadius: 6.5,\n background: '#ffdc60'\n };\n let inactiveStyle: DrawableStyle = {\n width: 10,\n height: 10,\n borderRadius: 5,\n background: '#33919cb5'\n };\n $: {\n if ($jsonActiveShape) {\n activeStyle = correctDrawableStyle<DrawableStyle>({\n type: 'shape_drawable',\n shape: $jsonActiveShape\n }, AVAIL_SHAPES, activeStyle);\n }\n if ($jsonInactiveShape) {\n inactiveStyle = correctDrawableStyle<DrawableStyle>({\n type: 'shape_drawable',\n shape: $jsonInactiveShape\n }, AVAIL_SHAPES, inactiveStyle);\n }\n if (!$jsonActiveShape && !$jsonInactiveShape && $jsonShape) {\n const activeSize = correctPositiveNumber($jsonActiveItemSize, 1.3);\n inactiveStyle = correctDrawableStyle<DrawableStyle>({\n type: 'shape_drawable',\n shape: $jsonShape,\n color: inactiveStyle.background\n }, AVAIL_SHAPES, inactiveStyle);\n inactiveStyle.background = correctColor($jsonInactiveItemColor, 1, inactiveStyle.background);\n activeStyle = {\n ...inactiveStyle,\n width: inactiveStyle.width * activeSize,\n height: inactiveStyle.height * activeSize,\n borderRadius: inactiveStyle.borderRadius * activeSize,\n background: activeStyle.background\n };\n activeStyle.background = correctColor($jsonActiveItemColor, 1, activeStyle.background);\n }\n }\n\n $: jsonSpaceBetweenCenters = rootCtx.getDerivedFromVars(json.space_between_centers);\n $: jsonItemsPlacement = rootCtx.getDerivedFromVars(json.items_placement);\n let placement: 'default' | 'stretch' = 'default';\n let spaceBetweenCenters = 15;\n let maxVisibleItems = 10;\n let itemSpacing = 5;\n $: if ($jsonItemsPlacement && ($jsonItemsPlacement.type === 'default' || $jsonItemsPlacement.type === 'stretch')) {\n placement = $jsonItemsPlacement.type;\n if (placement === 'default') {\n spaceBetweenCenters = correctNonNegativeNumber(\n ($jsonItemsPlacement as MaybeMissing<DivIndicatorDefaultItemPlacement>).space_between_centers?.value,\n spaceBetweenCenters\n );\n } else if (placement === 'stretch') {\n const placement = $jsonItemsPlacement as MaybeMissing<DivIndicatorStretchItemPlacement>;\n maxVisibleItems = correctPositiveNumber(placement.max_visible_items, maxVisibleItems);\n itemSpacing = correctNonNegativeNumber(placement.item_spacing?.value, itemSpacing);\n }\n } else {\n placement = 'default';\n if ($jsonSpaceBetweenCenters) {\n spaceBetweenCenters = correctNonNegativeNumber($jsonSpaceBetweenCenters.value, spaceBetweenCenters);\n }\n }\n\n let scroller: HTMLElement;\n let indicatorItemsWrapper: HTMLElement;\n let pagerData: PagerData;\n\n $: pagers = rootCtx.getStore<Map<string, PagerData>>('pagers');\n $: {\n onPagerDataUpdate($pagers);\n }\n\n async function onPagerDataUpdate(pagersMap: Map<string, PagerData>): Promise<void> {\n if (json.pager_id && pagersMap.has(json.pager_id)) {\n pagerData = pagersMap.get(json.pager_id) as PagerData;\n\n await tick();\n\n if (indicatorItemsWrapper) {\n // if not destroyed yet\n\n const currentItemOffsetLeft =\n (indicatorItemsWrapper.children[pagerData.currentItem] as HTMLElement).offsetLeft;\n\n scroller.scroll({\n left: currentItemOffsetLeft - scroller.clientWidth / 2,\n behavior: 'smooth'\n });\n }\n }\n }\n\n function onIndicatorItemClick(index: number) {\n if (index !== pagerData.currentItem) {\n pagerData.scrollToPagerItem(index);\n }\n }\n\n function onIndicatorItemKeydown(event: KeyboardEvent): void {\n if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) {\n return;\n }\n\n const { size, currentItem } = pagerData;\n if (event.which === ARROW_LEFT) {\n const prevItem = currentItem - 1 < 0 ? currentItem : currentItem - 1;\n moveFocus(prevItem);\n } else if (event.which === ARROW_RIGHT) {\n const nextItem = currentItem + 1 >= size ? currentItem : currentItem + 1;\n moveFocus(nextItem);\n } else if (event.which === HOME) {\n moveFocus(0);\n } else if (event.which === END) {\n moveFocus(size - 1);\n } else {\n return;\n }\n\n event.preventDefault();\n }\n\n async function moveFocus(index: number) {\n pagerData.scrollToPagerItem(index);\n\n await tick();\n\n const activeItem = indicatorItemsWrapper.querySelector(`.${css.indicator__item_active}`) as HTMLElement | null;\n if (activeItem) {\n activeItem.focus();\n }\n }\n\n $: mods = {\n placement\n };\n</script>\n\n<Outer\n cls={genClassName('indicator', css, mods)}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n>\n <div\n class={css.indicator__scroller}\n bind:this={scroller}\n >\n <div\n class={css.indicator__items}\n role=\"tablist\"\n bind:this={indicatorItemsWrapper}\n style:margin={placement === 'default' ? `0 ${pxToEm(Math.max(0, activeStyle.width - inactiveStyle.width) / 2)}` : ''}\n style:--divkit-indicator-inactive-width={pxToEm(inactiveStyle.width)}\n style:--divkit-indicator-inactive-height={pxToEm(inactiveStyle.height)}\n style:--divkit-indicator-inactive-border-radius={pxToEm(inactiveStyle.borderRadius)}\n style:--divkit-indicator-inactive-background={inactiveStyle.background || ''}\n style:--divkit-indicator-inactive-box-shadow={inactiveStyle.boxShadow || ''}\n style:--divkit-indicator-active-width={pxToEm(activeStyle.width)}\n style:--divkit-indicator-active-height={pxToEm(activeStyle.height)}\n style:--divkit-indicator-active-border-radius={pxToEm(activeStyle.borderRadius)}\n style:--divkit-indicator-active-background={activeStyle.background || ''}\n style:--divkit-indicator-active-box-shadow={activeStyle.boxShadow || ''}\n style:--divkit-indicator-active-scale={activeStyle.width / inactiveStyle.width}\n style:--divkit-indicator-default-margin={placement === 'default' ? `0 ${pxToEm((spaceBetweenCenters - inactiveStyle.width) / 2)}` : ''}\n style:--divkit-indicator-stretch-margin={placement === 'stretch' ? pxToEm(itemSpacing) : ''}\n style:--divkit-indicator-stretch-max-count={placement === 'stretch' ? maxVisibleItems : ''}\n style:--divkit-indicator-stretch-max-spacer={placement === 'stretch' ? pxToEm((maxVisibleItems - 1) * itemSpacing) : ''}\n >\n {#if pagerData}\n {#each Array(pagerData.size) as _, index}\n {@const isActiveItem = index === pagerData.currentItem}\n <div\n class=\"{genClassName('indicator__item', css, { active: isActiveItem })} {rootCss.root__clickable}\"\n role=\"tab\"\n id=\"{pagerData.instId}-tab-{index}\"\n aria-controls=\"{pagerData.instId}-panel-{index}\"\n aria-selected={isActiveItem ? 'true' : 'false'}\n tabindex={isActiveItem ? 0 : -1}\n on:click={() => onIndicatorItemClick(index)}\n on:keydown={onIndicatorItemKeydown}\n ></div>\n {/each}\n {/if}\n </div>\n </div>\n</Outer>\n","// extracted by mini-css-extract-plugin\nexport default {\"slider\":\"divkit-ef4f7\",\"slider__input\":\"divkit-d1d65\",\"slider__input_secondary\":\"divkit-c7980\",\"slider__thumb\":\"divkit-f3453\",\"slider__thumb_secondary\":\"divkit-e1984\",\"slider__tracks-wrapper\":\"divkit-f7338\",\"slider__tracks-inner\":\"divkit-ac903\",\"slider__track\":\"divkit-e956c\",\"slider__active-track\":\"divkit-ec5bf\",\"slider__thumb-text\":\"divkit-c4af5\",\"slider__thumb-text_secondary\":\"divkit-d8821\",\"slider__tick\":\"divkit-bd9bf\",\"slider__tick_active\":\"divkit-d8ce2\",\"slider__tick_inactive\":\"divkit-e71e7\"};","import type { SliderTextStyle } from '../types/slider';\nimport type { MaybeMissing } from '../expressions/json';\nimport { isPositiveNumber } from './isPositiveNumber';\nimport { correctColor } from './correctColor';\nimport { fontWeightToCss } from './fontWeightToCss';\nimport { pxToEm } from './pxToEm';\n\nexport interface TransformedSliderTextStyle {\n fontSize: string;\n fontWeight: number | undefined;\n textColor: string;\n offset?: {\n x: number;\n y: number;\n };\n}\n\nexport function correctSliderTextStyle(\n textStyle: MaybeMissing<SliderTextStyle> | undefined,\n defaultValue: TransformedSliderTextStyle | undefined\n): TransformedSliderTextStyle | undefined {\n if (!textStyle || !textStyle.font_size) {\n return defaultValue;\n }\n\n const offset = textStyle.offset;\n const convertedColor = textStyle.text_color && correctColor(textStyle.text_color) || '#000';\n const fontWeight = fontWeightToCss(textStyle.font_weight);\n\n if (\n isPositiveNumber(textStyle.font_size) &&\n convertedColor !== 'transparent'\n ) {\n const res: TransformedSliderTextStyle = {\n fontSize: pxToEm(textStyle.font_size),\n fontWeight,\n textColor: convertedColor\n };\n\n if (typeof offset?.x?.value === 'number' && typeof offset?.y?.value === 'number') {\n res.offset = {\n x: offset.x.value,\n y: offset.y.value\n };\n }\n\n return res;\n }\n}\n","export function clamp(val: number | bigint, min: number, max: number): number {\n return Math.max(min, Math.min(max, Number(val)));\n}\n","export const hasBigInt = typeof BigInt === 'function';\n\nexport function toBigIntNoCheck(val: number | bigint | string): number | bigint {\n if (hasBigInt) {\n return BigInt(val);\n }\n return Number(val);\n}\n\nexport const MAX_INT = toBigIntNoCheck('9223372036854775807');\nexport const MIN_INT = toBigIntNoCheck('-9223372036854775808');\n\nexport function toBigInt(val: number | bigint | string): number | bigint {\n const res = toBigIntNoCheck(val);\n if (res > MAX_INT || res < MIN_INT) {\n throw new Error('Integer overflow.');\n }\n return res;\n}\n\nexport const bigIntZero = toBigInt(0);\n\nexport function absBigInt(val: number | bigint): number | bigint {\n let res = val;\n if (res < 0) {\n res = -res;\n }\n return res;\n}\n\nexport function signBigInt(val: number | bigint): number | bigint {\n let res = 0;\n\n if (val > 0) {\n res = 1;\n } else if (val < 0) {\n res = -1;\n }\n\n return toBigInt(res);\n}\n","import { writable } from 'svelte/store';\nimport type { Subscriber, Unsubscriber, Writable } from 'svelte/types/runtime/store';\nimport type { EvalValue } from './eval';\nimport { parseColor } from '../utils/correctColor';\nimport { bigIntZero, toBigInt, MAX_INT, MIN_INT } from './bigint';\n\nexport type VariableType = 'string' | 'number' | 'integer' | 'boolean' | 'color' | 'url' | 'dict';\nexport type VariableValue = string | number | bigint | boolean | null | undefined | object;\n\nexport abstract class Variable<ValueType = any, TypeName = VariableType> {\n protected name: string;\n protected value: ValueType;\n protected store?: Writable<ValueType>;\n\n constructor(name: string, value: ValueType) {\n const val = this.convertValue(value);\n\n this.name = name;\n this.value = val;\n }\n\n getName(): string {\n return this.name;\n }\n\n protected abstract convertValue(value: unknown): ValueType;\n\n subscribe(cb: Subscriber<ValueType>): Unsubscriber {\n if (!this.store) {\n this.store = writable(this.value);\n }\n\n return this.store.subscribe(cb);\n }\n\n set(val: string): void {\n const value = this.fromString(val);\n\n this.setValue(value);\n }\n\n protected abstract fromString(val: string): ValueType;\n\n setValue(val: ValueType): void {\n const converted = this.convertValue(val);\n\n this.value = converted;\n\n if (this.store) {\n this.store.set(converted);\n }\n }\n\n getValue(): ValueType {\n return this.value;\n }\n\n abstract getType(): TypeName;\n}\n\nexport class StringVariable extends Variable<string, 'string'> {\n protected convertValue(value: unknown) {\n if (typeof value !== 'string') {\n throw new Error('Incorrect variable value');\n }\n return value;\n }\n\n protected fromString(val: string) {\n return val;\n }\n\n getType(): 'string' {\n return 'string';\n }\n}\n\nexport class IntegerVariable extends Variable<number | bigint, 'integer'> {\n protected convertValue(value: unknown) {\n if (\n (typeof value !== 'bigint' && typeof value !== 'number') ||\n typeof value === 'number' &&\n (\n isNaN(value) ||\n value !== Math.round(value)\n ) ||\n value > MAX_INT ||\n value < MIN_INT\n ) {\n throw new Error('Incorrect variable value');\n }\n\n return toBigInt(value);\n }\n\n protected fromString(val: string) {\n const res = toBigInt(val);\n\n return this.convertValue(res);\n }\n\n getType(): 'integer' {\n return 'integer';\n }\n}\n\nexport class NumberVariable extends Variable<number, 'number'> {\n protected convertValue(value: unknown) {\n if (\n typeof value !== 'number' ||\n isNaN(value) ||\n !isFinite(value)\n ) {\n throw new Error('Incorrect variable value');\n }\n\n return value;\n }\n\n protected fromString(val: string) {\n const res = Number(val);\n\n return this.convertValue(res);\n }\n\n getType(): 'number' {\n return 'number';\n }\n}\n\nexport class BooleanVariable extends Variable<number, 'boolean'> {\n protected convertValue(value: unknown) {\n if (value !== 1 && value !== 0 && value !== true && value !== false) {\n throw new Error('Incorrect variable value');\n }\n\n return Number(value);\n }\n\n protected fromString(val: string) {\n if (val === '1' || val === 'true') {\n return 1;\n } else if (val === '0' || val === 'false') {\n return 0;\n }\n\n throw new Error('Incorrect variable value');\n }\n\n getType(): 'boolean' {\n return 'boolean';\n }\n}\n\nexport class ColorVariable extends Variable<string, 'color'> {\n protected convertValue(value: unknown) {\n if (typeof value !== 'string' || !parseColor(value)) {\n throw new Error('Incorrect variable value');\n }\n\n // save input value, some expression tests rely on that\n return value;\n }\n\n protected fromString(val: string) {\n return this.convertValue(val);\n }\n\n getType(): 'color' {\n return 'color';\n }\n}\n\nexport class UrlVariable extends Variable<string, 'url'> {\n protected convertValue(value: unknown) {\n if (typeof value !== 'string') {\n throw new Error('Incorrect variable value');\n }\n\n return value;\n }\n\n protected fromString(val: string) {\n return val;\n }\n\n getType(): 'url' {\n return 'url';\n }\n}\n\nexport class DictVariable extends Variable<object, 'dict'> {\n protected convertValue(value: unknown) {\n if (typeof value !== 'object' || !value) {\n throw new Error('Incorrect variable value');\n }\n\n return value;\n }\n\n protected fromString(_val: string): object {\n throw new Error('Dict variable does not support setter from string');\n }\n\n getType(): 'dict' {\n return 'dict';\n }\n}\n\nexport const TYPE_TO_CLASS: Record<VariableType, typeof Variable<VariableValue, VariableType>> = {\n string: StringVariable,\n number: NumberVariable,\n integer: IntegerVariable,\n boolean: BooleanVariable,\n color: ColorVariable,\n url: UrlVariable,\n dict: DictVariable\n};\n\nexport function createVariable(\n name: string,\n type: VariableType,\n value: unknown\n): InstanceType<typeof TYPE_TO_CLASS[typeof type]> {\n if (!(type in TYPE_TO_CLASS)) {\n throw new Error('Unsupported variable type');\n }\n\n return new (TYPE_TO_CLASS[type] as any)(name, value);\n}\n\nexport function defaultValueByType(type: keyof typeof TYPE_TO_CLASS): VariableValue {\n if (type === 'integer') {\n return bigIntZero;\n }\n if (type === 'boolean' || type === 'number') {\n return 0;\n }\n if (type === 'dict') {\n return {};\n }\n\n return '';\n}\n\nexport function variableToValue(variable: Variable): EvalValue {\n return {\n type: variable.getType(),\n value: variable.getValue()\n };\n}\n","<script lang=\"ts\">\n import { getContext, onMount } from 'svelte';\n\n import css from './Slider.module.css';\n\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivSliderData } from '../../types/slider';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { ACTION_CTX, ActionCtxValue } from '../../context/action';\n import { genClassName } from '../../utils/genClassName';\n import { correctDrawableStyle, DrawableStyle } from '../../utils/correctDrawableStyles';\n import { pxToEm, pxToEmWithUnits } from '../../utils/pxToEm';\n import { correctSliderTextStyle, TransformedSliderTextStyle } from '../../utils/correctSliderTextStyle';\n import { wrapError } from '../../utils/wrapError';\n import { isNonNegativeNumber } from '../../utils/isNonNegativeNumber';\n import { clamp } from '../../utils/clamp';\n import { correctNumber } from '../../utils/correctNumber';\n import Outer from '../utilities/Outer.svelte';\n import { createVariable } from '../../expressions/variable';\n import { debounce } from '../../utils/debounce';\n\n export let json: Partial<DivSliderData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const DEFAULT_DRAWABLE_STYLE: DrawableStyle = {\n width: 10,\n height: 10,\n borderRadius: 5,\n background: '#000'\n };\n\n const THUMB_MARK_SHAPES = ['rounded_rectangle', 'circle'];\n const TRACK_SHAPES = ['rounded_rectangle'];\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n const actionCtx = getContext<ActionCtxValue>(ACTION_CTX);\n let tracksInner: HTMLElement;\n let switchedTracks = false;\n\n $: jsonMinValue = rootCtx.getDerivedFromVars(json.min_value);\n $: jsonMaxValue = rootCtx.getDerivedFromVars(json.max_value);\n let minValue = 0;\n let maxValue = 100;\n $: {\n minValue = correctNumber($jsonMinValue, minValue);\n maxValue = correctNumber($jsonMaxValue, maxValue);\n checkTicks();\n }\n\n const firstVariable = json.thumb_value_variable;\n const secondVariable = json.thumb_secondary_value_variable;\n\n let valueVariable = firstVariable && rootCtx.getVariable(firstVariable, 'integer') || createVariable('temp', 'integer', 0);\n let value2Variable = secondVariable && rootCtx.getVariable(secondVariable, 'integer') || createVariable('temp', 'integer', 0);\n\n let value = clamp($valueVariable || 0, minValue, maxValue);\n let value2 = clamp($value2Variable || 0, minValue, maxValue);\n\n $: {\n const newVal = clamp($valueVariable || 0, minValue, maxValue);\n if (newVal !== value) {\n value = newVal;\n }\n }\n\n $: {\n const newVal2 = clamp($value2Variable || 0, minValue, maxValue);\n if (newVal2 !== value2) {\n value2 = newVal2;\n }\n }\n\n $: jsonThumbStyle = rootCtx.getDerivedFromVars(json.thumb_style);\n let thumbStyle = DEFAULT_DRAWABLE_STYLE;\n $: {\n thumbStyle = correctDrawableStyle($jsonThumbStyle, THUMB_MARK_SHAPES, thumbStyle);\n }\n\n $: jsonThumbSecondaryStyle = rootCtx.getDerivedFromVars(json.thumb_secondary_style);\n let thumbSecondaryStyle = thumbStyle;\n $: {\n thumbSecondaryStyle = correctDrawableStyle($jsonThumbSecondaryStyle, THUMB_MARK_SHAPES, thumbStyle);\n }\n\n $: jsonTrackInactiveStyle = rootCtx.getDerivedFromVars(json.track_inactive_style);\n let trackInactiveStyle = DEFAULT_DRAWABLE_STYLE;\n $: {\n trackInactiveStyle = correctDrawableStyle($jsonTrackInactiveStyle, TRACK_SHAPES, trackInactiveStyle);\n }\n\n $: jsonTrackActiveStyle = rootCtx.getDerivedFromVars(json.track_active_style);\n let trackActiveStyle = DEFAULT_DRAWABLE_STYLE;\n $: {\n trackActiveStyle = correctDrawableStyle($jsonTrackActiveStyle, TRACK_SHAPES, trackActiveStyle);\n }\n\n function fillTicks(from: number, to: number, minValue: number, maxValue: number, inside: boolean): number[] {\n let res: number[] = [];\n\n if (inside) {\n for (let i = from; i < to; ++i) {\n res.push((i - minValue) / (maxValue - minValue));\n }\n } else {\n for (let i = minValue; i < from; ++i) {\n res.push((i - minValue) / (maxValue - minValue));\n }\n for (let i = to; i < maxValue + 1; ++i) {\n res.push((i - minValue) / (maxValue - minValue));\n }\n }\n\n return res;\n }\n\n $: jsonMarkActiveStyle = rootCtx.getDerivedFromVars(json.tick_mark_active_style);\n let markActiveTicks: number[];\n let markActiveStyle: DrawableStyle | null = null;\n $: {\n let newStyle = correctDrawableStyle($jsonMarkActiveStyle, THUMB_MARK_SHAPES, DEFAULT_DRAWABLE_STYLE);\n\n if (newStyle !== DEFAULT_DRAWABLE_STYLE) {\n markActiveStyle = newStyle;\n }\n }\n $: if (markActiveStyle) {\n markActiveTicks = secondVariable ?\n fillTicks(Math.min(value, value2), Math.max(value, value2) + 1, minValue, maxValue, true) :\n fillTicks(minValue, value, minValue, maxValue, true);\n checkTicks();\n } else {\n markActiveTicks = [];\n }\n\n $: jsonMarkInactiveStyle = rootCtx.getDerivedFromVars(json.tick_mark_inactive_style);\n let markInactiveTicks: number[];\n let markInactiveStyle: DrawableStyle | null = null;\n $: {\n let newStyle = correctDrawableStyle($jsonMarkInactiveStyle, THUMB_MARK_SHAPES, DEFAULT_DRAWABLE_STYLE);\n\n if (newStyle !== DEFAULT_DRAWABLE_STYLE) {\n markInactiveStyle = newStyle;\n }\n }\n $: if (markInactiveStyle) {\n markInactiveTicks = secondVariable ?\n fillTicks(Math.min(value, value2), Math.max(value, value2) + 1, minValue, maxValue, false) :\n fillTicks(value + 1, maxValue + 1, minValue, maxValue, true);\n checkTicks();\n } else {\n markInactiveTicks = [];\n }\n\n $: jsonTextStyle = rootCtx.getDerivedFromVars(json.thumb_text_style);\n let textStyle: TransformedSliderTextStyle | undefined = undefined;\n $: {\n textStyle = correctSliderTextStyle($jsonTextStyle, textStyle);\n }\n\n $: jsonSecondaryTextStyle = rootCtx.getDerivedFromVars(json.thumb_secondary_text_style);\n let textSecondaryStyle: TransformedSliderTextStyle | undefined = textStyle;\n $: {\n textSecondaryStyle = correctSliderTextStyle($jsonSecondaryTextStyle, textStyle);\n }\n\n $: jsonAccessibility = rootCtx.getDerivedFromVars(json.accessibility);\n let description = '';\n $: if ($jsonAccessibility?.description) {\n description = $jsonAccessibility.description;\n } else {\n rootCtx.logError(wrapError(new Error('Missing accessibility \"description\" for slider'), {\n level: 'warn'\n }));\n }\n\n $: jsonSecondaryAccessibility = rootCtx.getDerivedFromVars(json.secondary_value_accessibility);\n let secondaryDescription = '';\n $: if ($jsonSecondaryAccessibility?.description) {\n secondaryDescription = $jsonSecondaryAccessibility.description;\n } else if (secondVariable) {\n rootCtx.logError(wrapError(new Error('Missing second accessibility \"description\" for slider'), {\n level: 'warn'\n }));\n }\n\n let hasError = false;\n $: {\n let newHasError = false;\n\n if (actionCtx.hasAction()) {\n rootCtx.logError(wrapError(new Error('Cannot show \"slider\" inside component with action')));\n newHasError = true;\n } else if (thumbStyle === DEFAULT_DRAWABLE_STYLE) {\n rootCtx.logError(wrapError(new Error('Missing \"thumb_style\" in slider')));\n newHasError = true;\n } else if (trackActiveStyle === DEFAULT_DRAWABLE_STYLE) {\n rootCtx.logError(wrapError(new Error('Missing \"track_active_style\" in slider')));\n newHasError = true;\n } else if (trackInactiveStyle === DEFAULT_DRAWABLE_STYLE) {\n rootCtx.logError(wrapError(new Error('Missing \"track_inactive_style\" in slider')));\n newHasError = true;\n }\n\n if (newHasError !== hasError) {\n hasError = newHasError;\n }\n }\n\n $: maxThumbWidth = pxToEm(Math.max(...[\n thumbStyle.width,\n thumbSecondaryStyle.width,\n 0,\n ].filter(isNonNegativeNumber)));\n $: maxThumbHeight = pxToEm(Math.max(...[\n thumbStyle.height,\n thumbSecondaryStyle.height,\n 0,\n ].filter(isNonNegativeNumber)));\n $: trackPart = (value - minValue) / (maxValue - minValue);\n $: trackSecondaryPart = secondVariable ? (value2 - minValue) / (maxValue - minValue) : undefined;\n $: trackActivePart = trackSecondaryPart !== undefined ? Math.abs(trackSecondaryPart - trackPart) : trackPart;\n $: trackActiveOffset = trackSecondaryPart !== undefined ? Math.min(trackSecondaryPart, trackPart) : 0;\n\n $: stl = {\n '--divkit-slider-thumb-width': pxToEm(thumbStyle.width),\n '--divkit-slider-thumb-height': pxToEm(thumbStyle.height),\n\n '--divkit-slider-thumb-secondary-width': pxToEm(thumbSecondaryStyle.width),\n '--divkit-slider-thumb-secondary-height': pxToEm(thumbSecondaryStyle.height),\n\n '--divkit-slider-text-offset-x': textStyle?.offset?.x ? pxToEmWithUnits(textStyle.offset.x) : undefined,\n '--divkit-slider-text-offset-y': textStyle?.offset?.y ? pxToEmWithUnits(textStyle.offset.y) : undefined,\n\n '--divkit-slider-text-secondary-offset-x': textSecondaryStyle?.offset?.x ? pxToEmWithUnits(textSecondaryStyle.offset.x) : undefined,\n '--divkit-slider-text-secondary-offset-y': textSecondaryStyle?.offset?.y ? pxToEmWithUnits(textSecondaryStyle.offset.y) : undefined,\n\n '--divkit-slider-tick-active-width': markActiveStyle ? pxToEm(markActiveStyle.width) : undefined,\n '--divkit-slider-tick-active-height': markActiveStyle ? pxToEm(markActiveStyle.height) : undefined,\n '--divkit-slider-tick-active-border-radius': markActiveStyle ? pxToEm(markActiveStyle.borderRadius) : undefined,\n '--divkit-slider-tick-active-background': markActiveStyle?.background || undefined,\n '--divkit-slider-tick-active-box-shadow': markActiveStyle?.boxShadow || undefined,\n\n '--divkit-slider-tick-inactive-width': markInactiveStyle ? pxToEm(markInactiveStyle.width) : undefined,\n '--divkit-slider-tick-inactive-height': markInactiveStyle ? pxToEm(markInactiveStyle.height) : undefined,\n '--divkit-slider-tick-inactive-border-radius': markInactiveStyle ?\n pxToEm(markInactiveStyle.borderRadius) :\n undefined,\n '--divkit-slider-tick-inactive-background': markInactiveStyle?.background || undefined,\n '--divkit-slider-tick-inactive-box-shadow': markInactiveStyle?.boxShadow || undefined,\n\n '--divkit-slider-max-thumb-width': maxThumbWidth,\n '--divkit-slider-max-thumb-height': maxThumbHeight,\n '--divkit-slider-track-part': trackPart,\n '--divkit-slider-track-secondary-part': trackSecondaryPart,\n };\n\n $: mods = {};\n\n function onSecondMousedown(event: MouseEvent | TouchEvent): void {\n const pageX = 'pageX' in event ? event.pageX : event.changedTouches?.[0]?.pageX;\n if (pageX === undefined) {\n return;\n }\n\n const rangeBbox = tracksInner.getBoundingClientRect();\n const part = (pageX - rangeBbox.left) / rangeBbox.width;\n const newVal = (maxValue - minValue) * part;\n const final = Math.round(clamp(newVal, minValue, maxValue));\n const middle = (value + value2) / 2;\n\n switchedTracks = final < middle === value < value2;\n }\n\n function onInputChange(event: Event, type: 'first' | 'second'): void {\n const val = Number((event.target as HTMLInputElement).value);\n\n if (switchedTracks === (type === 'first')) {\n value2 = val;\n value2Variable.setValue(val);\n } else {\n value = val;\n valueVariable.setValue(val);\n }\n }\n\n let isTicksWarning = false;\n\n function checkTicks() {\n if (!tracksInner) {\n return;\n }\n\n const ticksCount = maxValue - minValue;\n const activeTickWidth = markActiveStyle?.width || 0;\n const inactiveTickWidth = markInactiveStyle?.width || 0;\n const maxTickWidth = Math.max(activeTickWidth, inactiveTickWidth);\n\n if (maxTickWidth * ticksCount >= tracksInner?.clientWidth) {\n if (!isTicksWarning) {\n rootCtx.logError(wrapError(new Error('Slider ticks overlap each other'), {\n level: 'warn'\n }));\n isTicksWarning = true;\n }\n } else {\n isTicksWarning = false;\n }\n }\n\n const checkTicksDebounced = debounce(checkTicks, 50);\n\n onMount(() => {\n checkTicks();\n });\n</script>\n\n<svelte:window on:resize={checkTicksDebounced} />\n\n{#if !hasError}\n <Outer\n cls={genClassName('slider', css, mods)}\n style={stl}\n customDescription={true}\n customActions={'slider'}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n >\n <div class={css['slider__tracks-wrapper']}>\n <div class={css['slider__tracks-inner']} bind:this={tracksInner}>\n <div\n class={css.slider__track}\n style:height={pxToEm(trackInactiveStyle.height)}\n style:border-radius={pxToEm(trackInactiveStyle.borderRadius)}\n style:background={trackInactiveStyle.background}\n style:box-shadow={trackInactiveStyle.boxShadow || ''}\n ></div>\n <div\n class={css['slider__active-track']}\n style:left={(trackActiveOffset * 100).toFixed(2) + '%'}\n style:width={(trackActivePart * 100).toFixed(2) + '%'}\n style:height={pxToEm(trackActiveStyle.height)}\n style:border-radius={pxToEm(trackActiveStyle.borderRadius)}\n style:background={trackActiveStyle.background}\n style:box-shadow={trackActiveStyle.boxShadow || ''}\n ></div>\n {#each markActiveTicks as val}\n <div class=\"{css.slider__tick} {css.slider__tick_active}\" style:--divkit-slider-tick={val}></div>\n {/each}\n {#each markInactiveTicks as val}\n <div class=\"{css.slider__tick} {css.slider__tick_inactive}\" style:--divkit-slider-tick={val}></div>\n {/each}\n <div\n class={css.slider__thumb}\n style:border-radius={pxToEm(thumbStyle.borderRadius)}\n style:background={thumbStyle.background}\n style:box-shadow={thumbStyle.boxShadow || ''}\n >\n {#if textStyle}\n <div class={css['slider__thumb-text']}>\n <div\n class={css['slider__thumb-text-inner']}\n style:font-size={textStyle?.fontSize || '1em'}\n style:font-weight={textStyle?.fontWeight || ''}\n style:color={textStyle?.textColor || '#000'}\n >\n {value}\n </div>\n </div>\n {/if}\n </div>\n {#if secondVariable}\n <div\n class=\"{css.slider__thumb} {css.slider__thumb_secondary}\"\n style:border-radius={pxToEm(thumbSecondaryStyle.borderRadius)}\n style:background={thumbSecondaryStyle.background}\n style:box-shadow={thumbSecondaryStyle.boxShadow || ''}\n >\n {#if textSecondaryStyle}\n <div class=\"{css['slider__thumb-text']} {css['slider__thumb-text_secondary']}\">\n <div\n class={css['slider__thumb-text-inner']}\n style:font-size={textSecondaryStyle?.fontSize || '1em'}\n style:font-weight={textSecondaryStyle?.fontWeight || ''}\n style:color={textSecondaryStyle?.textColor || '#000'}\n >\n {value2}\n </div>\n </div>\n {/if}\n </div>\n {/if}\n <input\n type=\"range\"\n class={switchedTracks ? `${css.slider__input} ${css.slider__input_secondary}` : css.slider__input}\n min={minValue}\n max={maxValue}\n step=\"1\"\n value={switchedTracks ? value2 : value}\n aria-label={description}\n on:input={event => onInputChange(event, 'first')}\n >\n {#if secondVariable}\n <input\n type=\"range\"\n class={switchedTracks ? css.slider__input : `${css.slider__input} ${css.slider__input_secondary}`}\n min={minValue}\n max={maxValue}\n step=\"1\"\n value={switchedTracks ? value : value2}\n aria-label={secondaryDescription}\n on:input={event => onInputChange(event, 'second')}\n on:mousedown={secondVariable ? onSecondMousedown : null}\n on:touchstart={secondVariable ? onSecondMousedown : null}\n >\n {/if}\n </div>\n </div>\n </Outer>\n{/if}\n","// extracted by mini-css-extract-plugin\nexport default {\"input\":\"divkit-c3a4c\",\"input_alignment-horizontal_center\":\"divkit-fc52a\",\"input_alignment-horizontal_right\":\"divkit-e8038\",\"input__input\":\"divkit-f11e0\",\"input__placeholder\":\"divkit-b7593\",\"input_alignment-vertical_top\":\"divkit-bdccd\",\"input_alignment-vertical_bottom\":\"divkit-fc670\",\"input_alignment-vertical_baseline\":\"divkit-dd6af\",\"input_highlight-color\":\"divkit-cc00f\",\"input__input_singleline\":\"divkit-ffd1e\",\"input__scroll-wrapper\":\"divkit-ad8a3\",\"input__input_multiline\":\"divkit-f61f0\",\"input__input_has-custom-focus\":\"divkit-e6b50\"};","// Replicate from Android: client/android/div/src/main/java/com/yandex/div/core/util/mask/TextDiff.kt\n\nexport interface TextDiff {\n start: number;\n added: number;\n removed: number;\n}\n\nexport function textDiff(left: string, right: string): TextDiff {\n if (left === right) {\n return {\n start: left.length,\n added: 0,\n removed: 0\n };\n }\n\n if (left.length > right.length) {\n const diff = textDiff(right, left);\n\n return {\n start: diff.start,\n added: diff.removed,\n removed: diff.added\n };\n }\n\n let leftIndex = 0;\n let rightIndex = right.length - 1;\n const lengthDiff = right.length - left.length;\n\n while (\n leftIndex < rightIndex && leftIndex < left.length &&\n left[leftIndex] === right[leftIndex]\n ) {\n ++leftIndex;\n }\n\n while (\n rightIndex - lengthDiff >= leftIndex &&\n left[rightIndex - lengthDiff] === right[rightIndex]\n ) {\n --rightIndex;\n }\n\n ++rightIndex;\n\n return {\n start: leftIndex,\n added: rightIndex - leftIndex,\n removed: rightIndex - leftIndex - lengthDiff\n };\n}\n","// Replicate from Android: client/android/div/src/main/java/com/yandex/div/core/util/mask/BaseInputMask.kt\n\nimport type { WrappedError } from '../wrapError';\nimport { wrapError } from '../wrapError';\nimport { TextDiff, textDiff } from '../textDiff';\n\nexport interface MaskKey {\n key: string;\n filter?: string | undefined;\n placeholder: string;\n}\n\nexport interface MaskData {\n pattern: string;\n decoding: MaskKey[];\n alwaysVisible: boolean;\n}\n\ninterface MaskChar {\n char: string | null;\n}\n\nexport class MaskCharStatic implements MaskChar {\n constructor(public char: string) {}\n}\n\nexport class MaskCharDynamic implements MaskChar {\n constructor(public char: string | null, public filter: RegExp, public placeholder: string) {}\n}\n\nexport abstract class BaseInputMask {\n protected maskData: MaskData;\n protected filters: Map<string, RegExp> = new Map();\n protected destructedValue: MaskChar[] = [];\n protected cursorPos = 0;\n\n constructor(initialMaskData: MaskData) {\n this.maskData = initialMaskData;\n this.updateMaskData(initialMaskData);\n }\n\n get cursorPosition(): number {\n return this.cursorPos;\n }\n\n get rawValue(): string {\n return this.collectValueRange(0, this.destructedValue.length - 1);\n }\n\n get value(): string {\n let str = '';\n\n for (let i = 0; i < this.destructedValue.length; ++i) {\n const char = this.destructedValue[i];\n\n if (char instanceof MaskCharStatic) {\n str += char.char;\n } else if (char instanceof MaskCharDynamic) {\n if (char.char) {\n str += char.char;\n } else if (this.maskData.alwaysVisible) {\n str += char.placeholder;\n } else {\n break;\n }\n }\n }\n\n return str;\n }\n\n protected firstEmptyHolderIndex(): number {\n const index = this.destructedValue.findIndex(maskChar => {\n return maskChar instanceof MaskCharDynamic && !maskChar.char;\n });\n\n if (index !== -1) {\n return index;\n }\n\n return this.destructedValue.length;\n }\n\n abstract onException(exception: WrappedError): void;\n\n updateMaskData(newMaskData: MaskData, restoreValue = true): void {\n const previousRawValue = this.maskData !== newMaskData && restoreValue ? this.rawValue : null;\n\n this.filters = new Map();\n this.maskData = newMaskData;\n\n this.maskData.decoding.forEach(maskKey => {\n if (maskKey.filter) {\n try {\n const regexp = new RegExp(maskKey.filter);\n this.filters.set(maskKey.key, regexp);\n } catch (err) {\n this.onException(wrapError(err as Error, {\n level: 'error',\n additional: {\n key: maskKey.key\n }\n }));\n }\n }\n });\n\n this.destructedValue = this.maskData.pattern.split('').map(maskChar => {\n const mappingItem = this.maskData.decoding.find(it => it.key === maskChar);\n\n if (mappingItem) {\n return new MaskCharDynamic(\n null,\n this.filters.get(mappingItem.key) as RegExp,\n mappingItem.placeholder\n );\n }\n\n return new MaskCharStatic(maskChar);\n });\n\n if (previousRawValue !== null) {\n this.overrideRawValue(previousRawValue);\n }\n }\n\n overrideRawValue(newRawValue: string): void {\n this.clearRange(0, this.destructedValue.length);\n\n this.replaceChars(newRawValue, 0);\n\n this.cursorPos = Math.min(this.cursorPos, this.value.length);\n }\n\n applyChangeFrom(newValue: string, position?: number): void {\n const diff = textDiff(this.value, newValue);\n\n if (position !== undefined) {\n diff.start = Math.max(0, position - diff.added);\n }\n\n const body = this.buildBodySubstring(diff, newValue);\n const tail = this.buildTailSubstring(diff);\n\n this.cleanup(diff);\n\n const fehi = this.firstEmptyHolderIndex();\n\n const maxShift = this.calculateMaxShift(tail, fehi);\n\n this.replaceChars(body, fehi, maxShift);\n\n const tailStart = this.firstEmptyHolderIndex();\n\n this.replaceChars(tail, tailStart);\n\n this.calculateCursorPosition(diff, tailStart);\n }\n\n protected buildBodySubstring(diff: TextDiff, newValue: string): string {\n return newValue.substring(diff.start, diff.start + diff.added);\n }\n\n protected buildTailSubstring(diff: TextDiff): string {\n return this.collectValueRange(\n diff.start + diff.removed,\n this.destructedValue.length - 1\n );\n }\n\n protected calculateMaxShift(str: string, start: number): number {\n if (this.filters.size <= 1) {\n let dynamicLeft = 0;\n let index = start;\n\n while (index < this.destructedValue.length) {\n if (this.destructedValue[index] instanceof MaskCharDynamic) {\n ++dynamicLeft;\n }\n ++index;\n }\n\n return Math.max(0, dynamicLeft - str.length);\n }\n\n const initialInsertableSubstring = this.calculateInsertableSubstring(str, start);\n\n let index = 0;\n\n while (\n index < this.destructedValue.length &&\n initialInsertableSubstring === this.calculateInsertableSubstring(str, start + index)\n ) {\n ++index;\n }\n\n return Math.max(0, index - 1);\n }\n\n protected cleanup(diff: TextDiff): void {\n if (diff.added === 0 && diff.removed === 1) {\n let index = diff.start;\n\n while (index >= 0) {\n const maskChar = this.destructedValue[index];\n\n if (maskChar instanceof MaskCharDynamic && maskChar.char !== null) {\n maskChar.char = null;\n\n break;\n } else {\n --index;\n }\n }\n }\n\n this.clearRange(diff.start, this.destructedValue.length);\n }\n\n protected clearRange(start: number, end: number): void {\n let index = start;\n\n while (index < end && index < this.destructedValue.length) {\n const holder = this.destructedValue[index];\n\n if (holder instanceof MaskCharDynamic) {\n holder.char = null;\n }\n\n ++index;\n }\n }\n\n protected calculateCursorPosition(diff: TextDiff, tailStart: number) {\n const fehi = this.firstEmptyHolderIndex();\n\n let positionByDiff: number;\n if (diff.start < fehi) {\n positionByDiff = Math.min(this.firstHolderAfter(tailStart), this.value.length);\n } else {\n positionByDiff = fehi;\n }\n\n this.cursorPos = positionByDiff;\n }\n\n protected calculateInsertableSubstring(substring: string, start: number): string {\n let str = '';\n\n let index = start;\n\n const moveToAndGetNextHolderFilter: () => RegExp | undefined = () => {\n while (index < this.destructedValue.length && !(this.destructedValue[index] instanceof MaskCharDynamic)) {\n ++index;\n }\n\n return (this.destructedValue[index] as MaskCharDynamic)?.filter;\n };\n\n substring.split('').forEach(char => {\n const maskCharFilter = moveToAndGetNextHolderFilter();\n\n if (maskCharFilter?.test(char)) {\n str += char;\n ++index;\n }\n });\n\n return str;\n }\n\n protected collectValueRange(start: number, end: number): string {\n let str = '';\n\n let index = start;\n\n while (index <= end) {\n const maskChar = this.destructedValue[index];\n\n if (maskChar instanceof MaskCharDynamic && maskChar.char !== null) {\n str += maskChar.char;\n }\n\n ++index;\n }\n\n return str;\n }\n\n protected replaceChars(substring: string, start: number, count?: number): void {\n let trimmedSubstring = this.calculateInsertableSubstring(substring, start);\n if (count !== undefined) {\n trimmedSubstring = trimmedSubstring.substring(0, count);\n }\n\n let index = start;\n\n let insertableCharIndex = 0;\n\n while (index < this.destructedValue.length && insertableCharIndex < trimmedSubstring.length) {\n const maskChar = this.destructedValue[index];\n const char = trimmedSubstring[insertableCharIndex];\n\n if (maskChar instanceof MaskCharDynamic) {\n maskChar.char = char;\n\n ++insertableCharIndex;\n }\n\n ++index;\n }\n }\n\n protected firstHolderAfter(start: number): number {\n let index = start;\n\n while (index < this.destructedValue.length) {\n const holder = this.destructedValue[index];\n\n if (holder instanceof MaskCharDynamic) {\n break;\n } else {\n ++index;\n }\n }\n\n return index;\n }\n}\n","import type { LogError, WrappedError } from '../wrapError';\nimport { BaseInputMask, MaskData } from './baseInputMask';\n\nexport class FixedLengthInputMask extends BaseInputMask {\n constructor(initialMaskData: MaskData, private readonly logError: LogError) {\n super(initialMaskData);\n }\n\n onException(exception: WrappedError) {\n this.logError(exception);\n }\n}\n","import type { LogError, WrappedError } from '../wrapError';\nimport { BaseInputMask } from './baseInputMask';\nimport { TextDiff, textDiff } from '../textDiff';\nimport { wrapError } from '../wrapError';\n\nexport class CurrencyInputMask extends BaseInputMask {\n protected currencyFormatter = new Intl.NumberFormat();\n protected decimalSeparator = '.';\n protected localeDigits: Record<string, string> = {};\n protected trimZeroRegExp = new RegExp('');\n\n constructor(locale: string | undefined = undefined, private readonly logError: LogError) {\n super({\n pattern: '',\n decoding: [],\n alwaysVisible: false\n });\n this.initFormatter(locale);\n }\n\n updateCurrencyParams(locale?: string) {\n const currentValue = this.parseFormat(this.rawValue) || 0;\n this.initFormatter(locale);\n\n const newValue = currentValue.toString().replace('.', this.decimalSeparator);\n\n this.applyChangeFrom(newValue);\n }\n\n protected initFormatter(locale?: string): void {\n try {\n this.currencyFormatter = new Intl.NumberFormat(locale, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n });\n this.decimalSeparator = this.currencyFormatter.format(0)[1];\n this.localeDigits = new Array(10).fill('').reduce((acc, _, i) => {\n acc[i] = this.currencyFormatter.format(i)[0];\n return acc;\n }, {});\n this.trimZeroRegExp = new RegExp(`^${this.localeDigits['0']}+`);\n } catch (err) {\n this.onException(wrapError(err as Error, {\n level: 'error',\n additional: {\n locale\n }\n }));\n }\n }\n\n protected invalidateMaskDataForFormatted(forValue: number): void {\n const formatted = this.currencyFormatter.format(forValue);\n const pattern = this.formatPattern(formatted);\n const decoding = [{\n key: '#',\n filter: `[${[...Object.values(this.localeDigits)].join('')}]`,\n placeholder: this.localeDigits[0]\n }, {\n key: this.decimalSeparator,\n filter: `[${this.decimalSeparator}]`,\n placeholder: this.decimalSeparator\n }];\n\n this.updateMaskData({\n pattern,\n decoding,\n alwaysVisible: this.maskData.alwaysVisible\n }, false);\n }\n\n overrideRawValue(newRawValue: string): void {\n const parsed = this.parseFormat(newRawValue) || 0;\n\n this.invalidateMaskDataForFormatted(parsed);\n\n super.overrideRawValue(newRawValue);\n }\n\n applyChangeFrom(newValue: string, position?: number): void {\n const diff = textDiff(this.value, newValue);\n const oldSeparatorIndex = this.value.lastIndexOf(this.decimalSeparator);\n const newSeparatorIndex = newValue.lastIndexOf(this.decimalSeparator);\n const needInvalidateMask =\n oldSeparatorIndex !== newSeparatorIndex ||\n (oldSeparatorIndex === -1 && newSeparatorIndex === -1);\n const clearedValue = this.validFormat(newValue, diff);\n\n this.cleanup(diff);\n\n const rawValue = this.parseFormat(clearedValue) || 0;\n\n if (needInvalidateMask) {\n this.invalidateMaskDataForFormatted(rawValue);\n }\n\n this.replaceChars(clearedValue, 0);\n\n if (this.value.length > diff.start && !this.isDigit(this.value[diff.start])) {\n this.cursorPos = position ?? this.cursorPosition;\n } else {\n this.cursorPos = Math.abs(this.value.length - (newValue.length - (position ?? this.cursorPosition)));\n }\n }\n\n protected parseFormat(value: string): number {\n return parseFloat(\n value.replace(/./g, char => {\n const localeDigit = this.localeDigits[char];\n\n if (localeDigit) {\n return localeDigit;\n }\n\n if (char === this.decimalSeparator) {\n return '.';\n }\n\n return '';\n })\n );\n }\n\n protected formatPattern(pattern: string): string {\n let result = '';\n\n for (const char of pattern) {\n result += this.isDigit(char) ? '#' : char;\n }\n\n return result;\n }\n\n protected validFormat(value: string, diff: TextDiff): string {\n if (!value) {\n return '';\n }\n\n let separatorOutOfDiffIndex = -1;\n let index = 0;\n\n while (index < value.length) {\n if (value[index] === this.decimalSeparator && !this.inDiff(diff, index)) {\n separatorOutOfDiffIndex = index;\n break;\n }\n\n index++;\n }\n\n let replaceCharInDiff = -1;\n\n if (diff.added === 1 && diff.removed === 0 && [',', '.'].includes(value[diff.start])) {\n replaceCharInDiff = diff.start;\n }\n\n const maxSeparatorOffset = this.currencyFormatter.resolvedOptions().maximumFractionDigits;\n let leftToInsert = maxSeparatorOffset;\n\n if (separatorOutOfDiffIndex !== -1) {\n index = separatorOutOfDiffIndex;\n\n while (index < value.length) {\n if (this.isDigit(value[index]) && !this.inDiff(diff, index)) {\n leftToInsert--;\n }\n index++;\n }\n } else {\n let oldSeparatorLeft = false;\n\n for (let i = 0; i < value.length; i++) {\n const char = value[i];\n if (char === this.decimalSeparator) {\n oldSeparatorLeft = true;\n } else if (!this.inDiff(diff, i) && oldSeparatorLeft && this.isDigit(char)) {\n leftToInsert--;\n }\n }\n }\n\n const containsSeparator = value.includes(this.decimalSeparator) || replaceCharInDiff !== -1;\n const result: string[] = [];\n\n index = value.length - 1;\n let separatorInserted = false;\n\n while (index >= 0) {\n const char = value[index];\n const canInsertSeparator = result.length <= maxSeparatorOffset;\n\n if (this.isDigit(char)) {\n if (this.inDiff(diff, index) && !separatorInserted && containsSeparator) {\n if (leftToInsert > 0) {\n result.push(char);\n leftToInsert--;\n }\n } else {\n result.push(char);\n }\n } else if (canInsertSeparator && separatorOutOfDiffIndex === -1 && index === replaceCharInDiff) {\n result.push(this.decimalSeparator);\n separatorInserted = true;\n } else if (\n canInsertSeparator &&\n char === this.decimalSeparator &&\n (separatorOutOfDiffIndex === index || separatorOutOfDiffIndex === -1)\n ) {\n result.push(this.decimalSeparator);\n\n separatorInserted = true;\n separatorOutOfDiffIndex = index;\n }\n\n index--;\n }\n\n return result.reverse().join('').replace(this.trimZeroRegExp, '');\n }\n\n protected inDiff(diff: TextDiff, index: number): boolean {\n return diff.start <= index && index < diff.start + diff.added;\n }\n\n protected isDigit(char: string): boolean {\n return Boolean(this.localeDigits[char]);\n }\n\n onException(exception: WrappedError) {\n this.logError(exception);\n }\n}\n","const STRING_NODE_TYPE = 3;\n\nfunction countNodeChars(node: Node): number {\n const text = node.textContent;\n let res = 0;\n\n if (typeof text === 'string') {\n res += text.length;\n if (node instanceof HTMLElement && (node.tagName === 'DIV' || node.tagName === 'BR')) {\n ++res;\n }\n }\n\n return res;\n}\n\nexport function calcSelectionOffset(container: HTMLElement): number {\n try {\n let res = 0;\n const sel = window.getSelection();\n if (!sel) {\n return 0;\n }\n const range = sel.getRangeAt(0);\n let node: Node | undefined;\n if (range) {\n if (!range.collapsed) {\n return 0;\n }\n res += range.endOffset;\n node = range.endContainer;\n }\n\n if (node instanceof HTMLElement) {\n let sum = 0;\n for (let i = 0, len = Math.min(res, node.childNodes.length); i < len; ++i) {\n sum += countNodeChars(node.childNodes[i]);\n }\n res = sum;\n }\n\n while (node && node !== container) {\n const parent = node.parentNode;\n if (!parent) {\n return 0;\n }\n const index = Array.from(parent.childNodes).indexOf(node as ChildNode);\n for (let i = 0; i < index; ++i) {\n const child = parent.childNodes[i];\n res += countNodeChars(child);\n }\n if (node instanceof HTMLElement &&\n (\n node.tagName === 'DIV' && parent.childNodes[index - 1]?.nodeType === STRING_NODE_TYPE ||\n node.tagName === 'BR'\n )\n ) {\n ++res;\n }\n node = parent;\n }\n\n return res;\n } catch (err) {\n return 0;\n }\n}\n\nexport function setSelectionOffset(node: Node, offset: number): void {\n if (node.nodeType === STRING_NODE_TYPE) {\n try {\n const sel = window.getSelection();\n if (sel) {\n sel.removeAllRanges();\n const range = document.createRange();\n range.setStart(node, offset);\n range.setEnd(node, offset);\n sel.addRange(range);\n }\n } catch (err) {}\n return;\n }\n if (node instanceof HTMLElement && node.tagName === 'BR') {\n try {\n const sel = window.getSelection();\n if (sel) {\n sel.removeAllRanges();\n const range = document.createRange();\n const parent = node.parentNode as Node;\n const index = Array.from(parent.childNodes).indexOf(node) + 1;\n range.setStart(parent, index);\n range.setEnd(parent, index);\n sel.addRange(range);\n }\n } catch (err) {}\n return;\n }\n\n for (let i = 0, len = node.childNodes.length; i < len; ++i) {\n const child = node.childNodes[i];\n const count = countNodeChars(child);\n if (offset <= count) {\n setSelectionOffset(child, offset);\n return;\n }\n offset -= count;\n }\n}\n","<script lang=\"ts\">\n import { getContext, onMount, tick } from 'svelte';\n import type { HTMLAttributes } from 'svelte/elements';\n\n import css from './Input.module.css';\n\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivInputData, KeyboardType } from '../../types/input';\n import type { EdgeInsets } from '../../types/edgeInserts';\n import type { FixedLengthInputMask } from '../../utils/mask/fixedLengthInputMask';\n import type { MaybeMissing } from '../../expressions/json';\n import type { InputMask } from '../../types/input';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { genClassName } from '../../utils/genClassName';\n import { pxToEm, pxToEmWithUnits } from '../../utils/pxToEm';\n import { wrapError } from '../../utils/wrapError';\n import { correctColor } from '../../utils/correctColor';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { correctFontWeight } from '../../utils/correctFontWeight';\n import { isPositiveNumber } from '../../utils/isPositiveNumber';\n import { isNumber } from '../../utils/isNumber';\n import Outer from '../utilities/Outer.svelte';\n import { createVariable } from '../../expressions/variable';\n import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n import { correctEdgeInsertsObject } from '../../utils/correctEdgeInsertsObject';\n import { edgeInsertsToCss } from '../../utils/edgeInsertsToCss';\n import { makeStyle } from '../../utils/makeStyle';\n import { updateFixedMask } from '../../utils/updateFixedMask';\n import { BaseInputMask } from '../../utils/mask/baseInputMask';\n import { updateCurrencyMask } from '../../utils/updateCurrencyMask';\n import { CurrencyInputMask } from '../../utils/mask/currencyInputMask';\n import { correctAlignmentHorizontal } from '../../utils/correctAlignmentHorizontal';\n import { AlignmentHorizontal, AlignmentVertical } from '../../types/alignment';\n import { correctAlignmentVertical } from '../../utils/correctAlignmentVertical';\n import { calcSelectionOffset, setSelectionOffset } from '../../utils/contenteditable';\n\n export let json: Partial<DivInputData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n let input: HTMLInputElement | HTMLSpanElement;\n let isPressed = false;\n let inputMask: BaseInputMask | null = null;\n\n const variable = json.text_variable;\n const rawVariable = json.mask?.raw_text_variable;\n\n let hasError = false;\n if (!variable) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Missing \"text_variable\" in \"input\"')));\n }\n\n let valueVariable = variable && rootCtx.getVariable(variable, 'string') || createVariable('temp', 'string', '');\n let rawValueVariable = rawVariable && rootCtx.getVariable(rawVariable, 'string') || createVariable('temp', 'string', '');\n let value = '';\n let contentEditableValue = '';\n\n const jsonMask = rootCtx.getDerivedFromVars(json.mask);\n function updateMaskData(mask: MaybeMissing<InputMask> | undefined): void {\n if (mask?.type === 'fixed_length') {\n inputMask = updateFixedMask(mask, rootCtx.logError, inputMask as FixedLengthInputMask);\n } else if (mask?.type === 'currency') {\n inputMask = updateCurrencyMask(mask, rootCtx.logError, inputMask as CurrencyInputMask);\n }\n\n if (inputMask) {\n runRawValueMask();\n }\n }\n $: updateMaskData($jsonMask);\n\n $: if (!inputMask && value !== $valueVariable) {\n value = contentEditableValue = $valueVariable;\n }\n\n $: if (inputMask && inputMask.rawValue !== $rawValueVariable) {\n runRawValueMask();\n }\n\n const jsonHintText = rootCtx.getDerivedFromVars(json.hint_text);\n $: placeholder = $jsonHintText;\n\n const jsonHintColor = rootCtx.getDerivedFromVars(json.hint_color);\n let hintColor = '';\n $: {\n hintColor = correctColor($jsonHintColor, 1, hintColor);\n }\n\n const jsonFontSize = rootCtx.getDerivedFromVars(json.font_size);\n let fontSize = 12;\n $: {\n fontSize = correctPositiveNumber($jsonFontSize, fontSize);\n }\n\n const jsonFontWeight = rootCtx.getDerivedFromVars(json.font_weight);\n const jsonFontFamily = rootCtx.getDerivedFromVars(json.font_family);\n let fontWeight: number | undefined = undefined;\n let fontFamily = '';\n $: {\n fontWeight = correctFontWeight($jsonFontWeight, fontWeight);\n if ($jsonFontFamily && typeof $jsonFontFamily === 'string') {\n fontFamily = rootCtx.typefaceProvider($jsonFontFamily, {\n fontWeight: fontWeight || 400\n });\n } else {\n fontFamily = '';\n }\n }\n\n const jsonLineHeight = rootCtx.getDerivedFromVars(json.line_height);\n let lineHeight: number | undefined = undefined;\n $: {\n const val = $jsonLineHeight;\n if (isPositiveNumber(val)) {\n lineHeight = val / fontSize;\n }\n }\n\n const jsonLetterSpacing = rootCtx.getDerivedFromVars(json.letter_spacing);\n let letterSpacing = '';\n $: {\n if (isNumber($jsonLetterSpacing)) {\n letterSpacing = pxToEm($jsonLetterSpacing);\n }\n }\n\n const jsonTextColor = rootCtx.getDerivedFromVars(json.text_color);\n let textColor = '#000';\n $: {\n textColor = correctColor($jsonTextColor, 1, textColor);\n }\n\n const jsonHighlightColor = rootCtx.getDerivedFromVars(json.highlight_color);\n let highlightColor = '';\n $: {\n highlightColor = correctColor($jsonHighlightColor, 1, highlightColor);\n }\n\n const jsonAlignmentHorizontal = rootCtx.getDerivedFromVars(json.text_alignment_horizontal);\n let alignmentHorizontal: AlignmentHorizontal = 'left';\n $: {\n alignmentHorizontal = correctAlignmentHorizontal($jsonAlignmentHorizontal, alignmentHorizontal);\n }\n\n const jsonAlignmentVertical = rootCtx.getDerivedFromVars(json.text_alignment_vertical);\n let alignmentVertical: AlignmentVertical = 'center';\n $: {\n alignmentVertical = correctAlignmentVertical($jsonAlignmentVertical, alignmentVertical);\n }\n\n const jsonKeyboardType = rootCtx.getDerivedFromVars(json.keyboard_type);\n const KEYBOARD_MAP: Record<KeyboardType, string> = {\n email: 'email',\n number: 'number',\n phone: 'tel',\n single_line_text: 'text',\n multi_line_text: 'text',\n uri: 'url'\n };\n let keyboardType = 'multi_line_text';\n let inputType = 'text';\n const isSupportInputMode = document && 'inputMode' in document.createElement('input');\n let inputMode: HTMLAttributes<HTMLInputElement>['inputmode'] = undefined;\n $: {\n if ($jsonKeyboardType && $jsonKeyboardType in KEYBOARD_MAP) {\n inputType = KEYBOARD_MAP[$jsonKeyboardType as KeyboardType];\n keyboardType = $jsonKeyboardType;\n }\n\n if ($jsonMask?.type === 'currency') {\n inputType = isSupportInputMode ? 'text' : 'tel';\n inputMode = 'decimal';\n }\n }\n\n const jsonVisibleMaxLines = rootCtx.getDerivedFromVars(json.max_visible_lines);\n $: isMultiline = keyboardType === 'multi_line_text'/* && isPositiveNumber($jsonVisibleMaxLines) && $jsonVisibleMaxLines > 1*/;\n\n $: jsonPaddings = rootCtx.getDerivedFromVars(json.paddings);\n let maxHeight = '';\n let selfPadding: EdgeInsets | null = null;\n let padding = '';\n let verticalPadding = '';\n $: {\n if (isPositiveNumber($jsonVisibleMaxLines)) {\n maxHeight = `calc(${$jsonVisibleMaxLines * (lineHeight || 1.25) * (fontSize / 10) + 'em'} + ${pxToEmWithUnits(correctNonNegativeNumber($jsonPaddings?.top, 0) + correctNonNegativeNumber($jsonPaddings?.bottom, 0))})`;\n }\n selfPadding = correctEdgeInsertsObject(($jsonPaddings) ? $jsonPaddings : undefined, selfPadding);\n padding = selfPadding ? edgeInsertsToCss({\n top: (Number(selfPadding.top) || 0) / fontSize * 10,\n right: (Number(selfPadding.right) || 0) / fontSize * 10,\n bottom: (Number(selfPadding.bottom) || 0) / fontSize * 10,\n left: (Number(selfPadding.left) || 0) / fontSize * 10\n }) : '';\n verticalPadding = selfPadding ? edgeInsertsToCss({\n top: (Number(selfPadding.top) || 0) / fontSize * 10,\n bottom: (Number(selfPadding.bottom) || 0) / fontSize * 10\n }) : '';\n }\n\n $: jsonAccessibility = rootCtx.getDerivedFromVars(json.accessibility);\n let description = '';\n $: if ($jsonAccessibility?.description) {\n description = $jsonAccessibility.description;\n } else {\n rootCtx.logError(wrapError(new Error('Missing accessibility \"description\" for input'), {\n level: 'warn'\n }));\n }\n\n const jsonSelectAll = rootCtx.getDerivedFromVars(json.select_all_on_focus);\n\n $: mods = {\n 'highlight-color': Boolean(highlightColor),\n multiline: isMultiline,\n 'alignment-horizontal': alignmentHorizontal,\n 'alignment-vertical': alignmentVertical\n };\n $: stl = {\n '--divkit-input-hint-color': hintColor,\n '--divkit-input-highlight-color': highlightColor,\n '--divkit-input-line-height': lineHeight,\n 'font-weight': fontWeight,\n 'font-family': fontFamily,\n 'letter-spacing': letterSpacing,\n color: textColor,\n 'max-height': maxHeight\n };\n $: paddingStl = {\n 'font-size': pxToEm(fontSize),\n padding\n };\n $: verticalPaddingStl = {\n 'font-size': pxToEm(fontSize),\n padding: verticalPadding\n };\n\n function onInput(event: Event): void {\n let val = (isMultiline ?\n (event.target as HTMLDivElement).innerText :\n (event.target as HTMLInputElement).value\n ) || '';\n\n if (val === '\\n') {\n val = '';\n }\n\n if (value !== val) {\n value = contentEditableValue = val;\n valueVariable.setValue(val);\n if (inputMask) {\n runValueMask();\n }\n }\n }\n\n function onPaste(event: ClipboardEvent): void {\n event.preventDefault();\n if (event.clipboardData) {\n let text = event.clipboardData.getData('text/plain');\n text = text.trim();\n document.execCommand('inserttext', false, text);\n }\n }\n\n // Handle text selection\n function onMousedown() {\n isPressed = false;\n\n setTimeout(() => {\n isPressed = true;\n }, 250);\n }\n\n function onClick() {\n if (!isPressed) {\n if (input instanceof HTMLInputElement) {\n input.select();\n } else {\n const selection = window.getSelection();\n const range = document.createRange();\n range.selectNodeContents(input);\n if (selection) {\n selection.removeAllRanges();\n selection.addRange(range);\n }\n }\n }\n }\n\n function getSelectionEnd(): number | undefined {\n if (input instanceof HTMLInputElement) {\n return input.selectionEnd === null ? undefined : input.selectionEnd;\n }\n\n return calcSelectionOffset(input);\n }\n\n function setCursorPosition(cursorPosition: number): void {\n if (input instanceof HTMLInputElement) {\n input.selectionStart = input.selectionEnd = cursorPosition;\n } else {\n setSelectionOffset(input, cursorPosition);\n }\n }\n\n async function runValueMask(): Promise<void> {\n if (!input || !inputMask) {\n return;\n }\n\n inputMask.applyChangeFrom(value, getSelectionEnd());\n\n rawValueVariable.set(inputMask.rawValue);\n $valueVariable = value = contentEditableValue = inputMask.value;\n const cursorPosition = inputMask.cursorPosition;\n\n await tick();\n\n if (document.activeElement === input) {\n setCursorPosition(cursorPosition);\n }\n }\n\n async function runRawValueMask(): Promise<void> {\n if (!input || !inputMask) {\n return;\n }\n\n inputMask.overrideRawValue($rawValueVariable);\n\n rawValueVariable.set(inputMask.rawValue);\n $valueVariable = value = contentEditableValue = inputMask.value;\n const cursorPosition = inputMask.cursorPosition;\n\n await tick();\n\n if (document.activeElement === input) {\n setCursorPosition(cursorPosition);\n }\n }\n\n onMount(() => {\n if (input && inputMask) {\n if ($rawValueVariable) {\n inputMask.overrideRawValue($rawValueVariable);\n $valueVariable = value = contentEditableValue = inputMask.value;\n }\n }\n });\n</script>\n\n{#if !hasError}\n <Outer\n let:focusHandler\n let:blurHandler\n let:hasCustomFocus\n cls={genClassName('input', css, mods)}\n style={stl}\n customDescription={true}\n customActions={'input'}\n customPaddings={true}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n >\n {#if isMultiline}\n <span class={css['input__scroll-wrapper']}>\n {#if !contentEditableValue && placeholder}\n <div\n class={css.input__placeholder}\n aria-hidden=\"true\"\n style={makeStyle(paddingStl)}\n >\n {placeholder}\n </div>\n {/if}\n\n <!-- zero-width space, so other baseline-elements could be aligned without value -->\n <span\n aria-hidden=\"true\"\n style={makeStyle(verticalPaddingStl)}\n ></span>\n\n <!-- svelte-ignore a11y-click-events-have-key-events -->\n <span\n bind:this={input}\n class={genClassName('input__input', css, { 'has-custom-focus': hasCustomFocus, multiline: true })}\n autocapitalize=\"off\"\n contenteditable=\"true\"\n aria-label={description}\n style={makeStyle(paddingStl)}\n bind:innerText={contentEditableValue}\n on:input={onInput}\n on:paste={onPaste}\n on:mousedown={$jsonSelectAll ? onMousedown : undefined}\n on:click={$jsonSelectAll ? onClick : undefined}\n on:focus={focusHandler}\n on:blur={blurHandler}\n >\n </span>\n </span>\n {:else}\n <input\n bind:this={input}\n type={inputType}\n inputmode={inputMode}\n class={genClassName('input__input', css, { 'has-custom-focus': hasCustomFocus, singleline: true })}\n autocomplete=\"off\"\n autocapitalize=\"off\"\n aria-label={description}\n style={makeStyle(paddingStl)}\n {placeholder}\n {value}\n on:input={onInput}\n on:mousedown={$jsonSelectAll ? onMousedown : undefined}\n on:click={$jsonSelectAll ? onClick : undefined}\n on:focus={focusHandler}\n on:blur={blurHandler}\n >\n {/if}\n </Outer>\n{/if}\n","import type { LogError } from './wrapError';\nimport type { MaskData } from './mask/baseInputMask';\nimport { FixedLengthInputMask } from './mask/fixedLengthInputMask';\nimport { MaybeMissing } from '../expressions/json';\nimport { FixedLengthInputMask as FixedLengthInputMaskType } from '../types/input';\n\nexport function updateFixedMask(\n mask: MaybeMissing<FixedLengthInputMaskType>,\n logError: LogError,\n oldValue?: FixedLengthInputMask | null\n): FixedLengthInputMask | null {\n if (\n typeof mask.pattern === 'string' && Array.isArray(mask.pattern_elements) &&\n mask.pattern_elements.every(it => it.key && typeof it.key === 'string')\n ) {\n const maskData: MaskData = {\n pattern: mask.pattern,\n alwaysVisible: Boolean(mask.always_visible),\n decoding: mask.pattern_elements.map(it => ({\n key: it.key as string,\n filter: it.regex && typeof it.regex === 'string' ? it.regex : undefined,\n placeholder: it.placeholder && typeof it.placeholder === 'string' ? it.placeholder : '_'\n }))\n };\n\n if (oldValue) {\n oldValue.updateMaskData(maskData);\n return oldValue;\n }\n return new FixedLengthInputMask(maskData, logError);\n }\n\n return oldValue || null;\n}\n","import type { MaybeMissing } from '../expressions/json';\nimport { CurrencyInputMask } from './mask/currencyInputMask';\nimport { CurrencyInputMask as CurrencyInputMaskType } from '../types/input';\nimport type { LogError } from './wrapError';\n\nexport function updateCurrencyMask(\n mask: MaybeMissing<CurrencyInputMaskType>,\n logError: LogError,\n oldValue?: CurrencyInputMask | null\n): CurrencyInputMask | null {\n if (oldValue) {\n oldValue.updateCurrencyParams(mask.locale);\n return oldValue;\n }\n return new CurrencyInputMask(mask.locale, logError);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"select\":\"divkit-feef3\",\"select__select-text\":\"divkit-cd862\",\"select_hint\":\"divkit-a3cf6\",\"select__select\":\"divkit-bdb72\",\"select__select_has-custom-focused\":\"divkit-a46ad\",\"has-custom-focused\":\"divkit-fc5dc\",\"select__option\":\"divkit-e774b\"};","<script lang=\"ts\">\n import { getContext } from 'svelte';\n\n import css from './Select.module.css';\n\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { genClassName } from '../../utils/genClassName';\n import { pxToEm } from '../../utils/pxToEm';\n import { wrapError } from '../../utils/wrapError';\n import { correctColor } from '../../utils/correctColor';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { correctFontWeight } from '../../utils/correctFontWeight';\n import { isPositiveNumber } from '../../utils/isPositiveNumber';\n import { isNumber } from '../../utils/isNumber';\n import { createVariable } from '../../expressions/variable';\n import { DivSelectData } from '../../types/select';\n import { EdgeInsets } from '../../types/edgeInserts';\n import { correctEdgeInsertsObject } from '../../utils/correctEdgeInsertsObject';\n import { edgeInsertsToCss } from '../../utils/edgeInsertsToCss';\n import { makeStyle } from '../../utils/makeStyle';\n import Outer from '../utilities/Outer.svelte';\n\n export let json: Partial<DivSelectData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n const variable = json.value_variable;\n\n let hasError = false;\n if (!variable) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Missing \"value_variable\" in \"select\"')));\n }\n\n let valueVariable = variable && rootCtx.getVariable(variable, 'string') || createVariable('temp', 'string', '');\n let value = '';\n $: {\n value = $valueVariable as string;\n }\n\n const items = json.options;\n const filteredItems = Array.isArray(items) && items.filter(it => typeof it.value === 'string') || [];\n if (!(Array.isArray(filteredItems) && filteredItems.length)) {\n rootCtx.logError(wrapError(new Error('Empty selection \"items\" in \"select\"')));\n }\n\n let selectText = '';\n $: {\n const item = filteredItems.find(it => {\n return it.value === $valueVariable;\n });\n if (item) {\n selectText = typeof item.text === 'string' ? item.text : item.value;\n } else {\n selectText = '';\n if ($valueVariable) {\n rootCtx.logError(wrapError(new Error('Value from the variable was not found in the selection items for \"select\"')));\n }\n }\n }\n\n $: jsonPaddings = rootCtx.getDerivedFromVars(json.paddings);\n let selfPadding: EdgeInsets | null = null;\n let padding = '';\n $: {\n selfPadding = correctEdgeInsertsObject(($jsonPaddings) ? $jsonPaddings : undefined, selfPadding);\n padding = selfPadding ? edgeInsertsToCss({\n top: (Number(selfPadding.top) || 0) / fontSize * 10,\n right: (Number(selfPadding.right) || 0) / fontSize * 10,\n bottom: (Number(selfPadding.bottom) || 0) / fontSize * 10,\n left: (Number(selfPadding.left) || 0) / fontSize * 10\n }) : '';\n }\n\n const jsonHintText = rootCtx.getDerivedFromVars(json.hint_text);\n $: hint = $jsonHintText;\n\n const jsonHintColor = rootCtx.getDerivedFromVars(json.hint_color);\n let hintColor = 'rgba(0,0,0,.45)';\n $: {\n hintColor = correctColor($jsonHintColor, 1, hintColor);\n }\n\n const jsonFontSize = rootCtx.getDerivedFromVars(json.font_size);\n let fontSize = 12;\n $: {\n fontSize = correctPositiveNumber($jsonFontSize, fontSize);\n }\n\n const jsonFontWeight = rootCtx.getDerivedFromVars(json.font_weight);\n const jsonFontFamily = rootCtx.getDerivedFromVars(json.font_family);\n let fontWeight: number | undefined = undefined;\n let fontFamily = '';\n $: {\n fontWeight = correctFontWeight($jsonFontWeight, fontWeight);\n if ($jsonFontFamily && typeof $jsonFontFamily === 'string') {\n fontFamily = rootCtx.typefaceProvider($jsonFontFamily, {\n fontWeight: fontWeight || 400\n });\n } else {\n fontFamily = '';\n }\n }\n\n const jsonLineHeight = rootCtx.getDerivedFromVars(json.line_height);\n let lineHeight: number | undefined = undefined;\n $: {\n const val = $jsonLineHeight;\n if (isPositiveNumber(val)) {\n lineHeight = val / fontSize;\n }\n }\n\n const jsonLetterSpacing = rootCtx.getDerivedFromVars(json.letter_spacing);\n let letterSpacing = '';\n $: {\n if (isNumber($jsonLetterSpacing)) {\n letterSpacing = pxToEm($jsonLetterSpacing / fontSize * 10);\n }\n }\n\n const jsonTextColor = rootCtx.getDerivedFromVars(json.text_color);\n let textColor = '#000';\n $: {\n textColor = correctColor($jsonTextColor, 1, textColor);\n }\n\n $: jsonAccessibility = rootCtx.getDerivedFromVars(json.accessibility);\n let description = '';\n $: if ($jsonAccessibility?.description) {\n description = $jsonAccessibility.description;\n } else {\n rootCtx.logError(wrapError(new Error('Missing accessibility \"description\" for select'), {\n level: 'warn'\n }));\n }\n\n $: mods = {\n hint: !selectText\n };\n $: stl = {\n '--divkit-input-hint-color': hintColor,\n 'font-weight': fontWeight,\n 'font-family': fontFamily,\n color: textColor\n };\n $: innerStl = {\n padding,\n 'font-size': pxToEm(fontSize),\n 'line-height': lineHeight,\n 'letter-spacing': letterSpacing\n };\n $: selectStl = {\n 'font-size': pxToEm(fontSize),\n 'line-height': lineHeight,\n 'letter-spacing': letterSpacing\n };\n</script>\n\n{#if !hasError}\n <Outer\n let:hasCustomFocus\n let:focusHandler\n let:blurHandler\n cls={genClassName('select', css, mods)}\n style={stl}\n customDescription={true}\n customActions={'select'}\n customPaddings={true}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n >\n <span class={css['select__select-text']} style={makeStyle(innerStl)} aria-hidden=\"true\">\n <!--Space holder should have height even it has no value-->\n {selectText || hint || ''}\n </span>\n\n <select\n class={genClassName('select__select', css, { 'has-custom-focus': hasCustomFocus })}\n aria-label={description}\n bind:value={$valueVariable}\n style={makeStyle(selectStl)}\n on:focus={focusHandler}\n on:blur={blurHandler}\n >\n {#each filteredItems as item}\n <option class={css.select__option} value={item.value}>{item.text || item.value}</option>\n {/each}\n </select>\n </Outer>\n{/if}\n","// extracted by mini-css-extract-plugin\nexport default {\"video__video\":\"divkit-c11f9\"};","<script lang=\"ts\">\n import { getContext, onDestroy } from 'svelte';\n\n import css from './Video.module.css';\n\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivVideoData, VideoElements } from '../../types/video';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { wrapError } from '../../utils/wrapError';\n import { createVariable } from '../../expressions/variable';\n import { PreparedVideoSource, correctVideoSource } from '../../utils/correctVideoSource';\n import { correctBooleanInt } from '../../utils/correctBooleanInt';\n import Outer from '../utilities/Outer.svelte';\n import { prepareBase64 } from '../../utils/prepareBase64';\n\n export let json: Partial<DivVideoData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n let hasError = false;\n let isSelfVariableSet = false;\n let videoElem: HTMLVideoElement;\n\n const jsonSource = rootCtx.getDerivedFromVars(json.video_sources);\n let sources: PreparedVideoSource[] = [];\n\n $: {\n sources = correctVideoSource($jsonSource, sources);\n\n if (sources.length) {\n hasError = false;\n } else {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Missing \"video_sources\" in \"video\"')));\n }\n }\n\n const jsonRepeatable = rootCtx.getDerivedFromVars(json.repeatable);\n let loop = false;\n $: loop = correctBooleanInt($jsonRepeatable, loop);\n\n const jsonAutostart = rootCtx.getDerivedFromVars(json.autostart);\n let autoplay = false;\n $: autoplay = correctBooleanInt($jsonAutostart, autoplay);\n\n const jsonMuted = rootCtx.getDerivedFromVars(json.muted);\n let muted = false;\n $: muted = correctBooleanInt($jsonMuted, muted);\n\n const jsonPreview = rootCtx.getDerivedFromVars(json.preview);\n let poster: string | undefined = undefined;\n $: poster = typeof $jsonPreview === 'string' ? prepareBase64($jsonPreview) : poster;\n\n const elapsedVariableName = json.elapsed_time_variable;\n let elapsedVariable = elapsedVariableName && rootCtx.getVariable(elapsedVariableName, 'integer') || createVariable('temp', 'integer', 0);\n\n elapsedVariable.subscribe(val => {\n if (isSelfVariableSet) {\n isSelfVariableSet = false;\n return;\n }\n if (videoElem) {\n videoElem.currentTime = Number(val) / 1000;\n }\n });\n\n if (json.id && !hasError && !layoutParams?.fakeElement) {\n rootCtx.registerInstance<VideoElements>(json.id, {\n pause() {\n videoElem?.pause();\n },\n start() {\n const res = videoElem?.play();\n if (res) {\n res.catch(err => {\n rootCtx.logError(wrapError(new Error('Video playing error'), {\n level: 'error',\n additional: {\n originalText: String(err)\n }\n }));\n });\n }\n }\n });\n }\n\n function onTimeUpdate(): void {\n if (videoElem) {\n isSelfVariableSet = true;\n elapsedVariable.setValue(Math.floor(videoElem.currentTime * 1000));\n }\n }\n\n function onEnd(): void {\n const actions = rootCtx.getJsonWithVars(json.end_actions);\n rootCtx.execAnyActions(actions);\n }\n\n function onPlaying(): void {\n const actions = rootCtx.getJsonWithVars(json.resume_actions);\n rootCtx.execAnyActions(actions);\n }\n\n function onPause(): void {\n const actions = rootCtx.getJsonWithVars(json.pause_actions);\n rootCtx.execAnyActions(actions);\n }\n\n function onWaiting(): void {\n const actions = rootCtx.getJsonWithVars(json.buffering_actions);\n rootCtx.execAnyActions(actions);\n }\n\n function onError(): void {\n const actions = rootCtx.getJsonWithVars(json.fatal_actions);\n rootCtx.execAnyActions(actions);\n }\n\n onDestroy(() => {\n if (json.id && !hasError && !layoutParams?.fakeElement) {\n rootCtx.unregisterInstance(json.id);\n }\n });\n</script>\n\n{#if !hasError}\n <Outer\n cls={css.video}\n customActions={'video'}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n >\n <!-- svelte-ignore a11y-media-has-caption -->\n <video\n bind:this={videoElem}\n class={css.video__video}\n playsinline\n {loop}\n {autoplay}\n {muted}\n {poster}\n on:timeupdate={onTimeUpdate}\n on:ended={onEnd}\n on:playing={onPlaying}\n on:pause={onPause}\n on:waiting={onWaiting}\n on:error={onError}\n >\n {#each sources as source}\n <source src={source.src} type={source.type} on:error={onError}>\n {/each}\n </video>\n </Outer>\n{/if}\n","import type { MaybeMissing } from '../expressions/json';\nimport type { VideoSource } from '../types/video';\n\nexport interface PreparedVideoSource {\n src: string;\n type?: string;\n}\n\nexport function correctVideoSource(\n data: MaybeMissing<VideoSource>[] | undefined,\n defaultValue: PreparedVideoSource[]\n): PreparedVideoSource[] {\n if (Array.isArray(data) && data.length) {\n return data.filter(it => {\n return it?.type === 'video_source' && typeof it.url === 'string' && typeof it.mime_type === 'string';\n }).map(it => {\n const res: PreparedVideoSource = {\n src: it.url as string\n };\n\n if (it.mime_type) {\n res.type = it.mime_type;\n }\n\n return res;\n });\n }\n\n return defaultValue;\n}\n","import { SvelteComponent } from 'svelte';\nimport Text from './text/Text.svelte';\nimport Container from './container/Container.svelte';\nimport Separator from './separator/Separator.svelte';\nimport Image from './image/Image.svelte';\nimport Grid from './grid/Grid.svelte';\nimport Gallery from './gallery/Gallery.svelte';\nimport Tabs from './tabs/Tabs.svelte';\nimport State from './state/State.svelte';\nimport Pager from './pager/Pager.svelte';\nimport Indicator from './indicator/Indicator.svelte';\nimport Slider from './slider/Slider.svelte';\nimport Input from './input/Input.svelte';\nimport Select from './select/Select.svelte';\nimport Video from './video/Video.svelte';\n\nexport const TYPE_MAP: Record<string, typeof SvelteComponent> = {};\n\nif (process.env.ENABLE_COMPONENT_TEXT || process.env.ENABLE_COMPONENT_TEXT === undefined) {\n TYPE_MAP.text = Text;\n}\n\nif (process.env.ENABLE_COMPONENT_CONTAINER || process.env.ENABLE_COMPONENT_CONTAINER === undefined) {\n TYPE_MAP.container = Container;\n}\n\nif (process.env.ENABLE_COMPONENT_SEPARATOR || process.env.ENABLE_COMPONENT_SEPARATOR === undefined) {\n TYPE_MAP.separator = Separator;\n}\n\nif (process.env.ENABLE_COMPONENT_IMAGE || process.env.ENABLE_COMPONENT_IMAGE === undefined) {\n TYPE_MAP.image = Image;\n}\n\nif (process.env.ENABLE_COMPONENT_GIF || process.env.ENABLE_COMPONENT_GIF === undefined) {\n TYPE_MAP.gif = Image;\n}\n\nif (process.env.ENABLE_COMPONENT_GRID || process.env.ENABLE_COMPONENT_GRID === undefined) {\n TYPE_MAP.grid = Grid;\n}\n\nif (process.env.ENABLE_COMPONENT_GALLERY || process.env.ENABLE_COMPONENT_GALLERY === undefined) {\n TYPE_MAP.gallery = Gallery;\n}\n\nif (process.env.ENABLE_COMPONENT_TABS || process.env.ENABLE_COMPONENT_TABS === undefined) {\n TYPE_MAP.tabs = Tabs;\n}\n\nif (process.env.ENABLE_COMPONENT_STATE || process.env.ENABLE_COMPONENT_STATE === undefined) {\n TYPE_MAP.state = State;\n}\n\nif (process.env.ENABLE_COMPONENT_PAGER || process.env.ENABLE_COMPONENT_PAGER === undefined) {\n TYPE_MAP.pager = Pager;\n}\n\nif (process.env.ENABLE_COMPONENT_INDICATOR || process.env.ENABLE_COMPONENT_INDICATOR === undefined) {\n TYPE_MAP.indicator = Indicator;\n}\n\nif (process.env.ENABLE_COMPONENT_SLIDER || process.env.ENABLE_COMPONENT_SLIDER === undefined) {\n TYPE_MAP.slider = Slider;\n}\n\nif (process.env.ENABLE_COMPONENT_INPUT || process.env.ENABLE_COMPONENT_INPUT === undefined) {\n TYPE_MAP.input = Input;\n}\n\nif (process.env.ENABLE_COMPONENT_SELECT || process.env.ENABLE_COMPONENT_SELECT === undefined) {\n TYPE_MAP.select = Select;\n}\n\nif (process.env.ENABLE_COMPONENT_VIDEO || process.env.ENABLE_COMPONENT_VIDEO === undefined) {\n TYPE_MAP.video = Video;\n}\n","<script lang=\"ts\">\n import { getContext } from 'svelte';\n import type { SvelteComponent } from 'svelte';\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivBaseData } from '../../types/base';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { wrapError } from '../../utils/wrapError';\n import { TYPE_MAP } from '../typeMap';\n\n export let div: DivBaseData;\n export let templateContext: TemplateContext;\n export let origJson: DivBaseData | DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n let childJson: DivBaseData;\n let childContext: TemplateContext;\n\n let component: typeof SvelteComponent | undefined;\n\n $: {\n childJson = div;\n childContext = templateContext;\n\n component = childJson && TYPE_MAP[childJson.type] || undefined;\n\n if (!component) {\n ({\n templateContext: childContext,\n json: childJson\n } = rootCtx.processTemplate(childJson, childContext));\n\n component = childJson && TYPE_MAP[childJson.type] || undefined;\n if (!component) {\n let error: string;\n if (childJson?.type && rootCtx.hasTemplate(childJson.type)) {\n error = 'Recursive template';\n } else {\n error = 'Unknown component';\n }\n\n rootCtx.logError(wrapError(new Error(error), {\n additional: {\n component: childJson?.type || '<missing>'\n }\n }));\n }\n }\n }\n</script>\n\n{#if component}\n <svelte:component this={component} json={childJson} templateContext={childContext} {layoutParams} origJson={origJson || div} />\n{/if}\n","<script lang=\"ts\">\n import css from './RootSvgFilters.module.css';\n\n export let svgFiltersMap: Record<string, string>;\n</script>\n\n{#if Object.keys(svgFiltersMap).length}\n <svg\n class={css['root-svg-filters']}\n aria-hidden=\"true\"\n >\n <defs>\n {#each [...Object.keys(svgFiltersMap)] as filterKey}\n {@const [filterColor, filterMode] = filterKey.split(':')}\n <filter id={svgFiltersMap[filterKey]}>\n <feFlood flood-color={filterColor} />\n\n {#if filterMode === 'source_in' || filterMode === 'source_atop'}\n <feComposite in2=\"SourceGraphic\" operator={filterMode.split('_')[1]} />\n {:else if filterMode === 'multiply'}\n <feComposite in2=\"SourceGraphic\" operator=\"arithmetic\" k1=\"1\" k2=\"0\" k3=\"0\" k4=\"0\" />\n {:else}\n <feBlend in2=\"SourceGraphic\" mode={filterMode} />\n {/if}\n </filter>\n {/each}\n </defs>\n </svg>\n{/if}\n","// extracted by mini-css-extract-plugin\nexport default {\"root-svg-filters\":\"divkit-dc22b\"};","import { wrapError, WrappedError } from './wrapError';\nimport type { DivBase, TemplateContext } from '../../typings/common';\nimport type { DivBaseData } from '../types/base';\n\nexport function applyTemplate<T extends DivBase>(\n json: T,\n templateContext: TemplateContext,\n templates: Record<string, unknown>,\n logError: (error: WrappedError) => void\n): {\n json: T;\n templateContext: TemplateContext;\n};\nexport function applyTemplate(\n json: DivBaseData,\n templateContext: TemplateContext,\n templates: Record<string, unknown>,\n logError: (error: WrappedError) => void\n): {\n json: DivBaseData;\n templateContext: TemplateContext;\n} {\n const template = templates[json.type];\n\n if (!template) {\n logError(wrapError(new Error('No such template'), {\n additional: {\n template: json.type\n }\n }));\n\n return {\n json,\n templateContext\n };\n }\n\n let i;\n const newContext: TemplateContext = {};\n\n for (i in templateContext) {\n if (templateContext.hasOwnProperty(i)) {\n newContext[i] = templateContext[i];\n }\n }\n\n for (i in json) {\n if (i === 'type' || i === '__proto__') {\n continue;\n }\n\n if (json.hasOwnProperty(i)) {\n newContext[i] = json[i as keyof typeof json];\n }\n }\n\n function copyTemplated(base: any, extender: any) {\n const keys = Object.keys(extender).filter(key => key !== '__proto__');\n const simpleKeys = keys.filter(key => key.charAt(0) !== '$');\n const templateKeys = keys.filter(key => key.charAt(0) === '$');\n\n simpleKeys.forEach(key => {\n const item = extender[key];\n\n if (typeof item === 'object' && item !== null) {\n base[key] = Array.isArray(item) ? [] : {};\n copyTemplated(base[key], item);\n } else {\n base[key] = item;\n }\n });\n\n templateKeys.forEach(key => {\n const item = extender[key];\n\n const val = newContext[item];\n\n if (val !== undefined) {\n const prop = key.substring(1);\n base[prop] = val;\n }\n });\n\n return base;\n }\n\n const newJson = copyTemplated({}, template);\n\n for (i in json) {\n if (i === 'type' || i === '__proto__') {\n continue;\n }\n\n if (json.hasOwnProperty(i)) {\n newJson[i] = json[i as keyof typeof json];\n }\n }\n\n return {\n json: newJson,\n templateContext: newContext\n };\n}\n","import type { Readable } from 'svelte/types/runtime/store';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction voidUnsubscribe() {\n}\n\nexport function constStore<T>(val: T): Readable<T> {\n return {\n subscribe(cb) {\n cb(val);\n return voidUnsubscribe;\n }\n };\n}\n","// Generated by Peggy 3.0.2.\n//\n// https://peggyjs.org/\n\n\n import { MAX_INT, MIN_INT } from './const';\n import { toBigInt } from './bigint';\n\n function buildBinaryExpression(head, tail) {\n return tail.reduce((result, element) => {\n return {\n type: 'BinaryExpression',\n operator: element[1],\n left: result,\n right: element[3]\n };\n }, head);\n }\n\n function buildLogicalExpression(head, tail) {\n return tail.reduce((result, element) => {\n return {\n type: 'LogicalExpression',\n operator: element[1],\n left: result,\n right: element[3]\n };\n }, head);\n }\n\n function buildString(list) {\n if (list.every(it => typeof it === 'string')) {\n return {type: 'StringLiteral', value: list.join('')};\n }\n let res = list.reduce((result, element) => {\n if (typeof element === 'string' && typeof result[result.length - 1] === 'string') {\n result[result.length - 1] += element;\n } else {\n result.push(element);\n }\n return result;\n }, []).reduce((result, element) => {\n if (typeof element === 'string') {\n result.quasis.push({type: 'StringLiteral', value: element});\n } else {\n if (result.quasis.length === result.expressions.length) {\n result.quasis.push({type: 'StringLiteral', value: ''});\n }\n result.expressions.push(element);\n }\n return result;\n }, {\n type: 'TemplateLiteral',\n quasis: [],\n expressions: []\n });\n\n if (res.quasis.length === res.expressions.length) {\n res.quasis.push({type: 'StringLiteral', value: ''});\n }\n\n return res;\n }\n\n function convertToInt64(str) {\n try {\n return toBigInt(str);\n } catch (_err) {\n throw new Error(`Value ${str} can't be converted to Integer type.`);\n }\n }\n\n function escapeChar(char) {\n if (char === \"'\" || char === '\\\\') {\n return char;\n }\n throw new Error('Incorrect string escape');\n }\n\nfunction peg$subclass(child, parent) {\n function C() { this.constructor = child; }\n C.prototype = parent.prototype;\n child.prototype = new C();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n // istanbul ignore next Check is a necessary evil to support older environments\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\nfunction peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) { return str; }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n}\n\npeg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var offset_s = (this.location.source && (typeof this.location.source.offset === \"function\"))\n ? this.location.source.offset(s)\n : s;\n var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", offset_s.line.toString().length, ' ');\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = (last - s.column) || 1;\n str += \"\\n --> \" + loc + \"\\n\"\n + filler + \" |\\n\"\n + offset_s.line + \" | \" + line + \"\\n\"\n + filler + \" | \" + peg$padEnd(\"\", s.column - 1, ' ')\n + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n};\n\npeg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n },\n\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part)\n ? classEscape(part[0]) + \"-\" + classEscape(part[1])\n : classEscape(part);\n });\n\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n\n any: function() {\n return \"any character\";\n },\n\n end: function() {\n return \"end of input\";\n },\n\n other: function(expectation) {\n return expectation.description;\n }\n };\n\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, \"\\\\\\\"\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function classEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\]/g, \"\\\\]\")\n .replace(/\\^/g, \"\\\\^\")\n .replace(/-/g, \"\\\\-\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n var descriptions = expected.map(describeExpectation);\n var i, j;\n\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n\n default:\n return descriptions.slice(0, -1).join(\", \")\n + \", or \"\n + descriptions[descriptions.length - 1];\n }\n }\n\n function describeFound(found) {\n return found ? \"\\\"\" + literalEscape(found) + \"\\\"\" : \"end of input\";\n }\n\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n};\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n\n var peg$startRuleFunctions = { start: peg$parsestart, JsonStringContents: peg$parseJsonStringContents };\n var peg$startRuleFunction = peg$parsestart;\n\n var peg$c0 = \"@{\";\n var peg$c1 = \"}\";\n var peg$c2 = \"@{}\";\n var peg$c3 = \"\\\\\";\n var peg$c4 = \"?\";\n var peg$c5 = \":\";\n var peg$c6 = \"||\";\n var peg$c7 = \"&&\";\n var peg$c8 = \"==\";\n var peg$c9 = \"!=\";\n var peg$c10 = \">=\";\n var peg$c11 = \">\";\n var peg$c12 = \"<=\";\n var peg$c13 = \"<\";\n var peg$c14 = \"+\";\n var peg$c15 = \"-\";\n var peg$c16 = \"/\";\n var peg$c17 = \"*\";\n var peg$c18 = \"%\";\n var peg$c19 = \"!\";\n var peg$c20 = \"(\";\n var peg$c21 = \")\";\n var peg$c22 = \",\";\n var peg$c23 = \"'\";\n var peg$c24 = \".\";\n var peg$c25 = \"e\";\n var peg$c26 = \"E\";\n var peg$c27 = \"true\";\n var peg$c28 = \"false\";\n\n var peg$r0 = /^[^}]/;\n var peg$r1 = /^[^'}]/;\n var peg$r2 = /^[0-9]/;\n var peg$r3 = /^[a-zA-Z_0-9.]/;\n var peg$r4 = /^[a-zA-Z_]/;\n var peg$r5 = /^[ \\t\\r\\n]/;\n\n var peg$e0 = peg$literalExpectation(\"@{\", false);\n var peg$e1 = peg$literalExpectation(\"}\", false);\n var peg$e2 = peg$literalExpectation(\"@{}\", false);\n var peg$e3 = peg$literalExpectation(\"\\\\\", false);\n var peg$e4 = peg$anyExpectation();\n var peg$e5 = peg$classExpectation([\"}\"], true, false);\n var peg$e6 = peg$literalExpectation(\"?\", false);\n var peg$e7 = peg$literalExpectation(\":\", false);\n var peg$e8 = peg$literalExpectation(\"||\", false);\n var peg$e9 = peg$literalExpectation(\"&&\", false);\n var peg$e10 = peg$literalExpectation(\"==\", false);\n var peg$e11 = peg$literalExpectation(\"!=\", false);\n var peg$e12 = peg$literalExpectation(\">=\", false);\n var peg$e13 = peg$literalExpectation(\">\", false);\n var peg$e14 = peg$literalExpectation(\"<=\", false);\n var peg$e15 = peg$literalExpectation(\"<\", false);\n var peg$e16 = peg$literalExpectation(\"+\", false);\n var peg$e17 = peg$literalExpectation(\"-\", false);\n var peg$e18 = peg$literalExpectation(\"/\", false);\n var peg$e19 = peg$literalExpectation(\"*\", false);\n var peg$e20 = peg$literalExpectation(\"%\", false);\n var peg$e21 = peg$literalExpectation(\"!\", false);\n var peg$e22 = peg$literalExpectation(\"(\", false);\n var peg$e23 = peg$literalExpectation(\")\", false);\n var peg$e24 = peg$literalExpectation(\",\", false);\n var peg$e25 = peg$otherExpectation(\"string\");\n var peg$e26 = peg$literalExpectation(\"'\", false);\n var peg$e27 = peg$classExpectation([\"'\", \"}\"], true, false);\n var peg$e28 = peg$otherExpectation(\"integer\");\n var peg$e29 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n var peg$e30 = peg$otherExpectation(\"number\");\n var peg$e31 = peg$literalExpectation(\".\", false);\n var peg$e32 = peg$literalExpectation(\"e\", false);\n var peg$e33 = peg$literalExpectation(\"E\", false);\n var peg$e34 = peg$otherExpectation(\"boolean\");\n var peg$e35 = peg$literalExpectation(\"true\", false);\n var peg$e36 = peg$literalExpectation(\"false\", false);\n var peg$e37 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], \"_\", [\"0\", \"9\"], \".\"], false, false);\n var peg$e38 = peg$otherExpectation(\"identifier\");\n var peg$e39 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], \"_\"], false, false);\n var peg$e40 = peg$otherExpectation(\"whitespace\");\n var peg$e41 = peg$classExpectation([\" \", \"\\t\", \"\\r\", \"\\n\"], false, false);\n\n var peg$f0 = function(expr) { return expr; };\n var peg$f1 = function(list) { return buildString(list); };\n var peg$f2 = function(expr) { return expr; };\n var peg$f3 = function() { return ''; };\n var peg$f4 = function() { return text(); };\n var peg$f5 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n var peg$f6 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n var peg$f7 = function(str) { return str; };\n var peg$f8 = function(char) { return escapeChar(char); };\n var peg$f9 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n var peg$f10 = function(expr, first, second) { return {type: 'ConditionalExpression', test: expr, consequent: first, alternate: second}; };\n var peg$f11 = function(head, tail) { return buildLogicalExpression(head, tail); };\n var peg$f12 = function(head, tail) { return buildLogicalExpression(head, tail); };\n var peg$f13 = function(head, tail) { return buildBinaryExpression(head, tail); };\n var peg$f14 = function(head, tail) { return buildBinaryExpression(head, tail); };\n var peg$f15 = function(head, tail) { return buildBinaryExpression(head, tail); };\n var peg$f16 = function(head, tail) { return buildBinaryExpression(head, tail); };\n var peg$f17 = function(op, expr) { return {type: 'UnaryExpression', operator: op, argument: expr}; };\n var peg$f18 = function(id, args) { return {type: 'CallExpression', callee: id, arguments: args}; };\n var peg$f19 = function(id) { return {type: 'Variable', id}; };\n var peg$f20 = function(expr, list) { return [expr, ...list]; };\n var peg$f21 = function(expr) { return expr; };\n var peg$f22 = function(str) { return str; };\n var peg$f23 = function(list) { return buildString(list); };\n var peg$f24 = function(expr) { return expr; };\n var peg$f25 = function() { return ''; };\n var peg$f26 = function() { return text(); };\n var peg$f27 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n var peg$f28 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n var peg$f29 = function(str) { return str; };\n var peg$f30 = function(char) { return escapeChar(char); };\n var peg$f31 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n var peg$f32 = function() { return {type: 'IntegerLiteral', value: convertToInt64(text())}; };\n var peg$f33 = function() { return {type: 'NumberLiteral', value: parseFloat(text())}; };\n var peg$f34 = function() { return {type: 'NumberLiteral', value: parseFloat(text())}; };\n var peg$f35 = function() { return {type: 'BooleanLiteral', value: true}; };\n var peg$f36 = function() { return {type: 'BooleanLiteral', value: false}; };\n var peg$f37 = function() { return {type: 'Identifier', name: text()}; };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n\n var peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function offset() {\n return peg$savedPos;\n }\n\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: \"literal\", text: text, ignoreCase: ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n }\n\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n\n function peg$otherExpectation(description) {\n return { type: \"other\", description: description };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n\n return details;\n }\n }\n\n function peg$computeLocation(startPos, endPos, offset) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n\n var res = {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n if (offset && peg$source && (typeof peg$source.offset === \"function\")) {\n res.start = peg$source.offset(res.start);\n res.end = peg$source.offset(res.end);\n }\n return res;\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found),\n expected,\n found,\n location\n );\n }\n\n function peg$parsestart() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n s2 = peg$parseExpression();\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n peg$savedPos = s0;\n s0 = peg$f0(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseJsonStringContents() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseJsonStringChar();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseJsonStringChar();\n }\n peg$savedPos = s0;\n s1 = peg$f1(s1);\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseJsonStringChar() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n s3 = peg$parseExpression();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c1;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f2(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 3) === peg$c2) {\n s1 = peg$c2;\n peg$currPos += 3;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f3();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 92) {\n s2 = peg$c3;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s2 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s2 = peg$c0;\n peg$currPos += 2;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = undefined;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f4();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e5); }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e5); }\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f6();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s2 = peg$c0;\n peg$currPos += 2;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f7(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f8(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f9();\n }\n s0 = s1;\n }\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseExpression() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n\n s0 = peg$currPos;\n s1 = peg$parseOr();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 63) {\n s3 = peg$c4;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e6); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n s5 = peg$parseExpression();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 58) {\n s7 = peg$c5;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e7); }\n }\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n s9 = peg$parseExpression();\n if (s9 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f10(s1, s5, s9);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseOr();\n }\n\n return s0;\n }\n\n function peg$parseOr() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseAnd();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c6) {\n s5 = peg$c6;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseAnd();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c6) {\n s5 = peg$c6;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseAnd();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f11(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseAnd() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseEqual();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c7) {\n s5 = peg$c7;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e9); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseEqual();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c7) {\n s5 = peg$c7;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e9); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseEqual();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f12(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseEqual() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseComparison();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c8) {\n s5 = peg$c8;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e10); }\n }\n if (s5 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c9) {\n s5 = peg$c9;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e11); }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseComparison();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c8) {\n s5 = peg$c8;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e10); }\n }\n if (s5 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c9) {\n s5 = peg$c9;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e11); }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseComparison();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f13(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseComparison() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseSum();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c10) {\n s5 = peg$c10;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e12); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 62) {\n s5 = peg$c11;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e13); }\n }\n if (s5 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c12) {\n s5 = peg$c12;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e14); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 60) {\n s5 = peg$c13;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e15); }\n }\n }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseSum();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c10) {\n s5 = peg$c10;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e12); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 62) {\n s5 = peg$c11;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e13); }\n }\n if (s5 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c12) {\n s5 = peg$c12;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e14); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 60) {\n s5 = peg$c13;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e15); }\n }\n }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseSum();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f14(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseSum() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseFactor();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 43) {\n s5 = peg$c14;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s5 = peg$c15;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseFactor();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 43) {\n s5 = peg$c14;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s5 = peg$c15;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseFactor();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f15(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseFactor() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseUnary();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 47) {\n s5 = peg$c16;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e18); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 42) {\n s5 = peg$c17;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e19); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 37) {\n s5 = peg$c18;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e20); }\n }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseUnary();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 47) {\n s5 = peg$c16;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e18); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 42) {\n s5 = peg$c17;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e19); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 37) {\n s5 = peg$c18;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e20); }\n }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseUnary();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f16(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseUnary() {\n var s0, s1, s2, s3;\n\n s0 = peg$parseNumber();\n if (s0 === peg$FAILED) {\n s0 = peg$parseInteger();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 33) {\n s1 = peg$c19;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e21); }\n }\n if (s1 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 43) {\n s1 = peg$c14;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n if (s1 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n s3 = peg$parseUnary();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseCall();\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseCall() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 40) {\n s3 = peg$c20;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e22); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n s5 = peg$parseArguments();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 41) {\n s7 = peg$c21;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e23); }\n }\n if (s7 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f18(s1, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f19(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$parsePrimaryExpression();\n }\n }\n\n return s0;\n }\n\n function peg$parseArguments() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseExpression();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c22;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e24); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseExpression();\n if (s7 !== peg$FAILED) {\n s3 = s7;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c22;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e24); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseExpression();\n if (s7 !== peg$FAILED) {\n s3 = s7;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f20(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parse_();\n }\n\n return s0;\n }\n\n function peg$parsePrimaryExpression() {\n var s0, s1, s2, s3;\n\n s0 = peg$parseString();\n if (s0 === peg$FAILED) {\n s0 = peg$parseNumber();\n if (s0 === peg$FAILED) {\n s0 = peg$parseInteger();\n if (s0 === peg$FAILED) {\n s0 = peg$parseBoolean();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 40) {\n s1 = peg$c20;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e22); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseExpression();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s3 = peg$c21;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e23); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f21(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseString() {\n var s0, s1, s2, s3;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 39) {\n s1 = peg$c23;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e26); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseStringContents();\n if (input.charCodeAt(peg$currPos) === 39) {\n s3 = peg$c23;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e26); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f22(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e25); }\n }\n\n return s0;\n }\n\n function peg$parseStringContents() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseStringChar();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseStringChar();\n }\n peg$savedPos = s0;\n s1 = peg$f23(s1);\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseStringChar() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n s3 = peg$parseExpression();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c1;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f24(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 3) === peg$c2) {\n s1 = peg$c2;\n peg$currPos += 3;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f25();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 92) {\n s2 = peg$c3;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s2 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 39) {\n s2 = peg$c23;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e26); }\n }\n if (s2 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s2 = peg$c0;\n peg$currPos += 2;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = undefined;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f26();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e27); }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e27); }\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f27();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f28();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s2 = peg$c0;\n peg$currPos += 2;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f29(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f30(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f31();\n }\n s0 = s1;\n }\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseInteger() {\n var s0, s1, s2, s3;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f32();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e28); }\n }\n\n return s0;\n }\n\n function peg$parseNumber() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n }\n if (input.charCodeAt(peg$currPos) === 46) {\n s3 = peg$c24;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e31); }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s5 !== peg$FAILED) {\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n }\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 101) {\n s6 = peg$c25;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e32); }\n }\n if (s6 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 69) {\n s6 = peg$c26;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e33); }\n }\n }\n if (s6 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 43) {\n s7 = peg$c14;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n if (s7 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s7 = peg$c15;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n }\n if (s7 === peg$FAILED) {\n s7 = null;\n }\n s8 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s9 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s9 !== peg$FAILED) {\n while (s9 !== peg$FAILED) {\n s8.push(s9);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s9 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n }\n } else {\n s8 = peg$FAILED;\n }\n if (s8 !== peg$FAILED) {\n s6 = [s6, s7, s8];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f33();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 101) {\n s3 = peg$c25;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e32); }\n }\n if (s3 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 69) {\n s3 = peg$c26;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e33); }\n }\n }\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 43) {\n s4 = peg$c14;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n if (s4 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s4 = peg$c15;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n }\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n s5 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s6 !== peg$FAILED) {\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n }\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f34();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e30); }\n }\n\n return s0;\n }\n\n function peg$parseBoolean() {\n var s0, s1;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c27) {\n s1 = peg$c27;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e35); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f35();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c28) {\n s1 = peg$c28;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e36); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f36();\n }\n s0 = s1;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e34); }\n }\n\n return s0;\n }\n\n function peg$parseReservedWord() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c27) {\n s1 = peg$c27;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e35); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c28) {\n s1 = peg$c28;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e36); }\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n peg$silentFails++;\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e37); }\n }\n peg$silentFails--;\n if (s3 === peg$FAILED) {\n s2 = undefined;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseIdentifier() {\n var s0, s1, s2, s3, s4;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n s2 = peg$parseReservedWord();\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = undefined;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (peg$r4.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e39); }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e37); }\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e37); }\n }\n }\n peg$savedPos = s0;\n s0 = peg$f37();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e38); }\n }\n\n return s0;\n }\n\n function peg$parse_() {\n var s0, s1;\n\n peg$silentFails++;\n s0 = [];\n if (peg$r5.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e41); }\n }\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$r5.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e41); }\n }\n }\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e40); }\n\n return s0;\n }\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length\n ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n}\n\nexport {\n peg$SyntaxError as SyntaxError,\n\n peg$parse as parse\n};\n","import type { EvalTypes, EvalValue } from '../eval';\nimport type { EvalContext } from '../eval';\n\nexport type FuncArg = EvalTypes | {\n type: EvalTypes;\n isVararg?: boolean;\n}\n\nexport interface Func {\n args: FuncArg[];\n cb(ctx: EvalContext, ...args: EvalValue[]): EvalValue;\n}\n\nexport const funcs: Map<string, Func[]> = new Map();\nexport const funcByArgs: Map<string, Func> = new Map();\n\ntype FuncMatchError = {\n type: 'mismatch';\n expected: EvalTypes;\n found: EvalTypes;\n} | {\n type: 'few';\n expected: number;\n found: number;\n} | {\n type: 'many';\n expected: number;\n found: number;\n} | {\n type: 'missing';\n};\n\n// no args\nexport function registerFunc(name: string, args: [], cb: (ctx?: EvalContext) => EvalValue): void;\n// one specific arg\nexport function registerFunc<\n A0 extends EvalTypes\n>(\n name: string,\n args: [A0],\n cb: (\n ctx: EvalContext,\n arg0: Extract<EvalValue, { type: A0 }>\n ) => EvalValue\n): void;\n// two specific args\nexport function registerFunc<\n A0 extends EvalTypes,\n A1 extends EvalTypes\n>(\n name: string,\n args: [A0, A1],\n cb: (\n ctx: EvalContext,\n arg0: Extract<EvalValue, { type: A0 }>,\n arg1: Extract<EvalValue, { type: A1 }>\n ) => EvalValue\n): void;\n// three specific args\nexport function registerFunc<\n A0 extends EvalTypes,\n A1 extends EvalTypes,\n A2 extends EvalTypes\n>(\n name: string,\n args: [A0, A1, A2],\n cb: (\n ctx: EvalContext,\n arg0: Extract<EvalValue, { type: A0 }>,\n arg1: Extract<EvalValue, { type: A1 }>,\n arg2: Extract<EvalValue, { type: A2 }>\n ) => EvalValue\n): void;\n// any args\nexport function registerFunc(\n name: string,\n args: FuncArg[],\n cb: (ctx: EvalContext, ...args: any[]) => EvalValue\n): void;\n\nexport function registerFunc(\n name: string,\n args: FuncArg[],\n cb: (ctx: EvalContext, ...args: EvalValue[]) => EvalValue\n): void {\n const desc: Func = {\n args,\n cb\n };\n\n const arr = funcs.get(name) || [];\n\n if (!funcs.has(name)) {\n funcs.set(name, arr);\n }\n arr.push(desc);\n\n const funcKey = name + ':' + args.map(it => {\n if (typeof it === 'object') {\n return it.type;\n }\n return it;\n }).join('#');\n\n funcByArgs.set(funcKey, desc);\n}\n\nfunction matchFuncArgs(func: Func, args: EvalValue[]): {\n type: 'match';\n} | FuncMatchError {\n let minArgs = func.args.length;\n let maxArgs = func.args.length;\n const lastArg = func.args[func.args.length - 1];\n\n if (typeof lastArg === 'object' && lastArg.isVararg) {\n --minArgs;\n maxArgs = Infinity;\n }\n\n if (args.length < minArgs) {\n return {\n type: 'few',\n expected: minArgs,\n found: args.length\n };\n } else if (args.length > maxArgs) {\n return {\n type: 'many',\n expected: maxArgs,\n found: args.length\n };\n }\n\n for (let i = 0; i < args.length; ++i) {\n let funcArg = i >= func.args.length ? func.args[func.args.length - 1] : func.args[i];\n if (typeof funcArg !== 'object') {\n funcArg = {\n type: funcArg\n };\n }\n\n if (funcArg.type !== args[i].type) {\n return {\n type: 'mismatch',\n expected: funcArg.type,\n found: args[i].type\n };\n }\n }\n\n return {\n type: 'match'\n };\n}\n\nexport function findBestMatchedFunc(funcName: string, args: EvalValue[]): Func | FuncMatchError {\n const list = funcs.get(funcName);\n if (!list) {\n return {\n type: 'missing'\n };\n }\n\n let firstError: FuncMatchError | null = null;\n for (let i = 0; i < list.length; ++i) {\n const match = matchFuncArgs(list[i], args);\n if (match.type === 'match') {\n return list[i];\n }\n if (!firstError) {\n firstError = match;\n }\n }\n\n if (!firstError) {\n throw new Error('Missing function');\n }\n\n return firstError;\n}\n","import { Node } from './ast';\n\nexport function walk(ast: Node, visitors: {\n [Type in Node['type']]?: (node: Extract<Node, { type: Type }>) => void;\n}): void {\n visitors[ast.type]?.(ast as any);\n\n switch (ast.type) {\n case 'TemplateLiteral':\n ast.expressions.forEach(item => {\n walk(item, visitors);\n });\n break;\n case 'BinaryExpression':\n case 'LogicalExpression':\n walk(ast.left, visitors);\n walk(ast.right, visitors);\n break;\n case 'UnaryExpression':\n walk(ast.argument, visitors);\n break;\n case 'ConditionalExpression':\n walk(ast.test, visitors);\n walk(ast.consequent, visitors);\n walk(ast.alternate, visitors);\n break;\n case 'CallExpression':\n ast.arguments.forEach(item => {\n walk(item, visitors);\n });\n break;\n }\n}\n","import type { EvalContext, EvalValue, EvalValueBase } from './eval';\nimport type { Node, Variable } from './ast';\nimport type { EvalTypes } from './eval';\nimport type { VariablesMap } from './eval';\nimport { walk } from './walk';\nimport { parseColor, ParsedColor } from '../utils/correctColor';\nimport { padLeft } from '../utils/padLeft';\nimport { hasBigInt, MAX_INT, MIN_INT, toBigInt } from './bigint';\n\nexport function valToInternal(val: EvalValue): EvalValue {\n if (val.type === 'url' || val.type === 'color') {\n return {\n type: 'string',\n value: val.value\n };\n }\n\n return val;\n}\n\nexport function dateToString(date: Date): string {\n return date\n .toISOString()\n .replace('T', ' ')\n .replace(/\\.\\d{3}Z$/, '');\n}\n\nexport function valToString(val: EvalValue): string {\n if (val.type === 'string') {\n return val.value;\n } else if (val.type === 'integer') {\n return String(val.value);\n } else if (val.type === 'number') {\n let res = String(val.value);\n\n if (!res.includes('.')) {\n if (res.includes('e')) {\n res = res.replace('e', '.0e');\n } else {\n res += '.0';\n }\n }\n\n res = res.replace(/e\\+?/i, 'E');\n\n return res;\n } else if (val.type === 'boolean') {\n return val.value ? 'true' : 'false';\n } else if (val.type === 'datetime') {\n return dateToString(val.value);\n } else if (val.type === 'color') {\n return stringifyColor(safeConvertColor(val.value));\n } else if (val.type === 'url') {\n return val.value;\n } else if (val.type === 'dict') {\n return '<dict>';\n }\n\n // For purpose when new eval value types will be added\n throw new Error(`Unexpected type ${(val as EvalValueBase).type}`);\n}\n\nexport function valToPreview(val: EvalValue): string {\n let res = valToString(val);\n\n if (val.type === 'string') {\n res = \"'\" +\n res\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/'/g, '\\\\\\'') +\n \"'\";\n }\n\n return res;\n}\n\nexport function typeToString(type: EvalTypes): string {\n if (type === 'datetime') {\n return 'DateTime';\n }\n return type.charAt(0).toUpperCase() + type.substring(1);\n}\n\nexport function roundInteger(ctx: EvalContext, val: number | bigint): number | bigint {\n if (hasBigInt) {\n return toBigInt(val);\n }\n\n if (val < 0) {\n const res = -Math.floor(-val as number);\n if (res === 0) {\n // -0 => 0\n return 0;\n }\n return res;\n }\n\n return Math.floor(val as number);\n}\n\nexport function checkIntegerOverflow(ctx: EvalContext, val: number | bigint): void {\n if (val < MIN_INT || val > MAX_INT) {\n throw new Error('Integer overflow.');\n }\n\n if (!hasBigInt && (val > Number.MAX_SAFE_INTEGER || val < Number.MIN_SAFE_INTEGER)) {\n ctx.safeIntegerOverflow = true;\n }\n}\n\nexport function gatherVarsFromAst(ast: Node): string[] {\n const res: string[] = [];\n\n walk(ast, {\n Variable(node: Variable): void {\n res.push(node.id.name);\n }\n });\n\n return res;\n}\n\nexport function evalError(msg: string, details: string): never {\n throw new Error(`Failed to evaluate [${msg}]. ${details}`);\n}\n\nexport function containsUnsetVariables(ast: Node, variables: VariablesMap): boolean {\n let result = false;\n\n walk(ast, {\n Variable(node: Variable): void {\n if (!variables.has(node.id.name)) {\n result = true;\n }\n }\n });\n\n return result;\n}\n\nexport function safeConvertColor(color: string): ParsedColor {\n const res = parseColor(color);\n\n if (res) {\n return res;\n }\n\n throw new Error('Unable to convert value to Color, expected format #AARRGGBB.');\n}\n\nexport function stringifyColor(color: ParsedColor): string {\n return `#${[color.a, color.r, color.g, color.b].map(it => {\n if (it < 0 || it > 255) {\n throw new Error('Value out of range 0..1.');\n }\n\n return padLeft(Math.round(it).toString(16), 2);\n }).join('').toUpperCase()}`;\n}\n\nexport function transformColorValue(color: string): string {\n return stringifyColor(safeConvertColor(color));\n}\n","export const MAX_INT32 = 2147483647;\nexport const MIN_INT32 = -2147483648;\n\nexport const MAX_NUMBER = Number.MAX_VALUE;\nexport const MIN_NUMBER = Number.MIN_VALUE;\n\nexport const STRING = 'string';\nexport const INTEGER = 'integer';\nexport const NUMBER = 'number';\nexport const BOOLEAN = 'boolean';\nexport const COLOR = 'color';\nexport const URL = 'url';\nexport const DATETIME = 'datetime';\nexport const DICT = 'dict';\n","import type {\n BooleanValue,\n ColorValue,\n EvalContext,\n EvalValue,\n IntegerValue,\n NumberValue,\n StringValue,\n UrlValue\n} from '../eval';\nimport type { VariableType, VariableValue } from '../variable';\nimport { registerFunc } from './funcs';\nimport { BOOLEAN, COLOR, INTEGER, NUMBER, STRING, URL } from '../const';\nimport { transformColorValue, valToString } from '../utils';\nimport { MAX_INT, MIN_INT, toBigInt } from '../bigint';\n\nfunction toString(\n _ctx: EvalContext,\n arg: IntegerValue | NumberValue | BooleanValue | ColorValue | UrlValue\n): EvalValue {\n return {\n type: STRING,\n value: valToString(arg)\n };\n}\n\n\nfunction toNumber(_ctx: EvalContext, arg: IntegerValue | StringValue): EvalValue {\n const num = Number(arg.value);\n\n if (isNaN(num) || !Number.isFinite(num)) {\n throw new Error('Unable to convert value to Number.');\n }\n\n return {\n type: NUMBER,\n value: num\n };\n}\n\n\nfunction toIntegerNumber(_ctx: EvalContext, arg: NumberValue): EvalValue {\n if (arg.value > MAX_INT || arg.value < MIN_INT) {\n throw new Error('Unable to convert value to Integer.');\n }\n\n const num = arg.value - (arg.value % 1);\n\n return {\n type: INTEGER,\n value: toBigInt(num)\n };\n}\n\nfunction toIntegerString(_ctx: EvalContext, arg: StringValue): EvalValue {\n let num: number | bigint;\n try {\n num = toBigInt(arg.value);\n } catch (err) {\n throw new Error('Unable to convert value to Integer.');\n }\n\n if (\n (typeof num === 'number' && (isNaN(num) || num % 1 !== 0)) ||\n num > MAX_INT ||\n num < MIN_INT\n ) {\n throw new Error('Unable to convert value to Integer.');\n }\n\n return {\n type: INTEGER,\n value: num\n };\n}\n\nfunction toIntegerBoolean(_ctx: EvalContext, arg: BooleanValue): EvalValue {\n return {\n type: INTEGER,\n value: toBigInt(arg.value ? 1 : 0)\n };\n}\n\n\nfunction toBooleanInteger(_ctx: EvalContext, arg: IntegerValue): EvalValue {\n const intVal = Number(arg.value);\n if (intVal !== 1 && intVal !== 0) {\n throw new Error('Unable to convert value to Boolean.');\n }\n\n return {\n type: BOOLEAN,\n value: intVal\n };\n}\n\nfunction toBooleanString(_ctx: EvalContext, arg: StringValue): EvalValue {\n if (arg.value !== 'true' && arg.value !== 'false') {\n throw new Error('Unable to convert value to Boolean.');\n }\n\n return {\n type: BOOLEAN,\n value: arg.value === 'true' ? 1 : 0\n };\n}\n\nfunction toColor(_ctx: EvalContext, arg: StringValue): EvalValue {\n return {\n type: COLOR,\n value: transformColorValue(arg.value)\n };\n}\n\nfunction toUrl(_ctx: EvalContext, arg: StringValue): EvalValue {\n return {\n type: URL,\n value: arg.value\n };\n}\n\nfunction encodeUri(_ctx: EvalContext, str: StringValue): EvalValue {\n try {\n return {\n type: STRING,\n value: encodeURIComponent(str.value)\n };\n } catch (_err) {\n throw new Error('Unable to encodeUri string.');\n }\n}\n\nfunction decodeUri(_ctx: EvalContext, str: StringValue): EvalValue {\n try {\n return {\n type: STRING,\n value: decodeURIComponent(str.value)\n };\n } catch (_err) {\n throw new Error('Unable to decodeUri string.');\n }\n}\n\nfunction getValueForced(\n ctx: EvalContext,\n varName: StringValue,\n fallback: IntegerValue | NumberValue | StringValue | BooleanValue | UrlValue | ColorValue,\n type: VariableType\n): EvalValue {\n const variable = ctx.variables.get(varName.value);\n let value: VariableValue;\n\n if (variable && variable.getType() === type) {\n value = variable.getValue();\n } else {\n value = fallback.value;\n }\n\n if (type === 'color') {\n value = transformColorValue(value as string);\n }\n\n return {\n type,\n // value is synced with type by params\n value: value as any\n };\n}\n\nfunction getValue(\n ctx: EvalContext,\n varName: StringValue,\n fallback: IntegerValue | NumberValue | StringValue | BooleanValue | UrlValue | ColorValue\n): EvalValue {\n return getValueForced(ctx, varName, fallback, fallback.type);\n}\n\nfunction getColorValue(\n ctx: EvalContext,\n varName: StringValue,\n fallback: IntegerValue | NumberValue | StringValue | BooleanValue | UrlValue | ColorValue\n) {\n return getValueForced(ctx, varName, fallback, 'color');\n}\n\nfunction getUrlValue(\n ctx: EvalContext,\n varName: StringValue,\n fallback: IntegerValue | NumberValue | StringValue | BooleanValue | UrlValue | ColorValue\n) {\n return getValueForced(ctx, varName, fallback, 'url');\n}\n\nexport function registerStd(): void {\n registerFunc('toString', [INTEGER], toString);\n registerFunc('toString', [NUMBER], toString);\n registerFunc('toString', [BOOLEAN], toString);\n registerFunc('toString', [COLOR], toString);\n registerFunc('toString', [URL], toString);\n\n registerFunc('toNumber', [INTEGER], toNumber);\n registerFunc('toNumber', [STRING], toNumber);\n\n registerFunc('toInteger', [NUMBER], toIntegerNumber);\n registerFunc('toInteger', [STRING], toIntegerString);\n registerFunc('toInteger', [BOOLEAN], toIntegerBoolean);\n\n registerFunc('toBoolean', [INTEGER], toBooleanInteger);\n registerFunc('toBoolean', [STRING], toBooleanString);\n\n registerFunc('toColor', [STRING], toColor);\n\n registerFunc('toUrl', [STRING], toUrl);\n\n registerFunc('encodeUri', [STRING], encodeUri);\n registerFunc('decodeUri', [STRING], decodeUri);\n\n registerFunc('getIntegerValue', [STRING, INTEGER], getValue);\n registerFunc('getNumberValue', [STRING, NUMBER], getValue);\n registerFunc('getBooleanValue', [STRING, BOOLEAN], getValue);\n registerFunc('getStringValue', [STRING, STRING], getValue);\n registerFunc('getColorValue', [STRING, COLOR], getColorValue);\n registerFunc('getColorValue', [STRING, STRING], getColorValue);\n registerFunc('getUrlValue', [STRING, URL], getUrlValue);\n registerFunc('getUrlValue', [STRING, STRING], getUrlValue);\n}\n","import type { DatetimeValue, EvalContext, EvalValue, IntegerValue } from '../eval';\nimport { registerFunc } from './funcs';\nimport { DATETIME, INTEGER } from '../const';\nimport { valToString } from '../utils';\nimport { toBigInt } from '../bigint';\n\nfunction getMaxDate(date: Date): number {\n const copy = new Date(date);\n\n copy.setUTCMonth(copy.getUTCMonth() + 1);\n copy.setUTCDate(0);\n\n return copy.getUTCDate();\n}\n\nfunction parseUnixTime(_ctx: EvalContext, arg: IntegerValue): EvalValue {\n return {\n type: DATETIME,\n value: new Date(Number(arg.value) * 1000)\n };\n}\n\nfunction nowLocal(): EvalValue {\n return {\n type: DATETIME,\n value: new Date()\n };\n}\n\nfunction addMillis(_ctx: EvalContext, datetime: DatetimeValue, milliseconds: IntegerValue): EvalValue {\n return {\n type: DATETIME,\n value: new Date(datetime.value.getTime() + Number(milliseconds.value))\n };\n}\n\nfunction setYear(_ctx: EvalContext, datetime: DatetimeValue, year: IntegerValue): EvalValue {\n const copy = new Date(datetime.value);\n\n copy.setUTCFullYear(Number(year.value));\n\n return {\n type: DATETIME,\n value: copy\n };\n}\n\nfunction setMonth(_ctx: EvalContext, datetime: DatetimeValue, month: IntegerValue): EvalValue {\n const intVal = Number(month.value);\n\n if (intVal < 1 || intVal > 12) {\n throw new Error(`Expecting month in [1..12], instead got ${intVal}.`);\n }\n\n const copy = new Date(datetime.value);\n copy.setUTCMonth(intVal - 1);\n\n return {\n type: DATETIME,\n value: copy\n };\n}\n\nfunction setDay(_ctx: EvalContext, datetime: DatetimeValue, day: IntegerValue): EvalValue {\n const copy = new Date(datetime.value);\n const intVal = Number(day.value);\n\n if (intVal <= 0 && intVal !== -1 || intVal > getMaxDate(copy)) {\n throw new Error(`Unable to set day ${intVal} for date ${valToString(datetime)}.`);\n }\n\n copy.setUTCDate(intVal === -1 ? 0 : intVal);\n\n return {\n type: DATETIME,\n value: copy\n };\n}\n\nfunction setHours(_ctx: EvalContext, datetime: DatetimeValue, hours: IntegerValue): EvalValue {\n const intVal = Number(hours.value);\n\n if (intVal < 0 || intVal > 23) {\n throw new Error(`Expecting hours in [0..23], instead got ${intVal}.`);\n }\n\n const copy = new Date(datetime.value);\n copy.setUTCHours(intVal);\n\n return {\n type: DATETIME,\n value: copy\n };\n}\n\nfunction setMinutes(_ctx: EvalContext, datetime: DatetimeValue, minutes: IntegerValue): EvalValue {\n const intVal = Number(minutes.value);\n\n if (intVal < 0 || intVal > 59) {\n throw new Error(`Expecting minutes in [0..59], instead got ${intVal}.`);\n }\n\n const copy = new Date(datetime.value);\n\n copy.setUTCMinutes(intVal);\n\n return {\n type: DATETIME,\n value: copy\n };\n}\n\nfunction setSeconds(_ctx: EvalContext, datetime: DatetimeValue, seconds: IntegerValue): EvalValue {\n const intVal = Number(seconds.value);\n\n if (intVal < 0 || intVal > 59) {\n throw new Error(`Expecting seconds in [0..59], instead got ${intVal}.`);\n }\n\n const copy = new Date(datetime.value);\n copy.setUTCSeconds(intVal);\n\n return {\n type: DATETIME,\n value: copy\n };\n}\n\nfunction setMillis(_ctx: EvalContext, datetime: DatetimeValue, millis: IntegerValue): EvalValue {\n const intVal = Number(millis.value);\n\n if (intVal < 0 || intVal > 999) {\n throw new Error(`Expecting millis in [0..999], instead got ${intVal}.`);\n }\n\n const copy = new Date(datetime.value);\n copy.setUTCMilliseconds(intVal);\n\n return {\n type: DATETIME,\n value: copy\n };\n}\n\nconst getter = (\n method: 'getUTCFullYear' | 'getUTCMonth' | 'getUTCDate' | 'getUTCDay' | 'getUTCHours' | 'getUTCMinutes' |\n 'getUTCSeconds' | 'getUTCMilliseconds'\n) => {\n return (_ctx: EvalContext, datetime: DatetimeValue): EvalValue => {\n const copy = new Date(datetime.value.getTime());\n\n let value: number = copy[method]();\n\n if (method === 'getUTCMonth') {\n ++value;\n } else if (method === 'getUTCDay' && value === 0) {\n value = 7;\n }\n\n return {\n type: INTEGER,\n value: toBigInt(value)\n };\n };\n};\n\nconst getYear = getter('getUTCFullYear');\nconst getMonth = getter('getUTCMonth');\nconst getDay = getter('getUTCDate');\nconst getDayOfWeek = getter('getUTCDay');\nconst getHours = getter('getUTCHours');\nconst getMinutes = getter('getUTCMinutes');\nconst getSeconds = getter('getUTCSeconds');\nconst getMillis = getter('getUTCMilliseconds');\n\nexport function registerDatetime(): void {\n registerFunc('parseUnixTime', [INTEGER], parseUnixTime);\n registerFunc('nowLocal', [], nowLocal);\n registerFunc('addMillis', [DATETIME, INTEGER], addMillis);\n\n registerFunc('setYear', [DATETIME, INTEGER], setYear);\n registerFunc('setMonth', [DATETIME, INTEGER], setMonth);\n registerFunc('setDay', [DATETIME, INTEGER], setDay);\n registerFunc('setHours', [DATETIME, INTEGER], setHours);\n registerFunc('setMinutes', [DATETIME, INTEGER], setMinutes);\n registerFunc('setSeconds', [DATETIME, INTEGER], setSeconds);\n registerFunc('setMillis', [DATETIME, INTEGER], setMillis);\n\n registerFunc('getYear', [DATETIME], getYear);\n registerFunc('getMonth', [DATETIME], getMonth);\n registerFunc('getDay', [DATETIME], getDay);\n registerFunc('getDayOfWeek', [DATETIME], getDayOfWeek);\n registerFunc('getHours', [DATETIME], getHours);\n registerFunc('getMinutes', [DATETIME], getMinutes);\n registerFunc('getSeconds', [DATETIME], getSeconds);\n registerFunc('getMillis', [DATETIME], getMillis);\n}\n","import type { EvalContext, EvalValue, IntegerValue, StringValue } from '../eval';\nimport { registerFunc } from './funcs';\nimport { BOOLEAN, INTEGER, STRING } from '../const';\nimport { escapeRegExp } from '../../utils/escapeRegExp';\nimport { valToString } from '../utils';\nimport { wrapError } from '../../utils/wrapError';\nimport { toBigInt } from '../bigint';\n\nfunction len(_ctx: EvalContext, arg: StringValue): EvalValue {\n return {\n type: INTEGER,\n value: toBigInt(arg.value.length)\n };\n}\n\nfunction contains(_ctx: EvalContext, wholeStr: StringValue, partStr: StringValue): EvalValue {\n return {\n type: BOOLEAN,\n value: wholeStr.value.includes(partStr.value) ? 1 : 0\n };\n}\n\nfunction substring(_ctx: EvalContext, str: StringValue, start: IntegerValue, end: IntegerValue): EvalValue {\n if (end.value < start.value) {\n throw new Error('Indexes should be in ascending order.');\n }\n\n if (\n start.value < 0 || start.value > str.value.length ||\n end.value < 0 || end.value > str.value.length\n ) {\n throw new Error('Indexes are out of bounds.');\n }\n\n return {\n type: STRING,\n value: str.value.substring(Number(start.value), Number(end.value))\n };\n}\n\nfunction replaceAll(_ctx: EvalContext, str: StringValue, what: StringValue, replacer: StringValue): EvalValue {\n let res: string;\n\n if (what.value) {\n res = str.value.replace(new RegExp(escapeRegExp(what.value), 'g'), replacer.value);\n } else {\n // empty str\n res = str.value;\n }\n\n return {\n type: STRING,\n value: res\n };\n}\n\nfunction index(_ctx: EvalContext, str: StringValue, what: StringValue): EvalValue {\n return {\n type: INTEGER,\n value: toBigInt(str.value.indexOf(what.value))\n };\n}\n\nfunction lastIndex(_ctx: EvalContext, str: StringValue, what: StringValue): EvalValue {\n return {\n type: INTEGER,\n value: toBigInt(str.value.lastIndexOf(what.value))\n };\n}\n\nfunction trim(_ctx: EvalContext, str: StringValue): EvalValue {\n return {\n type: STRING,\n value: str.value.trim()\n };\n}\n\nfunction trimLeft(_ctx: EvalContext, str: StringValue): EvalValue {\n return {\n type: STRING,\n value: str.value.replace(/^\\s+/, '')\n };\n}\n\nfunction trimRight(_ctx: EvalContext, str: StringValue): EvalValue {\n return {\n type: STRING,\n value: str.value.replace(/\\s+$/, '')\n };\n}\n\nfunction toUpperCase(_ctx: EvalContext, str: StringValue): EvalValue {\n return {\n type: STRING,\n value: str.value.toUpperCase()\n };\n}\n\nfunction toLowerCase(_ctx: EvalContext, str: StringValue): EvalValue {\n return {\n type: STRING,\n value: str.value.toLowerCase()\n };\n}\n\nfunction calcPad(\n ctx: EvalContext,\n val: StringValue | IntegerValue,\n len: IntegerValue,\n pad: StringValue\n): string {\n if (!pad.value.length) {\n ctx.warnings.push(wrapError(new Error('String for padding is empty.'), {\n level: 'warn'\n }));\n return '';\n }\n\n let part = '';\n const str = val.type === STRING ? val.value : valToString(val);\n\n while (part.length + str.length < len.value) {\n part += pad.value;\n }\n if (part.length > 0 && part.length + str.length > len.value) {\n part = part.substring(0, Number(len.value) - Number(str.length));\n }\n\n return part;\n}\n\nfunction padStart(\n ctx: EvalContext,\n val: StringValue | IntegerValue,\n len: IntegerValue,\n pad: StringValue\n): EvalValue {\n const prefix = calcPad(ctx, val, len, pad);\n\n return {\n type: STRING,\n value: prefix + valToString(val)\n };\n}\n\nfunction padEnd(\n ctx: EvalContext,\n val: StringValue | IntegerValue,\n len: IntegerValue,\n pad: StringValue\n): EvalValue {\n const suffix = calcPad(ctx, val, len, pad);\n\n return {\n type: STRING,\n value: valToString(val) + suffix\n };\n}\n\nfunction testRegex(_ctx: EvalContext, str: StringValue, regex: StringValue): EvalValue {\n let re: RegExp;\n try {\n re = new RegExp(regex.value);\n } catch (err) {\n throw new Error('Invalid regular expression.');\n }\n\n return {\n type: BOOLEAN,\n value: re.test(str.value) ? 1 : 0\n };\n}\n\nexport function registerStrings(): void {\n registerFunc('len', [STRING], len);\n registerFunc('contains', [STRING, STRING], contains);\n registerFunc('substring', [STRING, INTEGER, INTEGER], substring);\n registerFunc('replaceAll', [STRING, STRING, STRING], replaceAll);\n registerFunc('index', [STRING, STRING], index);\n registerFunc('lastIndex', [STRING, STRING], lastIndex);\n registerFunc('trim', [STRING], trim);\n registerFunc('trimLeft', [STRING], trimLeft);\n registerFunc('trimRight', [STRING], trimRight);\n registerFunc('toUpperCase', [STRING], toUpperCase);\n registerFunc('toLowerCase', [STRING], toLowerCase);\n registerFunc('padStart', [STRING, INTEGER, STRING], padStart);\n registerFunc('padStart', [INTEGER, INTEGER, STRING], padStart);\n registerFunc('padEnd', [STRING, INTEGER, STRING], padEnd);\n registerFunc('padEnd', [INTEGER, INTEGER, STRING], padEnd);\n registerFunc('testRegex', [STRING, STRING], testRegex);\n}\n","import type { ColorValue, EvalContext, EvalValue, NumberValue, StringValue } from '../eval';\nimport type { ParsedColor } from '../../utils/correctColor';\nimport { registerFunc } from './funcs';\nimport { COLOR, NUMBER, STRING } from '../const';\nimport { safeConvertColor, stringifyColor } from '../utils';\n\nfunction colorGetter(\n field: keyof ParsedColor\n): (_ctx: EvalContext, color: StringValue | ColorValue) => EvalValue {\n return (_vars, color) => {\n const parsed = safeConvertColor(color.value);\n\n return {\n type: NUMBER,\n value: parsed[field] / 255\n };\n };\n}\n\nfunction colorSetter(\n field: keyof ParsedColor\n): (_ctx: EvalContext, color: StringValue | ColorValue, val: NumberValue) => EvalValue {\n return (_vars, color, val) => {\n const parsed = safeConvertColor(color.value);\n\n parsed[field] = val.value * 255;\n\n return {\n type: COLOR,\n value: stringifyColor(parsed)\n };\n };\n}\n\nconst getColorAlpha = colorGetter('a');\nconst getColorRed = colorGetter('r');\nconst getColorGreen = colorGetter('g');\nconst getColorBlue = colorGetter('b');\n\nconst setColorAlpha = colorSetter('a');\nconst setColorRed = colorSetter('r');\nconst setColorGreen = colorSetter('g');\nconst setColorBlue = colorSetter('b');\n\nfunction rgb(_ctx: EvalContext, red: NumberValue, green: NumberValue, blue: NumberValue): EvalValue {\n const parsed: ParsedColor = {\n a: 255,\n r: red.value * 255,\n g: green.value * 255,\n b: blue.value * 255\n };\n\n return {\n type: COLOR,\n value: stringifyColor(parsed)\n };\n}\n\nfunction argb(\n _ctx: EvalContext,\n alpha: NumberValue,\n red: NumberValue,\n green: NumberValue,\n blue: NumberValue\n): EvalValue {\n const parsed: ParsedColor = {\n a: alpha.value * 255,\n r: red.value * 255,\n g: green.value * 255,\n b: blue.value * 255\n };\n\n return {\n type: COLOR,\n value: stringifyColor(parsed)\n };\n}\n\nexport function registerColors(): void {\n registerFunc('getColorAlpha', [STRING], getColorAlpha);\n registerFunc('getColorAlpha', [COLOR], getColorAlpha);\n registerFunc('getColorRed', [STRING], getColorRed);\n registerFunc('getColorRed', [COLOR], getColorRed);\n registerFunc('getColorGreen', [STRING], getColorGreen);\n registerFunc('getColorGreen', [COLOR], getColorGreen);\n registerFunc('getColorBlue', [STRING], getColorBlue);\n registerFunc('getColorBlue', [COLOR], getColorBlue);\n\n registerFunc('setColorAlpha', [STRING, NUMBER], setColorAlpha);\n registerFunc('setColorAlpha', [COLOR, NUMBER], setColorAlpha);\n registerFunc('setColorRed', [STRING, NUMBER], setColorRed);\n registerFunc('setColorRed', [COLOR, NUMBER], setColorRed);\n registerFunc('setColorGreen', [STRING, NUMBER], setColorGreen);\n registerFunc('setColorGreen', [COLOR, NUMBER], setColorGreen);\n registerFunc('setColorBlue', [STRING, NUMBER], setColorBlue);\n registerFunc('setColorBlue', [COLOR, NUMBER], setColorBlue);\n\n registerFunc('rgb', [NUMBER, NUMBER, NUMBER], rgb);\n registerFunc('argb', [NUMBER, NUMBER, NUMBER, NUMBER], argb);\n}\n","import type { EvalContext, EvalValue, IntegerValue } from '../eval';\nimport { registerFunc } from './funcs';\nimport { INTEGER } from '../const';\nimport { toBigInt } from '../bigint';\nimport { checkIntegerOverflow } from '../utils';\n\nfunction getDuration(ctx: EvalContext, milliseconds: IntegerValue, delimiter: number, whole?: number): EvalValue {\n if (milliseconds.value < 0) {\n throw new Error('Expecting non-negative number of milliseconds.');\n }\n\n let val: number | bigint = (toBigInt(milliseconds.value) as bigint) /\n (toBigInt(delimiter) as bigint);\n\n checkIntegerOverflow(ctx, val);\n\n if (typeof val === 'number') {\n val = Math.floor(val);\n }\n\n if (whole) {\n val = (toBigInt(val) as bigint) % (toBigInt(whole) as bigint);\n }\n\n return {\n type: INTEGER,\n value: val\n };\n}\n\nconst MS_IN_SECOND = 1000;\nconst SECONDS_IN_MINUTE = 60;\nconst MS_IN_MINUTE = 1000 * 60;\nconst MINUTES_IN_HOUR = 60;\nconst MS_IN_HOUR = 1000 * 60 * 60;\nconst HOURS_IN_DAY = 24;\nconst MS_IN_DAY = 1000 * 60 * 60 * 24;\nconst MS_IN_WEEK = 1000 * 60 * 60 * 24 * 7;\n\nfunction getIntervalSeconds(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n return getDuration(ctx, milliseconds, MS_IN_SECOND, SECONDS_IN_MINUTE);\n}\n\nfunction getIntervalTotalSeconds(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n return getDuration(ctx, milliseconds, MS_IN_SECOND);\n}\n\nfunction getIntervalMinutes(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n return getDuration(ctx, milliseconds, MS_IN_MINUTE, MINUTES_IN_HOUR);\n}\n\nfunction getIntervalTotalMinutes(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n return getDuration(ctx, milliseconds, MS_IN_MINUTE);\n}\n\nfunction getIntervalHours(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n return getDuration(ctx, milliseconds, MS_IN_HOUR, HOURS_IN_DAY);\n}\n\nfunction getIntervalTotalHours(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n return getDuration(ctx, milliseconds, MS_IN_HOUR);\n}\n\nfunction getIntervalTotalDays(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n return getDuration(ctx, milliseconds, MS_IN_DAY);\n}\n\nfunction getIntervalTotalWeeks(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n return getDuration(ctx, milliseconds, MS_IN_WEEK);\n}\n\nexport function registerInterval(): void {\n registerFunc('getIntervalSeconds', [INTEGER], getIntervalSeconds);\n registerFunc('getIntervalTotalSeconds', [INTEGER], getIntervalTotalSeconds);\n registerFunc('getIntervalMinutes', [INTEGER], getIntervalMinutes);\n registerFunc('getIntervalTotalMinutes', [INTEGER], getIntervalTotalMinutes);\n registerFunc('getIntervalHours', [INTEGER], getIntervalHours);\n registerFunc('getIntervalTotalHours', [INTEGER], getIntervalTotalHours);\n registerFunc('getIntervalTotalDays', [INTEGER], getIntervalTotalDays);\n registerFunc('getIntervalTotalWeeks', [INTEGER], getIntervalTotalWeeks);\n}\n","import { BOOLEAN, COLOR, DICT, INTEGER, NUMBER, STRING, URL } from '../const';\nimport { BooleanValue, DictValue, EvalContext, EvalTypes, EvalValue, IntegerValue, NumberValue, StringValue } from '../eval';\nimport { checkIntegerOverflow, transformColorValue } from '../utils';\nimport { registerFunc } from './funcs';\n\nfunction getProp(obj: object, path: string[]): unknown {\n let current: object = obj;\n\n for (let i = 0; i < path.length; ++i) {\n if (!current) {\n throw new Error(`Missing property \"${path[i]}\" in the dict.`);\n }\n const val = current[path[i] as keyof typeof current];\n if (val === undefined) {\n throw new Error(`Missing property \"${path[i]}\" in the dict.`);\n }\n current = val;\n }\n\n return current;\n}\n\nfunction dictGetter(jsType: string, runtimeType: string) {\n return (ctx: EvalContext, dict: DictValue, ...path: StringValue[]): EvalValue => {\n let val = getProp(dict.value, path.map(it => it.value));\n\n let type: string = typeof val;\n if (type !== jsType) {\n if (type === 'object') {\n if (Array.isArray(val)) {\n type = 'array';\n } else if (val === null) {\n type = 'null';\n } else {\n type = 'dict';\n }\n }\n throw new Error(`Incorrect value type: expected \"${runtimeType}\", got \"${type}\".`);\n }\n if (jsType === 'number' && runtimeType === 'integer') {\n if (val !== Math.round(val as number)) {\n throw new Error('Cannot convert value to integer.');\n }\n checkIntegerOverflow(ctx, val);\n }\n if (jsType === 'string' && runtimeType === 'color') {\n val = transformColorValue(val as string);\n }\n\n return {\n type: runtimeType,\n value: val\n } as EvalValue;\n };\n}\n\nfunction optWrapper<ValueType extends EvalValue>(\n func: (ctx: EvalContext, dict: DictValue, ...path: StringValue[]) => EvalValue,\n fallbackType: EvalTypes\n) {\n return (ctx: EvalContext, fallback: ValueType, dict: DictValue, ...path: StringValue[]) => {\n try {\n return func(ctx, dict, ...path);\n } catch (_err) {\n // ignore error\n\n let value = fallback.value;\n if (fallbackType === 'color') {\n value = transformColorValue(value as string);\n }\n return {\n type: fallbackType,\n value\n } as unknown as EvalValue;\n }\n };\n}\n\nconst getDictString = dictGetter('string', 'string');\nconst getDictNumber = dictGetter('number', 'number');\nconst getDictInteger = dictGetter('number', 'integer');\nconst getDictBoolean = dictGetter('boolean', 'boolean');\nconst getDictColor = dictGetter('string', 'color');\nconst getDictUrl = dictGetter('string', 'url');\n\nconst getDictOptString = optWrapper<StringValue>(getDictString, 'string');\nconst getDictOptNumber = optWrapper<NumberValue>(getDictNumber, 'number');\nconst getDictOptInteger = optWrapper<IntegerValue>(getDictInteger, 'integer');\nconst getDictOptBoolean = optWrapper<BooleanValue>(getDictBoolean, 'boolean');\nconst getDictOptColor = optWrapper<BooleanValue>(getDictColor, 'color');\nconst getDictOptUrl = optWrapper<BooleanValue>(getDictUrl, 'url');\n\nexport function registerDict(): void {\n registerFunc('getDictString', [\n DICT, {\n type: STRING,\n isVararg: true\n }\n ], getDictString);\n registerFunc('getDictNumber', [\n DICT, {\n type: STRING,\n isVararg: true\n }\n ], getDictNumber);\n registerFunc('getDictInteger', [\n DICT, {\n type: STRING,\n isVararg: true\n }\n ], getDictInteger);\n registerFunc('getDictBoolean', [\n DICT, {\n type: STRING,\n isVararg: true\n }\n ], getDictBoolean);\n registerFunc('getDictColor', [\n DICT, {\n type: STRING,\n isVararg: true\n }\n ], getDictColor);\n registerFunc('getDictUrl', [\n DICT, {\n type: STRING,\n isVararg: true\n }\n ], getDictUrl);\n\n registerFunc('getDictOptString', [\n STRING, DICT, {\n type: STRING,\n isVararg: true\n }\n ], getDictOptString);\n registerFunc('getDictOptNumber', [\n NUMBER, DICT, {\n type: STRING,\n isVararg: true\n }\n ], getDictOptNumber);\n registerFunc('getDictOptInteger', [\n INTEGER, DICT, {\n type: STRING,\n isVararg: true\n }\n ], getDictOptInteger);\n registerFunc('getDictOptBoolean', [\n BOOLEAN, DICT, {\n type: STRING,\n isVararg: true\n }\n ], getDictOptBoolean);\n registerFunc('getDictOptColor', [\n COLOR, DICT, {\n type: STRING,\n isVararg: true\n }\n ], getDictOptColor);\n registerFunc('getDictOptColor', [\n STRING, DICT, {\n type: STRING,\n isVararg: true\n }\n ], getDictOptColor);\n registerFunc('getDictOptUrl', [\n STRING, DICT, {\n type: STRING,\n isVararg: true\n }\n ], getDictOptUrl);\n registerFunc('getDictOptUrl', [\n URL, DICT, {\n type: STRING,\n isVararg: true\n }\n ], getDictOptUrl);\n}\n","/* eslint-disable no-else-return */\n\nimport type {\n BinaryExpression, BooleanLiteral, CallExpression, CompareOperator,\n ConditionalExpression, EqualityOperator, FactorOperator, IntegerLiteral,\n LogicalExpression,\n Node, NumberLiteral, StringLiteral, SumOperator,\n TemplateLiteral,\n UnaryExpression, Variable\n} from './ast';\nimport type { WrappedError } from '../utils/wrapError';\nimport { findBestMatchedFunc, Func, funcByArgs } from './funcs/funcs';\nimport {\n checkIntegerOverflow,\n evalError,\n roundInteger,\n typeToString,\n valToInternal,\n valToPreview,\n valToString\n} from './utils';\nimport { BOOLEAN, DATETIME, INTEGER, NUMBER, STRING } from './const';\nimport { register } from './funcs';\nimport { Variable as VariableInstance, variableToValue } from './variable';\nimport { walk } from './walk';\nimport { toBigInt } from './bigint';\nimport { wrapError } from '../utils/wrapError';\n\nexport type VariablesMap = Map<string, VariableInstance>;\n\nexport type EvalTypes = 'string' | 'number' | 'integer' | 'boolean' | 'color' | 'url' | 'datetime' | 'dict';\n\nexport interface EvalValueBase {\n type: string;\n value: unknown;\n}\n\nexport interface StringValue extends EvalValueBase {\n type: 'string';\n value: string;\n}\n\nexport interface UrlValue extends EvalValueBase {\n type: 'url';\n value: string;\n}\n\nexport interface ColorValue extends EvalValueBase {\n type: 'color';\n value: string;\n}\n\nexport interface NumberValue extends EvalValueBase {\n type: 'number';\n value: number;\n}\n\nexport interface IntegerValue extends EvalValueBase {\n type: 'integer';\n value: number | bigint;\n}\n\nexport interface BooleanValue extends EvalValueBase {\n type: 'boolean';\n value: number;\n}\n\nexport interface DatetimeValue extends EvalValueBase {\n type: 'datetime';\n value: Date;\n}\n\nexport interface DictValue extends EvalValueBase {\n type: 'dict';\n value: object;\n}\n\nexport type EvalValue = StringValue | UrlValue | ColorValue | NumberValue | IntegerValue |\n BooleanValue | DatetimeValue | DictValue;\n\nexport interface EvalError {\n type: 'error';\n value: string;\n}\n\nexport type EvalResult = EvalValue | EvalError;\n\nexport interface EvalContext {\n variables: VariablesMap;\n warnings: WrappedError[];\n safeIntegerOverflow: boolean;\n}\n\nregister();\n\nfunction evalStringLiteral(ctx: EvalContext, expr: StringLiteral): EvalValue {\n return {\n type: STRING,\n value: expr.value\n };\n}\n\nfunction evalNumberLiteral(ctx: EvalContext, expr: NumberLiteral): EvalValue {\n return {\n type: NUMBER,\n value: expr.value\n };\n}\n\nfunction evalIntegerLiteral(ctx: EvalContext, expr: IntegerLiteral): EvalValue {\n checkIntegerOverflow(ctx, expr.value);\n\n return {\n type: INTEGER,\n value: expr.value\n };\n}\n\nfunction evalBooleanLiteral(ctx: EvalContext, expr: BooleanLiteral): EvalValue {\n return {\n type: BOOLEAN,\n value: expr.value ? 1 : 0\n };\n}\n\nfunction evalUnary(ctx: EvalContext, expr: UnaryExpression): EvalValue {\n const val = valToInternal(evalAny(ctx, expr.argument));\n\n switch (expr.operator) {\n case '!':\n if (val.type === BOOLEAN) {\n return {\n type: BOOLEAN,\n value: val.value ? 0 : 1\n };\n } else {\n evalError(`${expr.operator}${valToPreview(val)}`, 'A Boolean is expected after a unary not.');\n }\n case '+':\n case '-':\n const mul = expr.operator === '+' ? 1 : -1;\n\n if (val.type === INTEGER) {\n const value = (val.value as bigint) * (toBigInt(mul) as bigint);\n\n checkIntegerOverflow(ctx, value);\n\n return {\n type: INTEGER,\n value\n };\n } else if (val.type === NUMBER) {\n return {\n type: NUMBER,\n value: val.value * mul\n };\n } else {\n evalError(\n `${expr.operator}${valToPreview(val)}`,\n `A Number is expected after a unary ${expr.operator === '+' ? 'plus' : 'minus'}.`\n );\n }\n }\n}\n\nfunction evalConditional(ctx: EvalContext, expr: ConditionalExpression): EvalValue {\n const test = valToInternal(evalAny(ctx, expr.test));\n if (test.type === BOOLEAN) {\n if (test.value) {\n return evalAny(ctx, expr.consequent);\n } else {\n return evalAny(ctx, expr.alternate);\n }\n } else {\n evalError(\n `${valToPreview(test)} ? ${valToPreview(evalAny(ctx, expr.consequent))} : ${valToPreview(evalAny(ctx, expr.alternate))}`,\n 'Ternary must be called with a Boolean value as a condition.'\n );\n }\n}\n\nfunction evalTemplateLiteral(ctx: EvalContext, expr: TemplateLiteral): EvalValue {\n let result = '';\n\n if (expr.quasis.length === 2 && expr.quasis[0].value === '' && expr.quasis[1].value === '') {\n return evalAny(ctx, expr.expressions[0]);\n }\n\n for (let i = 0; i < expr.expressions.length; ++i) {\n result += expr.quasis[i].value;\n result += valToString(evalAny(ctx, expr.expressions[i]));\n }\n result += expr.quasis[expr.quasis.length - 1].value;\n\n return {\n type: STRING,\n value: result\n };\n}\n\nfunction evalLogicalExpression(ctx: EvalContext, expr: LogicalExpression): EvalValue {\n const left = valToInternal(evalAny(ctx, expr.left));\n if (left.type !== BOOLEAN) {\n evalError(\n `${valToPreview(left)} ${expr.operator} ...`,\n `'${expr.operator}' must be called with boolean operands.`\n );\n }\n\n if (expr.operator === '||' && left.value) {\n return left;\n }\n if (expr.operator === '&&' && !left.value) {\n return {\n type: BOOLEAN,\n value: 0\n };\n }\n\n const right = valToInternal(evalAny(ctx, expr.right));\n if (right.type !== BOOLEAN) {\n evalError(\n `${valToPreview(left)} ${expr.operator} ${valToPreview(right)}`,\n `Operator '${expr.operator}' cannot be applied to different types: Boolean and ${typeToString(right.type)}.`\n );\n }\n\n return {\n type: BOOLEAN,\n value: right.value\n };\n}\n\nfunction evalBinaryEquality<T extends EvalValue>(operator: EqualityOperator, left: T, right: T): EvalValue {\n let res: boolean;\n\n if (left.type === DATETIME && right.type === DATETIME) {\n res = left.value.getTime() === right.value.getTime();\n } else {\n res = left.value === right.value;\n }\n\n if (operator === '!=') {\n res = !res;\n }\n\n return {\n type: BOOLEAN,\n value: res ? 1 : 0\n };\n}\n\nfunction evalBinaryCompare<T extends EvalValue>(operator: CompareOperator, left: T, right: T): EvalValue {\n if (left.type !== NUMBER && left.type !== INTEGER && left.type !== DATETIME) {\n evalError(\n `${valToPreview(left)} ${operator} ${valToPreview(right)}`,\n `Operator '${operator}' cannot be applied to ${typeToString(left.type)} type.`\n );\n }\n\n let res: boolean;\n const leftVal = (left.type === DATETIME ? left.value.getTime() : left.value) as number;\n const rightVal = (right.type === DATETIME ? right.value.getTime() : right.value) as number;\n\n if (operator === '>') {\n res = leftVal > rightVal;\n } else if (operator === '>=') {\n res = leftVal >= rightVal;\n } else if (operator === '<') {\n res = leftVal < rightVal;\n } else {\n res = leftVal <= rightVal;\n }\n\n return {\n type: BOOLEAN,\n value: res ? 1 : 0\n };\n}\n\nfunction evalBinarySum<T extends EvalValue>(ctx: EvalContext, operator: SumOperator, left: T, right: T): EvalValue {\n if (left.type !== STRING && left.type !== NUMBER && left.type !== INTEGER) {\n evalError(\n `${valToPreview(left)} ${operator} ${valToPreview(right)}`,\n `Operator '${operator}' cannot be applied to ${typeToString(left.type)} type.`\n );\n }\n\n if (left.type === STRING) {\n if (operator === '-') {\n evalError(\n `${valToPreview(left)} - ${valToPreview(right)}`,\n `Operator '${operator}' cannot be applied to ${typeToString(left.type)} type.`\n );\n }\n return {\n type: STRING,\n value: left.value + right.value\n };\n }\n\n let res: number | bigint = operator === '+' ?\n (left.value as bigint) + (right.value as bigint) :\n (left.value as bigint) - (right.value as bigint);\n\n // integer\n if (left.type === INTEGER) {\n try {\n res = roundInteger(ctx, res);\n checkIntegerOverflow(ctx, res);\n } catch (err: any) {\n evalError(\n `${valToPreview(left)} ${operator} ${valToPreview(right)}`,\n err.message\n );\n }\n }\n\n return {\n type: left.type,\n value: res as any\n };\n}\n\nfunction evalBinaryFactor<T extends EvalValue>(\n ctx: EvalContext,\n operator: FactorOperator,\n left: T,\n right: T\n): EvalValue {\n if (left.type !== INTEGER && left.type !== NUMBER) {\n evalError(\n `${valToPreview(left)} ${operator} ${valToPreview(right)}`,\n `Operator '${operator}' cannot be applied to ${typeToString(left.type)} type.`\n );\n }\n\n let res: number | bigint;\n if (operator === '*') {\n // bigint | number actually\n res = (left.value as bigint) * (right.value as bigint);\n } else if (operator === '/' || operator === '%') {\n if (Number(right.value) === 0) {\n evalError(\n `${valToPreview(left)} ${operator} ${valToPreview(right)}`,\n 'Division by zero is not supported.'\n );\n }\n if (operator === '/') {\n // bigint | number actually\n res = (left.value as bigint) / (right.value as bigint);\n } else {\n // bigint | number actually\n res = (left.value as bigint) % (right.value as bigint);\n }\n } else {\n throw new Error(`Unsupported operation ${operator}`);\n }\n\n if (left.type === INTEGER) {\n try {\n res = roundInteger(ctx, res);\n checkIntegerOverflow(ctx, res);\n } catch (err: any) {\n evalError(\n `${valToPreview(left)} ${operator} ${valToPreview(right)}`,\n err.message\n );\n }\n }\n\n return {\n type: left.type,\n value: res as any\n };\n}\n\nfunction evalBinaryExpression(ctx: EvalContext, expr: BinaryExpression): EvalValue {\n const operator = expr.operator;\n const left = evalAny(ctx, expr.left);\n const right = evalAny(ctx, expr.right);\n\n if (left.type !== right.type) {\n evalError(\n `${valToPreview(left)} ${expr.operator} ${valToPreview(right)}`,\n `Operator '${operator}' cannot be applied to different types: ${typeToString(left.type)} and ${typeToString(right.type)}.`\n );\n }\n\n if (operator === '==' || operator === '!=') {\n return evalBinaryEquality(operator, left, right);\n } else if (operator === '>' || operator === '>=' || operator === '<' || operator === '<=') {\n return evalBinaryCompare(operator, left, right);\n } else if (operator === '+' || operator === '-') {\n return evalBinarySum(ctx, operator, left, right);\n } else if (operator === '/' || operator === '*' || operator === '%') {\n return evalBinaryFactor(ctx, operator, left, right);\n }\n\n throw new Error(`Unsupported operation ${operator}`);\n}\n\nfunction argsToStr(args: EvalValue[]): string {\n return args.map(valToPreview).join(', ');\n}\n\nfunction evalCallExpression(ctx: EvalContext, expr: CallExpression): EvalValue {\n const funcName = expr.callee.name;\n\n let func: Func | undefined;\n\n const args = expr.arguments.map(arg => evalAny(ctx, arg));\n const funcKey = funcName + ':' + args.map(arg => arg.type).join('#');\n\n if (!funcByArgs.has(funcKey)) {\n const findRes = findBestMatchedFunc(funcName, args);\n if ('expected' in findRes || 'type' in findRes && findRes.type === 'missing') {\n const argsType = args.map(arg => typeToString(arg.type)).join(', ');\n const prefix = `${funcName}(${argsToStr(args)})`;\n\n if (findRes.type === 'few' && args.length === 0) {\n evalError(prefix, `Non empty argument list is required for function '${funcName}'.`);\n } else if (findRes.type === 'many') {\n evalError(prefix, `Function '${funcName}' has no matching override for given argument types: ${argsType}.`);\n } else if (findRes.type === 'few' || findRes.type === 'mismatch') {\n evalError(prefix, `Function '${funcName}' has no matching override for given argument types: ${argsType}.`);\n } else {\n evalError(prefix, `Unknown function name: ${funcName}.`);\n }\n }\n func = findRes;\n } else {\n func = funcByArgs.get(funcKey);\n }\n\n if (!func) {\n throw new Error('Function not found');\n }\n\n try {\n return func.cb(ctx, ...args);\n } catch (err: any) {\n const prefix = `${funcName}(${argsToStr(args)})`;\n evalError(prefix, err.message);\n }\n}\n\nfunction evalVariable(ctx: EvalContext, expr: Variable): EvalValue {\n const varName = expr.id.name;\n const variable = ctx.variables.get(varName);\n\n if (variable) {\n return variableToValue(variable);\n }\n\n throw new Error(`Variable '${varName}' is missing.`);\n}\n\nconst EVAL_MAP = {\n StringLiteral: evalStringLiteral,\n NumberLiteral: evalNumberLiteral,\n IntegerLiteral: evalIntegerLiteral,\n BooleanLiteral: evalBooleanLiteral,\n UnaryExpression: evalUnary,\n ConditionalExpression: evalConditional,\n TemplateLiteral: evalTemplateLiteral,\n LogicalExpression: evalLogicalExpression,\n BinaryExpression: evalBinaryExpression,\n CallExpression: evalCallExpression,\n Variable: evalVariable\n};\n\nexport function evalAny(ctx: EvalContext, expr: Node): EvalValue {\n if (expr.type in EVAL_MAP) {\n return EVAL_MAP[expr.type](ctx, expr as any);\n }\n throw new Error('Unsupported expression');\n}\n\nfunction checkVariables(ctx: EvalContext, expr: Node): void {\n let unknownVariableName = '';\n\n walk(expr, {\n Variable(node) {\n if (!unknownVariableName && !ctx.variables.has(node.id.name)) {\n unknownVariableName = node.id.name;\n }\n }\n });\n\n if (unknownVariableName) {\n throw new Error(`Variable '${unknownVariableName}' is missing.`);\n }\n}\n\nexport function evalExpression(vars: VariablesMap, expr: Node): {\n result: EvalResult;\n warnings: WrappedError[];\n} {\n try {\n const ctx: EvalContext = {\n variables: vars,\n warnings: [],\n safeIntegerOverflow: false\n };\n\n checkVariables(ctx, expr);\n const result = evalAny(ctx, expr);\n\n if (ctx.safeIntegerOverflow) {\n ctx.warnings.push(wrapError(new Error('Safe integer overflow, values may lose accuracy.'), {\n level: 'warn'\n }));\n }\n\n return {\n result,\n warnings: ctx.warnings\n };\n } catch (err: any) {\n return {\n result: {\n type: 'error',\n value: err.message\n },\n warnings: []\n };\n }\n}\n","export function escapeRegExp(str: string): string {\n return str.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\n","import type { EvalContext, EvalValue, IntegerValue, NumberValue } from '../eval';\nimport { registerFunc } from './funcs';\nimport { INTEGER, MAX_NUMBER, MIN_NUMBER, NUMBER } from '../const';\nimport { checkIntegerOverflow, roundInteger } from '../utils';\nimport { absBigInt, bigIntZero, signBigInt, MAX_INT, MIN_INT } from '../bigint';\n\nfunction divInteger(ctx: EvalContext, arg0: IntegerValue, arg1: IntegerValue): EvalValue {\n if (arg1.value === bigIntZero) {\n throw new Error('Division by zero is not supported.');\n }\n\n // bigint | number actually\n let res: number | bigint = (arg0.value as bigint) / (arg1.value as bigint);\n res = roundInteger(ctx, res);\n checkIntegerOverflow(ctx, res);\n\n return {\n type: INTEGER,\n value: res\n };\n}\n\nfunction divNumber(_ctx: EvalContext, arg0: NumberValue, arg1: NumberValue): EvalValue {\n if (arg1.value === 0) {\n throw new Error('Division by zero is not supported.');\n }\n\n const res = arg0.value / arg1.value;\n\n return {\n type: NUMBER,\n value: res\n };\n}\n\nfunction modInteger(ctx: EvalContext, arg0: IntegerValue, arg1: IntegerValue): EvalValue {\n if (arg1.value === bigIntZero) {\n throw new Error('Division by zero is not supported.');\n }\n\n // bigint | number actually\n let res: number | bigint = (arg0.value as bigint) % (arg1.value as bigint);\n res = roundInteger(ctx, res);\n checkIntegerOverflow(ctx, res);\n\n return {\n type: INTEGER,\n value: res\n };\n}\n\nfunction modNumber(_ctx: EvalContext, arg0: NumberValue, arg1: NumberValue): EvalValue {\n if (arg1.value === 0) {\n throw new Error('Division by zero is not supported.');\n }\n\n const res = arg0.value % arg1.value;\n\n return {\n type: NUMBER,\n value: res\n };\n}\n\nfunction mulInteger(ctx: EvalContext, ...args: IntegerValue[]): EvalValue {\n // number | bigint actually\n let res: bigint = (args.length ? args[0].value : bigIntZero) as bigint;\n for (let i = 1; i < args.length; ++i) {\n res *= args[i].value as bigint;\n res = roundInteger(ctx, res) as bigint;\n checkIntegerOverflow(ctx, res);\n }\n\n return {\n type: INTEGER,\n value: res\n };\n}\n\nfunction mulNumber(_ctx: EvalContext, ...args: NumberValue[]): EvalValue {\n let res = args.length ? args[0].value : 0;\n for (let i = 1; i < args.length; ++i) {\n res *= args[i].value;\n }\n\n return {\n type: NUMBER,\n value: res\n };\n}\n\nfunction subInteger(ctx: EvalContext, ...args: IntegerValue[]): EvalValue {\n // number | bigint actually\n let res: bigint = (args.length ? args[0].value : bigIntZero) as bigint;\n for (let i = 1; i < args.length; ++i) {\n res -= args[i].value as bigint;\n res = roundInteger(ctx, res) as bigint;\n checkIntegerOverflow(ctx, res);\n }\n\n return {\n type: INTEGER,\n value: res\n };\n}\n\nfunction subNumber(_ctx: EvalContext, ...args: NumberValue[]): EvalValue {\n let res = args.length ? args[0].value : 0;\n for (let i = 1; i < args.length; ++i) {\n res -= args[i].value;\n }\n\n return {\n type: NUMBER,\n value: res\n };\n}\n\nfunction sumInteger(ctx: EvalContext, ...args: IntegerValue[]): EvalValue {\n // number | bigint actually\n let res = bigIntZero as bigint;\n for (let i = 0; i < args.length; ++i) {\n res += args[i].value as bigint;\n res = roundInteger(ctx, res) as bigint;\n checkIntegerOverflow(ctx, res);\n }\n\n return {\n type: INTEGER,\n value: res\n };\n}\n\nfunction sumNumber(_ctx: EvalContext, ...args: NumberValue[]): EvalValue {\n let res = 0;\n for (let i = 0; i < args.length; ++i) {\n res += args[i].value;\n }\n\n return {\n type: NUMBER,\n value: res\n };\n}\n\nfunction absInteger(ctx: EvalContext, arg: IntegerValue): EvalValue {\n const res = absBigInt(arg.value);\n\n checkIntegerOverflow(ctx, res);\n\n return {\n type: arg.type,\n value: res\n };\n}\n\nfunction absNumber(_ctx: EvalContext, arg: NumberValue): EvalValue {\n const res = Math.abs(arg.value);\n\n return {\n type: NUMBER,\n value: res\n };\n}\n\nfunction maxInt(_ctx: EvalContext, ...args: IntegerValue[]): EvalValue {\n if (!args.length) {\n throw new Error('Non empty argument list is required for function \\'max\\'.');\n }\n\n let max = args[0].value;\n for (let i = 1; i < args.length; ++i) {\n if (args[i].value > max) {\n max = args[i].value;\n }\n }\n\n return {\n type: INTEGER,\n value: max\n };\n}\n\nfunction maxNum(_ctx: EvalContext, ...args: NumberValue[]): EvalValue {\n if (!args.length) {\n throw new Error('Non empty argument list is required for function \\'max\\'.');\n }\n\n return {\n type: NUMBER,\n value: Math.max(...args.map(arg => arg.value))\n };\n}\n\nfunction minInt(_ctx: EvalContext, ...args: IntegerValue[]): EvalValue {\n if (!args.length) {\n throw new Error('Non empty argument list is required for function \\'min\\'.');\n }\n\n let min = args[0].value;\n for (let i = 1; i < args.length; ++i) {\n if (args[i].value < min) {\n min = args[i].value;\n }\n }\n\n return {\n type: INTEGER,\n value: min\n };\n}\n\nfunction minNum(_ctx: EvalContext, ...args: NumberValue[]): EvalValue {\n if (!args.length) {\n throw new Error('Non empty argument list is required for function \\'min\\'.');\n }\n\n return {\n type: NUMBER,\n value: Math.min(...args.map(arg => arg.value))\n };\n}\n\nfunction maxNumber(): EvalValue {\n return {\n type: NUMBER,\n value: MAX_NUMBER\n };\n}\n\nfunction minNumber(): EvalValue {\n return {\n type: NUMBER,\n value: MIN_NUMBER\n };\n}\n\nfunction maxInteger(ctx: EvalContext): EvalValue {\n checkIntegerOverflow(ctx, MAX_INT);\n\n return {\n type: INTEGER,\n value: MAX_INT\n };\n}\n\nfunction minInteger(ctx: EvalContext): EvalValue {\n checkIntegerOverflow(ctx, MIN_INT);\n\n return {\n type: INTEGER,\n value: MIN_INT\n };\n}\n\nfunction round(_ctx: EvalContext, arg: NumberValue): EvalValue {\n const sign = Math.sign(arg.value);\n\n return {\n type: NUMBER,\n // js treats Math.round(-0.5) as 0, which is different to other platforms\n value: sign * Math.round(Math.abs(arg.value))\n };\n}\n\nfunction floor(_ctx: EvalContext, arg: NumberValue): EvalValue {\n return {\n type: NUMBER,\n value: Math.floor(arg.value)\n };\n}\n\nfunction ceil(_ctx: EvalContext, arg: NumberValue): EvalValue {\n return {\n type: NUMBER,\n value: Math.ceil(arg.value)\n };\n}\n\nfunction signumInteger(_ctx: EvalContext, arg: IntegerValue): EvalValue {\n return {\n type: INTEGER,\n value: signBigInt(arg.value)\n };\n}\n\nfunction signumNumber(_ctx: EvalContext, arg: NumberValue): EvalValue {\n return {\n type: NUMBER,\n value: Math.sign(arg.value)\n };\n}\n\nfunction copySignInteger(ctx: EvalContext, arg0: IntegerValue, arg1: IntegerValue): EvalValue {\n let res: number | bigint;\n\n if (arg1.value === bigIntZero) {\n res = arg0.value;\n } else if (arg0.value === bigIntZero) {\n res = 0;\n } else {\n const sign = signBigInt(arg1.value);\n\n // number | bigint actually\n res = (absBigInt(arg0.value) as bigint) * (sign as bigint);\n }\n\n checkIntegerOverflow(ctx, res);\n\n return {\n type: INTEGER,\n value: res\n };\n}\n\nfunction copySignNumber(_ctx: EvalContext, arg0: NumberValue, arg1: NumberValue): EvalValue {\n let sign = Math.sign(arg1.value);\n\n if (sign === 0) {\n sign = Object.is(sign, 0) ? 1 : -1;\n }\n\n const res = Math.abs(arg0.value) * sign;\n\n return {\n type: NUMBER,\n value: res\n };\n}\n\nexport function registerMath(): void {\n registerFunc('div', [INTEGER, INTEGER], divInteger);\n registerFunc('div', [NUMBER, NUMBER], divNumber);\n\n registerFunc('mod', [INTEGER, INTEGER], modInteger);\n registerFunc('mod', [NUMBER, NUMBER], modNumber);\n\n registerFunc('mul', [{\n type: INTEGER,\n isVararg: true\n }], mulInteger);\n registerFunc('mul', [{\n type: NUMBER,\n isVararg: true\n }], mulNumber);\n\n registerFunc('sub', [{\n type: INTEGER,\n isVararg: true\n }], subInteger);\n registerFunc('sub', [{\n type: NUMBER,\n isVararg: true\n }], subNumber);\n\n registerFunc('sum', [{\n type: INTEGER,\n isVararg: true\n }], sumInteger);\n registerFunc('sum', [{\n type: NUMBER,\n isVararg: true\n }], sumNumber);\n\n registerFunc('abs', [INTEGER], absInteger);\n registerFunc('abs', [NUMBER], absNumber);\n\n registerFunc('max', [{\n type: INTEGER,\n isVararg: true\n }], maxInt);\n registerFunc('max', [{\n type: NUMBER,\n isVararg: true\n }], maxNum);\n\n registerFunc('min', [{\n type: INTEGER,\n isVararg: true\n }], minInt);\n registerFunc('min', [{\n type: NUMBER,\n isVararg: true\n }], minNum);\n\n registerFunc('maxNumber', [], maxNumber);\n registerFunc('minNumber', [], minNumber);\n\n registerFunc('maxInteger', [], maxInteger);\n registerFunc('minInteger', [], minInteger);\n\n registerFunc('round', [NUMBER], round);\n registerFunc('floor', [NUMBER], floor);\n registerFunc('ceil', [NUMBER], ceil);\n\n registerFunc('signum', [INTEGER], signumInteger);\n registerFunc('signum', [NUMBER], signumNumber);\n\n registerFunc('copySign', [INTEGER, INTEGER], copySignInteger);\n registerFunc('copySign', [NUMBER, NUMBER], copySignNumber);\n}\n","import type { Node } from './ast';\nimport type { VariableValue } from './variable';\nimport { uniq } from '../utils/uniq';\nimport { parse } from './expressions';\nimport { evalExpression, VariablesMap } from './eval';\nimport { containsUnsetVariables, dateToString, gatherVarsFromAst, stringifyColor } from './utils';\nimport { LogError, wrapError } from '../utils/wrapError';\nimport { parseColor } from '../utils/correctColor';\nimport { MAX_INT32, MIN_INT32 } from './const';\nimport { simpleUnescapeString } from './simpleUnescapeString';\n\nclass ExpressionBinding {\n private readonly ast: Node;\n\n constructor(ast: Node) {\n this.ast = ast;\n }\n\n /**\n * Applies variables into ast\n * @param variables\n * @param logError\n */\n apply(variables: VariablesMap, logError: LogError): VariableValue | string | undefined {\n if (containsUnsetVariables(this.ast, variables)) {\n return undefined;\n }\n\n try {\n const res = evalExpression(variables, this.ast);\n res.warnings.forEach(logError);\n const result = res.result;\n\n if (result.type === 'error') {\n logError(wrapError(new Error('Expression execution error'), {\n additional: {\n message: result.value\n }\n }));\n return undefined;\n }\n\n const value = result.value;\n if (value instanceof Date) {\n return dateToString(value);\n }\n if (result.type === 'boolean') {\n return Boolean(value);\n }\n if (result.type === 'color') {\n const parsed = parseColor(String(value));\n if (parsed) {\n return stringifyColor(parsed);\n }\n logError(wrapError(new Error('Expression execution error')));\n }\n if (result.type === 'integer') {\n if ((value as number) > MAX_INT32 || (value as number) < MIN_INT32) {\n logError(wrapError(new Error('Expression result is out of 32-bit int range')));\n return undefined;\n }\n return Number(value);\n }\n return value;\n } catch (err) {\n logError(wrapError(new Error('Expression execution error')));\n return undefined;\n }\n }\n}\n\nclass VariableBinding {\n private readonly variable: string;\n\n constructor(variable: string) {\n this.variable = variable;\n }\n\n /**\n * Applies variables into ast\n * @param variables\n * @param logError\n */\n apply(variables: VariablesMap, logError: LogError): VariableValue | string | undefined {\n const varInstance = variables.get(this.variable);\n if (varInstance) {\n return varInstance.getValue();\n }\n\n return undefined;\n }\n}\n\nexport type MaybeMissing<T> = T | (\n T extends (infer U)[] ?\n MaybeMissing<U>[] :\n (\n T extends object ?\n {\n [P in keyof T]: MaybeMissing<T[P]>;\n } :\n T | undefined\n )\n);\n\nfunction hasExpressions(str: string): boolean {\n return str.indexOf('@{') > -1 || str.indexOf('\\\\') > -1;\n}\n\nfunction prepareVarsObj<T>(\n jsonProp: T,\n store: {\n vars: string[];\n hasExpression: boolean;\n },\n logError: LogError\n): unknown {\n if (jsonProp) {\n if (typeof jsonProp === 'string') {\n if (hasExpressions(jsonProp)) {\n store.hasExpression = true;\n\n if (process.env.ENABLE_EXPRESSIONS || process.env.ENABLE_EXPRESSIONS === undefined) {\n try {\n const ast = parse(jsonProp, {\n startRule: 'JsonStringContents'\n });\n const propVars = gatherVarsFromAst(ast);\n store.vars.push(...propVars);\n\n return new ExpressionBinding(ast);\n } catch (err) {\n logError(wrapError(new Error('Unable to parse expression'), {\n additional: {\n expression: jsonProp\n }\n }));\n return undefined;\n }\n } else {\n if (jsonProp === '@{}') {\n return '';\n } else if (jsonProp.startsWith('@{') && jsonProp.endsWith('}')) {\n return new VariableBinding(jsonProp.substring(2, jsonProp.length - 1));\n }\n try {\n return simpleUnescapeString(jsonProp);\n } catch (err: any) {\n logError(wrapError(err as Error, {\n additional: {\n expression: jsonProp\n }\n }));\n return undefined;\n }\n }\n }\n } else if (Array.isArray(jsonProp)) {\n return jsonProp.map(item => prepareVarsObj(item, store, logError));\n } else if (typeof jsonProp === 'object') {\n const res: Record<string, unknown> = {};\n for (const key in jsonProp) {\n res[key] = prepareVarsObj(jsonProp[key], store, logError);\n }\n return res;\n }\n }\n return jsonProp;\n}\n\nfunction applyVars(jsonProp: unknown, variables: VariablesMap, logError: LogError): unknown {\n if (jsonProp) {\n if (\n (process.env.ENABLE_EXPRESSIONS || process.env.ENABLE_EXPRESSIONS === undefined) &&\n jsonProp instanceof ExpressionBinding\n ) {\n return jsonProp.apply(variables, logError);\n } else if (\n (!process.env.ENABLE_EXPRESSIONS && process.env.ENABLE_EXPRESSIONS !== undefined) &&\n jsonProp instanceof VariableBinding\n ) {\n return jsonProp.apply(variables, logError);\n } else if (Array.isArray(jsonProp)) {\n return jsonProp.map(it => applyVars(it, variables, logError));\n } else if (typeof jsonProp === 'object') {\n const res: Record<string, unknown> = {};\n for (const key in jsonProp) {\n res[key] = applyVars(jsonProp[key as keyof typeof jsonProp], variables, logError);\n }\n return res;\n }\n }\n return jsonProp;\n}\n\nexport function prepareVars<T>(jsonProp: T, logError: LogError): {\n vars: string[];\n hasExpression: boolean;\n applyVars: (variables: VariablesMap) => MaybeMissing<T>;\n} {\n const store: {\n vars: string[];\n hasExpression: boolean;\n } = {\n vars: [],\n hasExpression: false\n };\n const root = prepareVarsObj(jsonProp, store, logError);\n\n const vars = uniq(store.vars);\n\n return {\n vars,\n hasExpression: store.hasExpression,\n applyVars(variables: VariablesMap) {\n return applyVars(root, variables, logError) as MaybeMissing<T>;\n }\n };\n}\n","export function uniq(list: string[]): string[] {\n return [...new Set(list)];\n}\n","import type { Writable } from 'svelte/types/runtime/store';\nimport { createPagersStore } from './pagers';\n\nexport const storesMap: Record<string, () => Writable<any>> = {\n pagers: createPagersStore\n};\n","import { writable } from 'svelte/store';\n\nexport interface PagerData {\n instId: string;\n size: number;\n currentItem: number;\n scrollToPagerItem(index: number): void;\n}\n\nexport function createPagersStore() {\n return writable(new Map<string, PagerData>());\n}\n","import type { Writable } from 'svelte/store';\nimport { writable } from 'svelte/store';\nimport type { Variable } from './variable';\n\nconst controllerToStore = new Map<GlobalVariablesController, Writable<string>>();\nconst controllerToVars = new Map<GlobalVariablesController, Map<string, Variable>>();\n\nexport function getControllerStore(controller: GlobalVariablesController): Writable<string> {\n const store = controllerToStore.get(controller) || writable('');\n\n if (!controllerToStore.has(controller)) {\n controllerToStore.set(controller, store);\n }\n\n return store;\n}\n\nexport function getControllerVars(controller: GlobalVariablesController): Map<string, Variable> {\n const map = controllerToVars.get(controller) || new Map();\n\n if (!controllerToVars.has(controller)) {\n controllerToVars.set(controller, map);\n }\n\n return map;\n}\n\nexport class GlobalVariablesController {\n setVariable(variable: Variable): void {\n const name = variable.getName();\n const vars = getControllerVars(this);\n\n if (vars.has(name)) {\n throw new Error('Variable with the same name already exist');\n } else {\n vars.set(name, variable);\n const store = getControllerStore(this);\n store.set(name);\n }\n }\n\n getVariable(variableName: string): Variable | undefined {\n const vars = getControllerVars(this);\n\n return vars.get(variableName);\n }\n}\n\nexport function createGlobalVariablesController() {\n return new GlobalVariablesController();\n}\n","import { Action, DivTimer } from '../../typings/common';\nimport { LogError, wrapError } from './wrapError';\nimport { MaybeMissing } from '../expressions/json';\nimport { VariableType } from '../expressions/variable';\n\ninterface TimerState {\n state: 'stopped' | 'running' | 'paused';\n definition: DivTimer;\n duration?: number;\n tick?: number;\n durationTimeout?: number;\n tickTimeout?: number;\n tickStarted?: number;\n tickPassed?: number;\n tickCount?: number;\n tickCountPredict?: number;\n durationStarted?: number;\n durationPassed?: number;\n hold?: boolean;\n}\n\nconst AVAIL_ACTIONS_NAMES = ['start', 'stop', 'pause', 'resume', 'cancel', 'reset'] as const;\n\ntype AVAIL_ACTIONS_LIST = typeof AVAIL_ACTIONS_NAMES[number];\n\nconst AVAIL_ACTIONS = new Set<string>(AVAIL_ACTIONS_NAMES);\n\ntype ApplyVarsFunc = <T>(json: T) => MaybeMissing<T>;\n\ntype HasVariableWithTypeFunc = (name: string, type: VariableType) => boolean;\n\ntype SetVariableValueFunc = (name: string, value: unknown) => void;\n\ntype ExecAnyActionsFunc = (actions: MaybeMissing<Action[]> | undefined, processUrls?: boolean) => Promise<void>;\n\nexport class TimersController {\n private readonly timers: Map<string, TimerState> = new Map();\n private readonly logError: LogError;\n private readonly applyVars: ApplyVarsFunc;\n private readonly hasVariableWithType: HasVariableWithTypeFunc;\n private readonly setVariableValue: SetVariableValueFunc;\n private readonly execAnyActions: ExecAnyActionsFunc;\n private readonly visibilityHandler: () => void;\n private awaitActions: {\n id: string;\n action: AVAIL_ACTIONS_LIST;\n }[] = [];\n\n constructor(opts: {\n logError: LogError;\n applyVars: ApplyVarsFunc;\n hasVariableWithType: HasVariableWithTypeFunc;\n setVariableValue: SetVariableValueFunc;\n execAnyActions: ExecAnyActionsFunc;\n }) {\n this.logError = opts.logError;\n this.applyVars = opts.applyVars;\n this.hasVariableWithType = opts.hasVariableWithType;\n this.setVariableValue = opts.setVariableValue;\n this.execAnyActions = opts.execAnyActions;\n\n this.visibilityHandler = () => {\n if (document.visibilityState === 'visible') {\n this.awaitActions.forEach(({ id, action }) => {\n this.execTimerAction(id, action);\n });\n this.awaitActions = [];\n this.unholdAll();\n } else {\n this.holdAll();\n }\n };\n\n document.addEventListener('visibilitychange', this.visibilityHandler);\n }\n\n destroy(): void {\n document.removeEventListener('visibilitychange', this.visibilityHandler);\n\n for (const [_id, timer] of this.timers) {\n this.stopTimerTimeouts(timer);\n }\n }\n\n createTimer(timer: DivTimer) {\n if (!timer?.id) {\n this.logError(wrapError(new Error('Missing timer id')));\n return;\n }\n if (!(timer.duration || timer.tick_interval && (timer.value_variable || timer.tick_actions))) {\n this.logError(wrapError(new Error('Misconfigured timer'), {\n additional: {\n id: timer.id\n }\n }));\n return;\n }\n\n this.timers.set(timer.id, {\n state: 'stopped',\n definition: timer\n });\n }\n\n execTimerAction(id: string | null, action: string | null) {\n if (!id || !action || !this.timers.has(id) || !AVAIL_ACTIONS.has(action)) {\n this.logError(wrapError(new Error('Incorrect timer action'), {\n additional: {\n id,\n action\n }\n }));\n return;\n }\n const actionTyped = action as AVAIL_ACTIONS_LIST;\n\n if (document.visibilityState !== 'visible') {\n // wait till the page is visible\n this.awaitActions.push({\n id,\n action: actionTyped\n });\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const timer = this.timers.get(id)!;\n this[actionTyped](timer);\n }\n\n private stopTimerTimeouts(timer: TimerState): void {\n if (timer.durationTimeout) {\n clearTimeout(timer.durationTimeout);\n timer.durationTimeout = undefined;\n }\n if (timer.tickTimeout) {\n clearTimeout(timer.tickTimeout);\n timer.tickTimeout = undefined;\n }\n }\n\n private tickOrUnholdAction(timer: TimerState): void {\n const now = performance.now();\n const value = (timer.durationPassed || 0) + now - (timer.durationStarted || 0);\n if (timer.duration && value > timer.duration) {\n return;\n }\n this.updateVariable(timer, value);\n this.callActions(timer, 'tick');\n\n if (timer.tickCount !== undefined) {\n ++timer.tickCount;\n }\n }\n\n private startOrResume(timer: TimerState): void {\n timer.state = 'running';\n timer.hold = false;\n\n timer.durationStarted = performance.now();\n\n const duration = timer.duration;\n if (duration) {\n timer.durationTimeout = window.setTimeout(() => {\n this.updateVariable(timer, duration);\n if (\n timer.tickCountPredict &&\n timer.tickCount !== undefined &&\n timer.tickCount < timer.tickCountPredict\n ) {\n this.callActions(timer, 'tick');\n }\n this.stop(timer);\n }, Math.max(0, duration - (timer.durationPassed || 0)));\n }\n const tick = timer.tick;\n if (tick) {\n const startTick = () => {\n const started = timer.tickStarted = performance.now();\n const duration = Math.max(0, tick - (timer.tickPassed || 0));\n timer.tickTimeout = window.setTimeout(() => {\n this.tickOrUnholdAction(timer);\n timer.tickPassed = ((performance.now() - started) - duration) % tick;\n startTick();\n }, duration);\n };\n\n startTick();\n }\n }\n\n private start(timer: TimerState): void {\n if (timer.state === 'running') {\n this.logError(wrapError(new Error('The timer is already running')));\n return;\n } else if (timer.state === 'paused') {\n this.logError(wrapError(new Error('The timer is paused')));\n return;\n }\n\n const variableName = timer.definition.value_variable;\n if (variableName && !this.hasVariableWithType(variableName, 'integer')) {\n this.logError(wrapError(new Error('Cannot find variable'), {\n additional: {\n name: variableName\n }\n }));\n return;\n }\n\n if (variableName) {\n this.setVariableValue(variableName, 0);\n }\n\n if (timer.definition.duration) {\n timer.duration = this.applyVars(timer.definition.duration);\n }\n if (timer.definition.tick_interval) {\n timer.tick = this.applyVars(timer.definition.tick_interval);\n }\n // duration < 0 is incorrect\n // tick_interval <= is incorrect\n if (\n timer.duration !== undefined && timer.duration < 0 ||\n timer.tick !== undefined && timer.tick <= 0\n ) {\n this.logError(wrapError(new Error('Incorrect timer properties'), {\n additional: {\n id: timer.definition.id\n }\n }));\n return;\n }\n\n if (timer.duration !== undefined && timer.tick !== undefined) {\n timer.tickCount = 0;\n timer.tickCountPredict = Math.floor(timer.duration / timer.tick);\n }\n\n this.startOrResume(timer);\n }\n\n private stop(timer: TimerState): void {\n if (timer.state === 'stopped') {\n this.logError(wrapError(new Error('The timer has already been stopped')));\n return;\n }\n\n timer.state = 'stopped';\n timer.durationPassed = 0;\n timer.tickPassed = 0;\n this.stopTimerTimeouts(timer);\n this.callActions(timer, 'end');\n }\n\n private pause(timer: TimerState): void {\n if (timer.state === 'stopped') {\n this.logError(wrapError(new Error('The timer has already been stopped')));\n return;\n } else if (timer.state === 'paused') {\n this.logError(wrapError(new Error('The timer has already been paused')));\n return;\n }\n\n timer.state = 'paused';\n\n this.stopTimerTimeouts(timer);\n\n const now = performance.now();\n\n if (timer.durationStarted) {\n timer.durationPassed = (timer.durationPassed || 0) + now - timer.durationStarted;\n }\n if (timer.tickStarted) {\n timer.tickPassed = (timer.tickPassed || 0) + now - timer.tickStarted;\n }\n\n const variableName = timer.definition.value_variable;\n if (variableName && timer.durationPassed) {\n this.setVariableValue(variableName, Math.round(timer.durationPassed));\n }\n }\n\n private resume(timer: TimerState): void {\n if (timer.state === 'stopped') {\n this.logError(wrapError(new Error('The timer has already been stopped')));\n return;\n } else if (timer.state === 'running') {\n this.logError(wrapError(new Error('The timer is already running')));\n return;\n }\n\n this.startOrResume(timer);\n }\n\n private cancel(timer: TimerState): void {\n if (timer.state === 'stopped') {\n return;\n }\n\n timer.state = 'stopped';\n timer.durationPassed = 0;\n timer.tickPassed = 0;\n this.stopTimerTimeouts(timer);\n }\n\n private reset(timer: TimerState): void {\n this.cancel(timer);\n this.start(timer);\n }\n\n private updateVariable(timer: TimerState, value: number): void {\n const variableName = timer.definition.value_variable;\n if (variableName) {\n this.setVariableValue(variableName, Math.round(value));\n }\n }\n\n private callActions(timer: TimerState, type: 'tick' | 'end'): void {\n const actions = timer.definition[type === 'end' ? 'end_actions' : 'tick_actions'];\n\n if (actions) {\n const actionsWithExpressions = this.applyVars(actions);\n this.execAnyActions(actionsWithExpressions, false);\n }\n }\n\n private holdAll(): void {\n for (const [_id, timer] of this.timers) {\n if (timer.state === 'running') {\n timer.hold = true;\n this.stopTimerTimeouts(timer);\n }\n }\n }\n\n private unholdAll(): void {\n for (const [_id, timer] of this.timers) {\n if (timer.state === 'running' && timer.hold) {\n // All timeouts were canceled, but the time is not stopped\n const now = performance.now();\n\n if (timer.durationStarted) {\n timer.durationPassed = (timer.durationPassed || 0) + now - timer.durationStarted;\n }\n if (timer.tickStarted) {\n timer.tickPassed = (timer.tickPassed || 0) + now - timer.tickStarted;\n }\n\n if (timer.tick) {\n // Run tick actions and update variable instantly after the page is shown, if:\n // Timer has the tick_interval\n // Timer is not done yet (check inside function)\n this.tickOrUnholdAction(timer);\n }\n\n this.startOrResume(timer);\n }\n }\n }\n}\n","<script lang=\"ts\" context=\"module\">\n import { writable } from 'svelte/store';\n\n let isPointerFocus = writable(true);\n let rootInstancesCount = 0;\n\n function onWindowKeyDown() {\n isPointerFocus.set(false);\n }\n\n function onWindowPointerDown() {\n isPointerFocus.set(true);\n }\n</script>\n\n<script lang=\"ts\">\n import type { Readable, Writable } from 'svelte/types/runtime/store';\n import { onDestroy, onMount, setContext, tick } from 'svelte';\n import { derived } from 'svelte/store';\n\n import css from './Root.module.css';\n\n import type {\n Action,\n VisibilityAction,\n ComponentCallback,\n CustomActionCallback,\n DivBase,\n DivJson,\n ErrorCallback,\n Platform,\n StatCallback,\n TemplateContext,\n Theme,\n Customization,\n DivExtension,\n DivExtensionContext,\n DivExtensionClass,\n TypefaceProvider,\n DisappearAction\n } from '../../typings/common';\n import type { AppearanceTransition, DivBaseData, TransitionChange } from '../types/base';\n import type { SwitchElements, Overflow } from '../types/switch-elements';\n import type { TintMode } from '../types/image';\n import type { VideoElements } from '../types/video';\n import type { Patch } from '../types/patch';\n import Unknown from './utilities/Unknown.svelte';\n import RootSvgFilters from './utilities/RootSvgFilters.svelte';\n import { ParentMethods, ROOT_CTX, RootCtxValue, Running } from '../context/root';\n import { applyTemplate } from '../utils/applyTemplate';\n import { wrapError, WrappedError } from '../utils/wrapError';\n import { simpleCheckInput } from '../utils/simpleCheckInput';\n import { ACTION_CTX, ActionCtxValue } from '../context/action';\n import { STATE_CTX, StateCtxValue, StateInterface } from '../context/state';\n import { constStore } from '../utils/constStore';\n import {\n MaybeMissing,\n prepareVars\n } from '../expressions/json';\n import { storesMap } from '../stores';\n import { evalExpression } from '../expressions/eval';\n import { parse } from '../expressions/expressions';\n import { gatherVarsFromAst } from '../expressions/utils';\n import { Truthy } from '../utils/truthy';\n import { createVariable, TYPE_TO_CLASS, Variable, VariableType } from '../expressions/variable';\n import {\n getControllerStore,\n getControllerVars,\n GlobalVariablesController\n } from '../expressions/globalVariablesController';\n import { getUrlSchema, isBuiltinSchema } from '../utils/url';\n import { TimersController } from '../utils/timers';\n\n export let id: string;\n export let json: Partial<DivJson> = {};\n export let platform: Platform = 'auto';\n export let theme: Theme = 'system';\n export let globalVariablesController: GlobalVariablesController = new GlobalVariablesController();\n export let mix = '';\n export let customization: Customization = {};\n export let builtinProtocols: string[] = ['http', 'https', 'tel', 'mailto', 'intent'];\n export let extensions: Map<string, DivExtensionClass> = new Map();\n export let onError: ErrorCallback | undefined = undefined;\n export let onStat: StatCallback | undefined = undefined;\n export let onCustomAction: CustomActionCallback | undefined = undefined;\n export let onComponent: ComponentCallback | undefined = undefined;\n export let typefaceProvider: TypefaceProvider = _fontFamily => '';\n export let fetchInit: RequestInit | ((url: string) => RequestInit) = {};\n\n let isDesktop = writable(platform === 'desktop');\n if (platform === 'auto' && typeof matchMedia !== 'undefined') {\n const touchQuery = matchMedia('(any-pointer: coarse)');\n isDesktop.set(!touchQuery.matches);\n touchQuery.addListener(() => {\n isDesktop.set(!touchQuery.matches);\n });\n }\n\n let currentTheme: 'light' | 'dark' = 'light';\n let themeQuery: MediaQueryList | null = null;\n $: if (theme === 'light' || theme === 'dark') {\n currentTheme = theme;\n } else if (theme === 'system') {\n if (typeof matchMedia !== 'undefined') {\n if (!themeQuery) {\n themeQuery = matchMedia('(prefers-color-scheme: dark)');\n themeQuery.addListener(themeQueryListener);\n }\n currentTheme = themeQuery.matches ? 'dark' : 'light';\n } else {\n currentTheme = 'light';\n }\n } else {\n logError(wrapError(new Error('Unsupported theme')));\n }\n\n $: if (currentTheme) {\n updateTheme();\n }\n\n function themeQueryListener(): void {\n if (theme !== 'system' || !themeQuery) {\n return;\n }\n\n currentTheme = themeQuery.matches ? 'dark' : 'light';\n }\n\n export function setTheme(newTheme: Theme): void {\n theme = newTheme;\n }\n\n export function getDebugVariables() {\n if (!process.env.DEVTOOL) {\n return;\n }\n\n return localVariables;\n }\n\n const builtinSet = new Set(builtinProtocols);\n\n let hasError = false;\n\n if (!json) {\n hasError = true;\n logError(wrapError(new Error('\"json\" prop is required')));\n }\n\n if (!id) {\n hasError = true;\n logError(wrapError(new Error('\"id\" prop is required')));\n }\n\n let initialError = simpleCheckInput(json);\n let templateContext: TemplateContext = {};\n const templates = json.templates || {};\n\n if (initialError) {\n hasError = true;\n logError(initialError);\n }\n\n const running: Record<Running, boolean> = {\n stateChange: false\n };\n\n // Will notify about new global variables\n const globalVariablesStore = getControllerStore(globalVariablesController);\n // Global variables only\n const globalVariables = getControllerVars(globalVariablesController);\n // Local variables only\n const localVariables = new Map<string, Variable>();\n // Local and global variables combined, with local in precedence\n const variables = new Map<string, Variable>();\n // Stores for notify unset global variables\n const awaitingGlobalVariables = new Map<string, Writable<any>>();\n let timersController: TimersController | null = null;\n\n function getVariableInstance(name: string, type: VariableType): Variable | undefined {\n const variable = variables.get(name);\n\n if (variable) {\n const foundType = variable.getType();\n\n if (foundType !== type) {\n logError(wrapError(new Error(`Variable should have type \"${type}\"`), {\n additional: {\n name,\n foundType\n }\n }));\n return;\n }\n }\n\n return variable;\n }\n\n function getCustomization<K extends keyof Customization>(prop: K): Customization[K] | undefined {\n return customization?.[prop];\n }\n\n function getDerivedFromVars<T>(jsonProp: T): Readable<MaybeMissing<T>> {\n if (!jsonProp) {\n return constStore(jsonProp);\n }\n\n const prepared = prepareVars(jsonProp, logError);\n if (!prepared.vars.length) {\n if (prepared.hasExpression) {\n return constStore(prepared.applyVars(variables));\n }\n return constStore(jsonProp);\n }\n const stores = prepared.vars.map(name => {\n return variables.get(name) || awaitVariableChanges(name);\n }).filter(Truthy);\n\n return derived(stores, () => prepared.applyVars(variables));\n }\n\n function getJsonWithVars<T>(jsonProp: T): MaybeMissing<T> {\n const prepared = prepareVars(jsonProp, logError);\n\n if (!prepared.hasExpression) {\n return jsonProp;\n }\n\n return prepared.applyVars(variables);\n }\n\n function logError(error: WrappedError): void {\n if (onError) {\n onError({\n error\n });\n } else if (error?.level === 'warn') {\n console.warn(error);\n } else {\n console.error(error);\n }\n }\n\n function logStat(type: string, action: Action): void {\n if (onStat) {\n onStat({\n type,\n action\n });\n }\n }\n\n function hasTemplate(templateName: string): boolean {\n return templateName in templates;\n }\n\n function processTemplate(json: DivBaseData, templateContext: TemplateContext): {\n json: DivBaseData;\n templateContext: TemplateContext;\n } {\n if (!json) {\n return {\n json,\n templateContext\n };\n }\n\n const usedTypes = new Set([json.type]);\n\n while (json.type in templates) {\n ({\n json,\n templateContext\n } = applyTemplate(json as DivBase, templateContext, templates, logError));\n\n if (usedTypes.has(json.type)) {\n return {\n json,\n templateContext\n };\n }\n usedTypes.add(json.type);\n }\n\n return {\n json,\n templateContext\n };\n }\n\n function registerComponentReal({\n node,\n json,\n origJson,\n templateContext\n }: {\n node: HTMLElement;\n json: Partial<DivBaseData>;\n origJson: DivBase | undefined;\n templateContext: TemplateContext;\n }): void {\n if (onComponent) {\n onComponent({\n type: 'mount',\n node,\n json: json as DivBase,\n origJson,\n templateContext\n });\n }\n }\n function unregisterComponentReal({\n node\n }: {\n node: HTMLElement;\n }): void {\n if (onComponent) {\n onComponent({\n type: 'destroy',\n node\n });\n }\n }\n\n let idCounter = 0;\n function genId(key: string): string {\n if (process.env.IS_PROD) {\n return `${id}-${idCounter++}`;\n }\n return `${id}-${key}-${idCounter++}`;\n }\n\n function genClass(key: string): string {\n return `divkit-${genId(key)}`;\n }\n\n let svgFiltersMap: Record<string, string> = {};\n let svgFilterUsages: Record<string, number> = {};\n\n function addSvgFilter(color: string, mode: TintMode): string {\n const key = `${color}:${mode}`;\n svgFilterUsages[key] = svgFilterUsages[key] || 0;\n ++svgFilterUsages[key];\n\n if (svgFiltersMap[key]) {\n return svgFiltersMap[key];\n }\n\n const filterId = `${genId('root')}-svg-filter`;\n svgFiltersMap = {\n ...svgFiltersMap,\n [key]: filterId\n };\n\n return filterId;\n }\n\n function removeSvgFilter(color: string | undefined, mode: TintMode): void {\n if (!color) {\n return;\n }\n\n const key = `${color}:${mode}`;\n if (!svgFilterUsages[key]) {\n return;\n }\n\n if (--svgFilterUsages[key] === 0) {\n svgFiltersMap = Object.keys(svgFiltersMap).reduce((acc, item) => {\n if (svgFilterUsages[item]) {\n acc[item] = svgFiltersMap[item];\n }\n return acc;\n }, {} as typeof svgFiltersMap);\n }\n }\n\n function setState(stateId: string | null): void {\n if (!process.env.ENABLE_COMPONENT_STATE && process.env.ENABLE_COMPONENT_STATE !== undefined) {\n throw new Error('State is not supported');\n }\n\n if (!stateId) {\n throw new Error('Missing state id');\n }\n let state: StateInterface = stateInterface;\n let parts = stateId.split('/');\n\n parts = ['root', ...parts];\n if (parts.length < 2 || parts.length % 2 !== 0) {\n throw new Error('Incorrect state id format');\n }\n\n for (let i = 0; i < parts.length; i += 2) {\n const divId = parts[i];\n const selectedStateId = parts[i + 1];\n\n let childState = state.getChild(divId);\n if (childState) {\n childState.setState(selectedStateId);\n state = childState;\n } else {\n return;\n }\n }\n }\n\n function setCurrentItem(id: string | null, item: string | null): void {\n if (!id || !item) {\n throw new Error('Missing data for \"set-current-item\" action');\n }\n\n if (isNaN(Number(item))) {\n throw new Error('Incorrect item for \"set-current-item\" action');\n }\n\n const instance = getInstance<SwitchElements>(id);\n\n if (instance) {\n instance.setCurrentItem(Number(item));\n }\n }\n\n function setPreviousItem(id: string | null, overflow: string | null): void {\n if (!id) {\n throw new Error('Missing id for \"set-previous-item\" action');\n }\n\n if (overflow && overflow !== 'clamp' && overflow !== 'ring') {\n throw new Error('Incorrect overflow value for \"set-previous-item\" action');\n }\n\n overflow = overflow || 'clamp';\n\n const instance = getInstance<SwitchElements>(id);\n\n if (instance) {\n instance.setPreviousItem(overflow as Overflow);\n }\n }\n\n function setNextItem(id: string | null, overflow: string | null): void {\n if (!id) {\n throw new Error('Missing id for \"set-next-item\" action');\n }\n\n if (overflow && overflow !== 'clamp' && overflow !== 'ring') {\n throw new Error('Incorrect overflow value for \"set-next-item\" action');\n }\n\n overflow = overflow || 'clamp';\n\n const instance = getInstance<SwitchElements>(id);\n\n if (instance) {\n instance.setNextItem(overflow as Overflow);\n }\n }\n\n function callVideoAction(id: string | null, action: string | null): void {\n if (id) {\n const instance = getInstance<VideoElements>(id);\n\n if (instance) {\n if (action === 'start') {\n instance.start();\n } else if (action === 'pause') {\n instance.pause();\n } else {\n logError(wrapError(new Error('Unknown video action'), {\n additional: {\n id,\n action\n }\n }));\n }\n } else {\n logError(wrapError(new Error('Video component is not found'), {\n additional: {\n id,\n action\n }\n }));\n }\n } else {\n logError(wrapError(new Error('Missing id in video action'), {\n additional: {\n action\n }\n }));\n }\n }\n\n function callDownloadAction(\n url: string | null,\n action: MaybeMissing<Action | VisibilityAction | DisappearAction>\n ): void {\n if (url) {\n let init;\n if (typeof fetchInit === 'function') {\n init = fetchInit(url);\n } else {\n init = fetchInit;\n }\n fetch(url, init).then(res => {\n if (!res.ok) {\n throw new Error('Response is not ok');\n }\n return res.json();\n }).then((json: Patch) => {\n if (!json) {\n logError(wrapError(new Error('Incorrect patch'), {\n additional: {\n url\n }\n }));\n return;\n }\n if (json.templates) {\n for (const name in json.templates) {\n if (!templates.hasOwnProperty(name)) {\n templates[name] = json.templates[name];\n }\n }\n }\n if (Array.isArray(json.patch?.changes)) {\n if (json.patch.mode === 'transactional') {\n const failed = json.patch.changes.find(change => !parentOfMap.has(change.id));\n if (failed) {\n logError(wrapError(new Error('Skipping transactional, child is not found'), {\n additional: {\n url,\n id: failed.id\n }\n }));\n execAnyActions(action.download_callbacks?.on_fail_actions);\n return;\n }\n }\n json.patch.changes.forEach(change => {\n const methods = parentOfMap.get(change.id);\n if (methods) {\n methods.replaceWith(change.id, change.items);\n }\n });\n execAnyActions(action.download_callbacks?.on_success_actions);\n }\n }).catch(err => {\n logError(wrapError(new Error('Failed to download the patch'), {\n additional: {\n url,\n originalError: err\n }\n }));\n execAnyActions(action.download_callbacks?.on_fail_actions);\n });\n } else {\n logError(wrapError(new Error('Missing url in download action'), {\n additional: {\n url\n }\n }));\n }\n }\n\n export function execAction(action: MaybeMissing<Action | VisibilityAction | DisappearAction>): void {\n const actionUrl = action.url ? String(action.url) : '';\n\n if (actionUrl) {\n try {\n const url = actionUrl.replace(/div-action:\\/\\//, '');\n const parts = /([^?]+)\\?(.+)/.exec(url);\n if (!parts) {\n return;\n }\n const params = new URLSearchParams(parts[2]);\n\n switch (parts[1]) {\n case 'set_state':\n setState(params.get('state_id'));\n break;\n case 'set_current_item':\n setCurrentItem(params.get('id'), params.get('item'));\n break;\n case 'set_previous_item':\n setPreviousItem(params.get('id'), params.get('overflow'));\n break;\n case 'set_next_item':\n setNextItem(params.get('id'), params.get('overflow'));\n break;\n case 'set_variable':\n const name = params.get('name');\n const value = params.get('value');\n\n if (name && value !== null) {\n const variableInstance = variables.get(name);\n if (variableInstance) {\n if (variableInstance.getType() === 'dict') {\n logError(wrapError(new Error('Setting dict variables is not supported'), {\n additional: {\n name\n }\n }));\n } else {\n variableInstance.set(value);\n }\n } else {\n logError(wrapError(new Error('Cannot find variable'), {\n additional: {\n name\n }\n }));\n }\n } else {\n logError(wrapError(new Error('Incorrect set_variable_action'), {\n additional: {\n url\n }\n }));\n }\n break;\n case 'timer':\n const timerAction = params.get('action');\n const id = params.get('id');\n\n if (timersController) {\n timersController.execTimerAction(id, timerAction);\n } else {\n logError(wrapError(new Error('Incorrect timer action'), {\n additional: {\n id,\n action: timerAction\n }\n }));\n }\n break;\n case 'video':\n callVideoAction(params.get('id'), params.get('action'));\n break;\n case 'download':\n callDownloadAction(params.get('url'), action);\n break;\n default:\n logError(wrapError(new Error('Unknown type of action'), {\n additional: {\n url: actionUrl\n }\n }));\n }\n } catch (err: any) {\n logError(wrapError(err, {\n additional: {\n url: actionUrl\n }\n }));\n }\n }\n }\n\n async function execAnyActions(actions: MaybeMissing<Action[]> | undefined, processUrls?: boolean): Promise<void> {\n if (!actions || !Array.isArray(actions)) {\n return;\n }\n\n for (let i = 0; i < actions.length; ++i) {\n let action = actions[i];\n\n const actionUrl = action.url;\n if (actionUrl) {\n const schema = getUrlSchema(actionUrl);\n if (schema) {\n if (isBuiltinSchema(schema, builtinSet)) {\n if (processUrls) {\n if (action.target === '_blank') {\n const win = window.open('', '_blank');\n if (win) {\n win.opener = null;\n win.location = actionUrl;\n }\n } else {\n location.href = actionUrl;\n }\n }\n } else if (schema === 'div-action') {\n execAction(action);\n await tick();\n } else if (action.log_id) {\n execCustomAction(action as Action & { url: string });\n await tick();\n }\n }\n }\n }\n actions.forEach(action => {\n if (action.log_id) {\n logStat('click', action as Action);\n }\n });\n }\n\n function execCustomAction(action: (Action | VisibilityAction) & { url: string }): void {\n onCustomAction?.(action);\n }\n\n function isRunning(type: Running): boolean {\n return running[type];\n }\n\n function setRunning(type: Running, val: boolean): void {\n running[type] = val;\n }\n\n const instancesMap: Map<string, unknown> = new Map();\n const parentOfMap: Map<string, ParentMethods> = new Map();\n function registerInstance<T>(id: string, block: T) {\n if (instancesMap.has(id)) {\n logError(wrapError(new Error('Duplicate instance id'), {\n additional: {\n id\n }\n }));\n return;\n }\n\n instancesMap.set(id, block);\n }\n function unregisterInstance(id: string) {\n instancesMap.delete(id);\n }\n\n function getInstance<T>(id: string): T | undefined {\n if (!instancesMap.has(id)) {\n logError(wrapError(new Error('Missing instance with id'), {\n additional: {\n id\n }\n }));\n return;\n }\n\n return instancesMap.get(id) as T;\n }\n\n function registerParentOf(id: string, methods: ParentMethods): void {\n parentOfMap.set(id, methods);\n }\n\n function unregisterParentOf(id: string): void {\n parentOfMap.delete(id);\n }\n\n const stores = new Map<string, Writable<any>>();\n\n function setStore(id: string) {\n if (stores.has(id)) {\n return;\n }\n\n stores.set(id, storesMap[id]());\n }\n\n function getStore<T>(id: string): Writable<T> {\n if (!stores.has(id)) {\n setStore(id);\n }\n\n return stores.get(id) as Writable<T>;\n }\n\n function filterDefinedVars(vars: Set<string>): Set<string> {\n for (const varName of vars) {\n if (variables.has(varName)) {\n vars.delete(varName);\n }\n }\n\n return vars;\n }\n\n function awaitVariableChanges(variableName: string): Readable<any> {\n const store = awaitingGlobalVariables.get(variableName) || writable(undefined);\n\n if (!awaitingGlobalVariables.has(variableName)) {\n awaitingGlobalVariables.set(variableName, store);\n }\n\n return store;\n }\n\n function waitForVars(vars: string[]): Promise<void> {\n const remaining = new Set(vars);\n\n filterDefinedVars(remaining);\n\n if (!remaining.size) {\n return Promise.resolve();\n }\n\n return new Promise(resolve => {\n const unsubscribe = globalVariablesStore.subscribe(() => {\n filterDefinedVars(remaining);\n\n if (!remaining.size) {\n unsubscribe();\n resolve();\n }\n });\n });\n }\n\n function updateTheme(): void {\n if (!palette) {\n return;\n }\n\n const list = palette[currentTheme];\n list.forEach(item => {\n const varInstance = variables.get(item.name);\n\n if (varInstance) {\n varInstance.setValue(item.color);\n }\n });\n }\n\n function getBuiltinProtocols(): Set<string> {\n return builtinSet;\n }\n\n function getExtension(id: string, params: object | undefined): DivExtension | undefined {\n const Builder = extensions.get(id);\n if (Builder) {\n return new Builder(params || {});\n }\n }\n\n function getExtensionContext(): DivExtensionContext {\n return {\n variables,\n logError\n };\n }\n\n setContext<RootCtxValue>(ROOT_CTX, {\n logError,\n logStat,\n hasTemplate,\n processTemplate,\n genId,\n genClass,\n execAction,\n execAnyActions,\n execCustomAction,\n isRunning,\n setRunning,\n registerInstance,\n unregisterInstance,\n registerParentOf,\n unregisterParentOf,\n addSvgFilter,\n removeSvgFilter,\n getDerivedFromVars,\n getJsonWithVars,\n getStore,\n getVariable: getVariableInstance,\n getCustomization,\n getBuiltinProtocols,\n getExtension,\n getExtensionContext,\n typefaceProvider,\n isDesktop,\n isPointerFocus,\n registerComponent: process.env.DEVTOOL ? registerComponentReal : undefined,\n unregisterComponent: process.env.DEVTOOL ? unregisterComponentReal : undefined\n });\n\n setContext<ActionCtxValue>(ACTION_CTX, {\n hasAction(): boolean {\n return false;\n }\n });\n\n const stateInterface: StateInterface = {\n setState(_stateId: string): void {\n throw new Error('Not implemented');\n },\n getChild(id: string): StateInterface | undefined {\n if (childStateMap && childStateMap.has(id)) {\n return childStateMap.get(id);\n }\n\n logError(wrapError(new Error('Missing state block with id'), {\n additional: {\n id\n }\n }));\n\n return undefined;\n }\n };\n\n let childStateMap: Map<string, StateInterface> | null = null;\n setContext<StateCtxValue>(STATE_CTX, {\n registerInstance(id: string, block: StateInterface) {\n if (!childStateMap) {\n childStateMap = new Map();\n }\n\n if (childStateMap.has(id)) {\n logError(wrapError(new Error('Duplicate state with id'), {\n additional: {\n id\n }\n }));\n } else {\n childStateMap.set(id, block);\n }\n },\n unregisterInstance(id: string) {\n childStateMap?.delete(id);\n },\n runVisibilityTransition(\n _json: DivBaseData,\n _templateContext: TemplateContext,\n _transitions: AppearanceTransition,\n _node: HTMLElement,\n _direction: 'in' | 'out'\n ) {\n return Promise.resolve();\n },\n registerChildWithTransitionIn(\n _json: DivBaseData,\n _templateContext: TemplateContext,\n _transitions: AppearanceTransition,\n _node: HTMLElement\n ) {\n return Promise.resolve();\n },\n registerChildWithTransitionOut(\n _json: DivBaseData,\n _templateContext: TemplateContext,\n _transitions: AppearanceTransition,\n _node: HTMLElement\n ) {\n return Promise.resolve();\n },\n registerChildWithTransitionChange(\n _json: DivBaseData,\n _templateContext: TemplateContext,\n _transitions: TransitionChange,\n _node: HTMLElement\n ) {\n return Promise.resolve();\n },\n hasTransitionChange(_id?: string): boolean {\n return false;\n },\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n registerChild(_id: string) {\n },\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n unregisterChild(_id: string) {\n }\n });\n\n function hasVariableWithType(name: string, type: VariableType): boolean {\n const instance = variables.get(name);\n\n return instance?.getType() === type;\n }\n\n function setVariableValue(name: string, value: unknown): void {\n const variableInstance = variables.get(name);\n if (variableInstance) {\n variableInstance.setValue(value);\n } else {\n logError(wrapError(new Error('Cannot find variable'), {\n additional: {\n name\n }\n }));\n }\n }\n\n const startVariables = json?.card?.variables;\n if (Array.isArray(startVariables)) {\n startVariables.forEach(variable => {\n if (variable && variable.type in TYPE_TO_CLASS && variable.name) {\n if (localVariables.has(variable.name)) {\n logError(wrapError(new Error('Duplicate variable'), {\n additional: {\n name: variable.name\n }\n }));\n\n return;\n }\n\n if (\n variable.type === 'integer' && typeof variable.value === 'number' &&\n (variable.value > Number.MAX_SAFE_INTEGER || variable.value < Number.MIN_SAFE_INTEGER)\n ) {\n logError(wrapError(new Error('The value of the integer variable could lose accuracy'), {\n level: 'warn',\n additional: {\n name: variable.name,\n value: variable.value\n }\n }));\n }\n\n try {\n const varInstance = createVariable(variable.name, variable.type, variable.value);\n\n localVariables.set(variable.name, varInstance);\n variables.set(variable.name, varInstance);\n } catch (err: any) {\n logError(wrapError(err, {\n additional: {\n name: variable.name\n }\n }));\n }\n }\n });\n }\n\n const palette = json.palette;\n if (palette) {\n const list = palette[currentTheme];\n list.forEach(item => {\n if (localVariables.has(item.name)) {\n logError(wrapError(new Error('Duplicate variable'), {\n additional: {\n name: item.name\n }\n }));\n\n return;\n }\n\n try {\n const varInstance = createVariable(item.name, 'color', item.color);\n\n localVariables.set(item.name, varInstance);\n variables.set(item.name, varInstance);\n } catch (err: any) {\n logError(wrapError(err, {\n additional: {\n name: item.name\n }\n }));\n }\n });\n }\n\n for (const [varName, variable] of globalVariables) {\n if (!variables.has(varName)) {\n variables.set(varName, variable);\n }\n }\n\n globalVariablesStore.subscribe(newVarName => {\n if (newVarName && !variables.has(newVarName)) {\n const varInstance = globalVariables.get(newVarName) as Variable;\n variables.set(newVarName, varInstance);\n\n const awaitingStore = awaitingGlobalVariables.get(newVarName);\n\n if (awaitingStore) {\n let counter = 0;\n varInstance.subscribe(() => {\n awaitingStore.set(++counter);\n });\n }\n }\n });\n\n const variableTriggers = json?.card?.variable_triggers;\n if (Array.isArray(variableTriggers)) {\n if (process.env.ENABLE_EXPRESSIONS) {\n variableTriggers.forEach(trigger => {\n let prevConditionResult = false;\n\n if (typeof trigger.condition !== 'string') {\n logError(wrapError(new Error('variable_trigger has a condition that is not a string'), {\n additional: {\n condition: trigger.condition\n }\n }));\n return;\n }\n\n const mode = trigger.mode || 'on_condition';\n\n if (mode !== 'on_variable' && mode !== 'on_condition') {\n logError(wrapError(new Error('variable_trigger has an unsupported mode'), {\n additional: {\n mode\n }\n }));\n return;\n }\n\n try {\n const ast = parse(trigger.condition, {\n startRule: 'JsonStringContents'\n });\n const exprVars = gatherVarsFromAst(ast);\n if (!exprVars.length) {\n logError(wrapError(new Error('variable_trigger must have variables in the condition'), {\n additional: {\n condition: trigger.condition\n }\n }));\n return;\n }\n\n waitForVars(exprVars).then(() => {\n const stores = exprVars.map(name => variables.get(name)).filter(Truthy);\n\n derived(stores, () => {\n const res = evalExpression(variables, ast);\n\n res.warnings.forEach(logError);\n\n return res.result;\n }).subscribe(conditionResult => {\n if (conditionResult.type === 'error') {\n logError(wrapError(new Error('variable_trigger condition execution error'), {\n additional: {\n message: conditionResult.value\n }\n }));\n return;\n }\n\n if (\n // if condition is truthy\n conditionResult.value &&\n // and trigger mode matches\n (mode === 'on_variable' || mode === 'on_condition' && prevConditionResult === false)\n ) {\n trigger.actions.forEach(action => {\n const resultAction = getJsonWithVars(action);\n if (resultAction.log_id) {\n execAction(resultAction as Action);\n }\n });\n }\n\n prevConditionResult = Boolean(conditionResult.value);\n });\n });\n } catch (err) {\n logError(wrapError(new Error('Unable to parse variable_trigger'), {\n additional: {\n condition: trigger.condition\n }\n }));\n }\n });\n } else {\n logError(wrapError(new Error('variable_trigger is not supported')));\n }\n }\n\n const timers = json?.card?.timers;\n if (timers) {\n const controller = timersController = new TimersController({\n logError,\n applyVars: getJsonWithVars,\n hasVariableWithType,\n setVariableValue,\n execAnyActions\n });\n timers.forEach(timer => controller.createTimer(timer));\n }\n\n const states = json?.card?.states;\n let rootStateDiv: DivBaseData | undefined;\n if (states && !hasError) {\n rootStateDiv = (process.env.ENABLE_COMPONENT_STATE || process.env.ENABLE_COMPONENT_STATE === undefined) ? {\n type: 'state',\n id: 'root',\n width: {\n type: 'match_parent',\n },\n height: {\n type: 'match_parent',\n },\n states: states.map(state => ({\n state_id: state.state_id.toString(),\n div: state.div\n }))\n } : states[0].div;\n }\n\n /**\n * Fix for the :active pseudo-class on iOS\n */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n function emptyTouchstartHandler() {}\n\n onMount(() => {\n rootInstancesCount++;\n\n if (rootInstancesCount === 1) {\n window.addEventListener('keydown', onWindowKeyDown);\n window.addEventListener('pointerdown', onWindowPointerDown);\n }\n });\n\n onDestroy(() => {\n rootInstancesCount--;\n\n if (!rootInstancesCount) {\n window.removeEventListener('keydown', onWindowKeyDown);\n window.removeEventListener('pointerdown', onWindowPointerDown);\n }\n\n if (timersController) {\n timersController.destroy();\n }\n });\n</script>\n\n{#if !hasError && rootStateDiv}\n <div\n class=\"{css.root}{$isDesktop ? ` ${css.root_platform_desktop}` : ''}{mix ? ` ${mix}` : ''}\"\n on:touchstart={emptyTouchstartHandler}\n >\n <RootSvgFilters {svgFiltersMap} />\n <Unknown div={rootStateDiv} {templateContext} />\n </div>\n{/if}\n","import type { DivJson } from '../../typings/common';\nimport { wrapError, WrappedError } from './wrapError';\nimport { TYPE_MAP } from '../components/typeMap';\n\n/**\n * Simple check for json card\n * @param json\n * @returns Error string or null if everything fine\n */\nexport function simpleCheckInput(json?: Partial<DivJson>): WrappedError | null {\n if (!json) {\n return wrapError(new Error('Missing object'));\n }\n\n const card = json.card;\n const templates = json.templates || {};\n\n if (!card) {\n return wrapError(new Error('Missing card'));\n }\n\n if (!card.states || !card.states.length) {\n return wrapError(new Error('Missing states'));\n }\n\n for (const templateName in templates) {\n if (templates.hasOwnProperty(templateName)) {\n if (templateName in TYPE_MAP) {\n return wrapError(new Error('Template name collision'), {\n additional: {\n templateName\n }\n });\n }\n }\n }\n\n for (let i = 0; i < card.states.length; ++i) {\n if (!card.states[i].div) {\n return wrapError(new Error('Missing state div'), {\n additional: {\n stateId: card.states[i].state_id\n }\n });\n }\n if (typeof card.states[i].state_id !== 'number') {\n return wrapError(new Error('Missing state_id'), {\n additional: {\n index: i\n }\n });\n }\n }\n\n return null;\n}\n","import Root from './components/Root.svelte';\nimport type { Platform, TypefaceProvider } from '../typings/common';\nimport type { GlobalVariablesController } from './expressions/globalVariablesController';\n\nexport function render(opts: {\n json: unknown;\n id: string;\n globalVariablesController?: GlobalVariablesController;\n mix?: string;\n customization?: unknown;\n builtinProtocols?: unknown;\n onError?: unknown;\n typefaceProvider?: TypefaceProvider;\n platform?: Platform;\n}) {\n // Root has client-side typings, not a server one\n return (Root as any).render({\n id: opts.id,\n json: opts.json,\n globalVariablesController: opts.globalVariablesController,\n mix: opts.mix,\n customization: opts.customization,\n builtinProtocols: opts.builtinProtocols,\n onError: opts.onError,\n typefaceProvider: opts.typefaceProvider,\n platform: opts.platform\n }).html;\n}\n\nexport {\n createGlobalVariablesController\n} from './expressions/globalVariablesController';\n\nexport {\n createVariable\n} from './expressions/variable';\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","noop","run","fn","run_all","fns","forEach","is_function","thing","subscribe","store","callbacks","unsub","unsubscribe","set_store_value","ret","value","set","current_component","set_current_component","component","get_current_component","Error","onDestroy","$$","on_destroy","push","setContext","context","getContext","Set","Map","dirty_components","binding_callbacks","render_callbacks","flush_callbacks","resolved_promise","Promise","resolve","update_scheduled","tick","then","flush","add_render_callback","seen_callbacks","flushidx","saved_component","length","update","e","pop","i","callback","has","add","clear","fragment","before_update","dirty","p","ctx","after_update","window","globalThis","global","boolean_attributes","invalid_attribute_name_character","spread","args","attrs_to_add","attributes","assign","classes_to_add","classes","styles_to_add","styles","class","style","style_object_to_string","style_attribute","style_directive","style_object","individual_style","split","colon_index","indexOf","name","slice","trim","merge_ssr_styles","str","keys","test","toLowerCase","ATTR_REGEX","CONTENT_REGEX","is_attr","String","pattern","lastIndex","escaped","last","ch","substring","escape_attribute_value","escape_object","result","each","items","missing_component","$$render","validate_component","SvelteElement","create_ssr_component","props","bindings","slots","parent_component","on_mount","create","html","render","$$slots","title","head","css","code","Array","from","map","join","add_attribute","boolean","filter","add_styles","HTMLElement","constructor","super","this","attachShadow","mode","connectedCallback","on_disconnect","slotted","appendChild","attributeChangedCallback","attr","_oldValue","newValue","disconnectedCallback","$destroy","detaching","filtered","targets","c","flush_render_callbacks","d","destroy_component","$on","type","index","splice","$set","$$props","$$set","skip_bound","subscriber_queue","writable","start","stop","subscribers","new_value","b","a","run_queue","subscriber","invalidate","size","delete","derived","stores","initial_value","single","isArray","stores_array","auto","started","values","pending","cleanup","sync","unsubscribers","ROOT_CTX","Symbol","wrapError","error","params","wrapped","level","additional","makeStyle","res","undefined","pxToEm","casted","Number","isNaN","Math","ceil","pxToEmWithUnits","padLeft","val","count","correctColor","color","alpha","defaultColor","charAt","parsedColor","parseColor","r","g","it","round","toString","toFixed","stringifyColorToCss","colorMatch","match","_","redPart","greenPart","bluePart","alphaPart","parseInt","htmlFilter","str2","replace","Truthy","Boolean","getBackground","bgs","position","bg","opts","pos","image","solid","_opts$bg","colors","angle","gradient","_opts$bg3","image_url","imageSize","scale","imagePos","_opts$bg2","sizeVal","radius","RELATIVE_SIZE_MAP","radialCenterToCss","center_x","center_y","radial","reverse","reduce","acc","item","nearest_corner","farthest_corner","nearest_side","farthest_side","center","hpos","vpos","content_alignment_horizontal","content_alignment_vertical","getUrlSchema","url","exec","isBuiltinSchema","schema","builtinSchemas","checkPercentage","isVisibility","defaultVal","list","genClassName","mods","STATE_CTX","edgeInsertsToCss","edgeInsets","top","right","bottom","left","isNumber","num","isNonNegativeNumber","correctEdgeInserts","correctNonNegativeNumber","isDeepEqual","is","keysA","keysB","assignIfDifferent","newVal","correctCSSInterpolator","interpolator","correctNumber","flattenAnimation","animation","correctEdgeInsertsObject","borderRadius","cornersRadius","defaultRadius","fontSize","doNothing","ACTION_CTX","actions","doubleTapActions","longTapActions","cls","attrs","use","customAction","isNativeActionAnimation","rootCtx","actionCtx","hasAction","target","href","hasJSAction","logError","getBuiltinProtocols","escape","rootCss","isPositiveNumber","getCssFilter","filters","background","stl","insets","opacity","_a","_b","_c","_d","_e","_f","json","origJson","templateContext","layoutParams","customDescription","customPaddings","customActions","additionalPaddings","heightByAspect","parentOf","replaceItems","HORIZONTAL_ALIGN_TO_GENERAL","VERTICAL_ALIGN_TO_GENERAL","baseline","stateCtx","currentNode","extensions","prevChilds","replaceWith","id","findIndex","newItems","width","widthMin","widthMax","height","heightMin","heightMax","backgroundStyle","hasSeparateBg","borderStyle","borderElemStyle","hasBorder","strokeWidth","strokeColor","cornerRadius","backgroundRadius","selfPadding","margin","widthMods","widthNum","widthFlexGrow","widthFlexShrink","widthFill","hasWidthError","heightMods","heightNum","heightFlexGrow","heightFlexShrink","heightFill","hasHeightError","jsonTransitionTriggers","fakeElement","transition_triggers","hasStateChangeTrigger","hasVisibilityChangeTrigger","stateChangingInProgress","visibilityChangingInProgress","transitionChangeInProgress","animationOpacityStart","animationOpacityEnd","animationScaleStart","animationScaleEnd","transformOrigin","transform","hasCustomFocus","focusActions","blurActions","actionAnimationList","actionAnimationTransition","isVisibilityInited","visibility","pivotXNum","pivotYNum","focusHandler","focus","$isPointerFocus","execAnyActions","blurHandler","unregisterParentOf","registerParentOf","jsonFocus","getDerivedFromVars","jsonBorder","border","$jsonFocus","$jsonBorder","newBorderStyle","newBorderElemStyle","newHasBorder","newBackgroundRadius","has_shadow","shadow","offset","x","y","blur","stroke","corners_radius","correctBorderRadiusObject","corner_radius","corner","jsonPaddings","paddings","$jsonPaddings","padding","side","aVal","bVal","sumEdgeInsets","jsonMargins","margins","$jsonMargins","jsonWidth","jsonAlignmentHorizontal","alignment_horizontal","widthType","newWidth","newWidthMin","newWidthMax","newWidthMods","newFlexGrow","newFlexShrink","newWidthFill","newWidthError","$jsonWidth","overlapParent","parentHorizontalWrapContent","parentContainerOrientation","parentContainerWrap","parentLayoutOrientation","weight","constrained","min_size","max_size","align","$jsonAlignmentHorizontal","parentHAlign","jsonHeight","jsonAlignmentVertical","alignment_vertical","heightType","newHeight","newHeightMin","newHeightMax","newHeightMods","newHeightFill","newHeightError","$jsonHeight","parentVerticalWrapContent","$jsonAlignmentVertical","parentVAlign","parentOverlapMod","parentOverlapAbsoluteMod","gridArea","rowSpan","colSpan","jsonAlpha","$jsonAlpha","jsonAccessibility","accessibility","$jsonAccessibility","description","jsonBackground","$jsonBackground","some","transition_in","isRunning","transition_change","hasTransitionChange","jsonAction","action","jsonActions","jsonDoubleTapActions","doubletap_actions","jsonLongTapActions","longtap_actions","newActions","$jsonActions","$jsonAction","newDoubleTapActions","$jsonDoubleTapActions","newLongTapActions","$jsonLongTapActions","newFocusActions","on_focus","newBlurActions","on_blur","jsonActionAnimation","action_animation","$jsonActionAnimation","startValue","start_value","endValue","end_value","delay","start_delay","duration","jsonVisibility","prevVisibility","nextVisibility","correctVisibility","$jsonVisibility","direction","transition","transition_out","runVisibilityTransition","catch","onVisibilityChange","scrollSnap","jsonTransform","$jsonTransform","rotation","pivotX","pivot_x","pivotXCSSValue","pivotY","pivot_y","flexBasis","isPointerFocus","node","registerChildWithTransitionIn","registerChildWithTransitionOut","registerChildWithTransitionChange","visibilityActions","visibility_actions","visibility_action","disappearActions","disappear_actions","visibilityStatus","visible","finished","calcedList","calced","getJsonWithVars","visibility_percentage","visibility_duration","disappear_duration","log_limit","_objectSpread","thresholds","IntersectionObserver","entries","entry","status","calcedParams","nowVisible","intersectionRatio","shouldProc","shouldClear","timer","setTimeout","limit","Infinity","calcedAction","actionUrl","execAction","log_id","execCustomAction","logStat","clearTimeout","threshold","observe","visibilityAction","registerChild","dev","getExtensionContext","instance","getExtension","mountView","destroy","unregisterChild","unmountView","correctPositiveNumber","fontWeightToCss","fontWeight","correctFontWeight","text","rootFontSize","textStyles","singleline","decoration","lineHeight","letterSpacing","fontFamily","newDecoration","underline","strike","font_size","line_height","letter_spacing","font_weight","font_family","typefaceProvider","text_color","topOffset","top_offset","correctAlignmentHorizontal","orientation","correctAlignmentVertical","correctBooleanInt","correctTintMode","tintMode","hasError","customLineHeight","maxHeight","lineClamp","multiline","halign","valign","rootTextColor","focusTextColor","selectable","renderList","usedTintColors","removeSvgFilter","jsonText","$jsonText","jsonRanges","ranges","jsonImages","images","jsonRootTextStyles","jsonTextSize","$jsonTextSize","jsonLineHeight","newLineHeight","$jsonLineHeight","jsonMaxLines","max_lines","$jsonMaxLines","newMaxHeight","newLineClamp","newMultiline","lines","$jsonRanges","$jsonImages","jsonHAlign","text_alignment_horizontal","$jsonHAlign","jsonVAlign","text_alignment_vertical","$jsonVAlign","isAllTextSameColor","end","jsonTextColor","isOnlyOneColorDefined","$jsonTextColor","newRootTextColor","jsonFocusTextColor","focused_text_color","$jsonFocusTextColor","jsonTruncate","truncate","$jsonTruncate","jsonTextGradient","text_gradient","newGradient","$jsonTextGradient","jsonSelectable","$jsonSelectable","textRanges","textImages","newRenderList","content","prevIndex","activeRanges","range","isStart","arrayIndex","sort","$jsonRootTextStyles","textStyles2","imageWidth","imageHeight","wrapperStyle","svgFilterId","tintColor","tint_color","tint_mode","addSvgFilter","updateRenderList","innerMods","prepareMargins","setAdditionalPadding","separator","crossAxis","hMargin","vMargin","show_at_start","show_at_end","calcItemsGap","lineSeparator","vals","separatorHMargins","separatorVMargins","lineSeparatorHMargins","lineSeparatorVMargins","show_between","correctDrawableStyle","drawable","availShapes","defaultValue","shape","includes","_shape$item_width","item_width","_shape$item_height","item_height","_shape$corner_radius$","_shape$corner_radius","_shape$radius","calcCircleSize","old","_stroke$width","borderColor","borderWidth","bgColor","background_color","boxShadow","calcDrawableStyle","hasGapSupport","flex","document","createElement","display","flexDirection","gap","body","scrollHeight","removeChild","appendSeparator","separators","separatorStyle","box0","box1","containingBox","leftMargin","rightMargin","topMargin","bottomMargin","max","appendSeparators","boxes","min","lastBox","throttledUpdated","timeout","prevRes","runTs","awaits","now","Date","abs","apply","arguments","simpleThrottle","parentElement","parentBbox","getBoundingClientRect","children","classList","contains","outerCss","rows","row","firstChild","shift","bbox","first","rowBoxes","elem","computed","getComputedStyle","parseFloat","marginTop","marginRight","marginBottom","marginLeft","getMarginBox","rowBox","mounted","mutationObserver","resizeObserver","disconnect","MutationObserver","records","record","childList","characterData","subtree","ResizeObserver","HALIGN_MAP","VALIGN_MAP","AVAIL_SEPARATOR_SHAPES","aspect","hasItemsError","contentVAlign","contentHAlign","childLayoutParams","jsonItems","childJson","childContext","processTemplate","jsonOrientation","correctContainerOrientation","$jsonOrientation","jsonContentVAlign","correctContentAlignmentVertical","$jsonContentVAlign","jsonContentHAlign","correctContentAlignmentHorizontal","$jsonContentHAlign","jsonLayoutMode","layout_mode","wrap","$jsonLayoutMode","jsonSeparator","$jsonSeparator","jsonLineSeparator","line_separator","$jsonLineSeparator","calcAdditionalPaddings","jsonAspect","newRatio","$jsonAspect","ratio","newChildLayoutParams","correctGeneralOrientation","jsonDelimiterStyle","delimiter_style","$jsonDelimiterStyle","hasContent","prepareBase64","data","startsWith","state","placeholderColor","backgroundImage","aspectPaddingBottom","animationInterpolator","animationFadeStart","animationDelay","animationDuration","filterClipPath","jsonImageUrl","jsonGifUrl","gif_url","imageUrl","$jsonImageUrl","$jsonGifUrl","isWidthContent","isHeightContent","jsonPreview","preview","$jsonPreview","jsonPlaceholderColor","placeholder_color","$jsonPlaceholderColor","jsonScale","$jsonScale","jsonPosition","correctImagePosition","$jsonPosition","jsonA11y","alt","$jsonA11y","jsonTintColor","jsonTintMode","newTintColor","$jsonTintColor","newTintMode","$jsonTintMode","jsonAppearanceAnimation","appearance_animation","$jsonAppearanceAnimation","jsonFilters","newFilter","newClipPath","$jsonFilters","loaded","isSpannedWeight","formatWeight","gridCalcTemplates","weights","minSizes","multiply","minSize","totalWeight","template","every","minTrackSize","childStore","resultItems","columnCount","columnsWeight","rowsWeight","columnsMinWidth","rowsMinHeight","rowCount","hasLayoutError","jsonColumnCount","column_count","$jsonColumnCount","row_span","columnSpan","column_span","used","childInfo","$childStore","widthWeight","heightWeight","j","joinTemplateSizes","sizes","temp","counter","debounce","scroller","itemsGridElem","galleryItemsWrappers","hasScrollLeft","hasScrollRight","leftClass","getCustomization","rightClass","isDesktop","gridGap","crossGridGap","crossSpacing","columns","itemSpacing","templateSizes","scrollerStyle","defaultItem","updateArrowsVisibilityDebounced","scrollLeft","scrollWidth","containerWidth","offsetWidth","getItems","maxLen","scrollToGalleryItem","galleryElements","behavior","isHorizontal","elementOffset","scrollDirection","scroll","calculateCurrentElementIndex","scrollerRect","firstFullyVisibleElement","el","checkIsFullyIntersecting","visibleElementsMap","checkIsIntersecting","firstVisibleElement","registerInstance","setCurrentItem","setPreviousItem","overflow","currentElementIndex","previousItem","setNextItem","isEdgeScroll","scrollTop","offsetHeight","nextItem","unregisterInstance","shouldCheckArrows","$isDesktop","itemsGrid","column","rebuildItemsGrid","jsonCrossContentAlignment","cross_content_alignment","correctAlignment","$jsonCrossContentAlignment","jsonItemSpacing","item_spacing","$jsonItemSpacing","jsonCrossSpacing","cross_spacing","$jsonCrossSpacing","gridTemplate","itemSize","jsonScrollMode","scroll_mode","newScrollerStyle","$jsonScrollMode","jsonRestrictParentScroll","restrict_parent_scroll","gridStyle","columnStyle","jsonDefaultItem","default_item","$jsonDefaultItem","$jsonRestrictParentScroll","itemsRow","rowIndex","instId","genId","tabsElem","panelsWrapper","swiperElem","jsonSelectedTab","selected_tab","tabActiveFontWeight","tabInactiveFontWeight","selected","tabFontSize","tabPaddings","tabLineHeight","tabLetterSpacing","tabBorderRadius","tabActiveFontFamily","tabInactiveFontFamily","tabActiveTextColor","tabInactiveTextColor","tabActiveBackground","tabInactiveBackground","tabItemSpacing","separatorBackground","separatorMargins","titlePadding","isSwipeInitialized","isAnimated","previousSelected","showedPanels","visiblePanels","setSelected","clientHeight","updateTransform","around","isShowed","updateShowedPanels","activePanel","getElementById","updateWrapperHeight","hidePanelsTimeout","currentTransform","clientWidth","selectedTab","querySelector","part","title_click_action","newLayoutParams","jsonTabStyle","tab_title_style","tabStyle","$jsonTabStyle","adjustedPaddings","correctBorderRadius","active_font_weight","inactive_font_weight","active_text_color","inactive_text_color","active_background_color","inactive_background_color","has_separator","jsonSeparatorColor","separator_color","jsonSeparatorPaddings","separator_paddings","$jsonSeparatorColor","$jsonSeparatorPaddings","jsonSwipeEnabled","switch_tabs_by_content_swipe_enabled","isSwipeEnabled","$jsonSwipeEnabled","jsonTitlePaddings","title_paddings","$jsonTitlePaddings","isSelected","actionable","role","tabindex","event","_event","selectItem","inited","animated","div","interpolateEasing","table","t","floor","t2","transitionChangeBoxes","childrenIds","childStateMap","animationList","childrenWithTransitionIn","childrenWithTransitionOut","childrenWithTransitionChange","stateId","div_id","selectedId","setRunning","resolvePromise","child","newState","find","state_id","selectedState","getChild","block","transitions","jsonDefaultStateId","default_state_id","states","initDefaultState","_selectedState","animationRoot","offsetLeft","offsetTop","Unknown","_g","pagerItemsWrapper","currentItem","prevSelectedItem","hasLayoutModeError","scrollToPagerItem","nextPagerItem","pagerElements","wrapperRect","gridAuto","neighbourPageWidth","neighbour_page_width","pageWidth","page_width","pagers","getStore","pagerId","newPagersMap","$pagers","pagerDataUpdate","selected_actions","runSelectedActions","AVAIL_SHAPES","indicatorItemsWrapper","pagerData","activeStyle","inactiveStyle","placement","spaceBetweenCenters","maxVisibleItems","jsonShape","jsonActiveItemColor","active_item_color","jsonInactiveItemColor","inactive_item_color","jsonActiveItemSize","active_item_size","jsonActiveShape","active_shape","jsonInactiveShape","inactive_shape","$jsonActiveShape","$jsonInactiveShape","$jsonShape","activeSize","$jsonActiveItemSize","$jsonInactiveItemColor","$jsonActiveItemColor","jsonSpaceBetweenCenters","space_between_centers","jsonItemsPlacement","items_placement","$jsonItemsPlacement","$jsonSpaceBetweenCenters","max_visible_items","pagersMap","pager_id","currentItemOffsetLeft","onPagerDataUpdate","isActiveItem","active","correctSliderTextStyle","textStyle","convertedColor","_offset$x","_offset$y","textColor","clamp","hasBigInt","BigInt","toBigIntNoCheck","MAX_INT","MIN_INT","toBigInt","bigIntZero","absBigInt","signBigInt","Variable","convertValue","getName","cb","fromString","setValue","converted","getValue","TYPE_TO_CLASS","string","getType","number","isFinite","integer","dict","_val","createVariable","fillTicks","to","minValue","maxValue","inside","DEFAULT_DRAWABLE_STYLE","THUMB_MARK_SHAPES","TRACK_SHAPES","tracksInner","firstVariable","thumb_value_variable","secondVariable","thumb_secondary_value_variable","getVariable","markActiveTicks","markInactiveTicks","$valueVariable","value2","$value2Variable","thumbStyle","thumbSecondaryStyle","trackInactiveStyle","trackActiveStyle","markActiveStyle","markInactiveStyle","textSecondaryStyle","secondaryDescription","isTicksWarning","checkTicks","ticksCount","activeTickWidth","inactiveTickWidth","jsonMinValue","min_value","jsonMaxValue","max_value","$jsonMinValue","$jsonMaxValue","newVal2","jsonThumbStyle","thumb_style","$jsonThumbStyle","jsonThumbSecondaryStyle","thumb_secondary_style","$jsonThumbSecondaryStyle","jsonTrackInactiveStyle","track_inactive_style","$jsonTrackInactiveStyle","jsonTrackActiveStyle","track_active_style","$jsonTrackActiveStyle","jsonMarkActiveStyle","tick_mark_active_style","newStyle","$jsonMarkActiveStyle","jsonMarkInactiveStyle","tick_mark_inactive_style","$jsonMarkInactiveStyle","jsonTextStyle","thumb_text_style","$jsonTextStyle","jsonSecondaryTextStyle","thumb_secondary_text_style","$jsonSecondaryTextStyle","jsonSecondaryAccessibility","secondary_value_accessibility","$jsonSecondaryAccessibility","newHasError","maxThumbWidth","maxThumbHeight","trackPart","trackSecondaryPart","trackActivePart","trackActiveOffset","_textStyle","_textStyle2","_textStyle3","_textSecondaryStyle","_textSecondaryStyle2","_textSecondaryStyle3","textDiff","added","removed","diff","leftIndex","rightIndex","lengthDiff","MaskCharStatic","char","MaskCharDynamic","placeholder","BaseInputMask","initialMaskData","_defineProperty","maskData","updateMaskData","cursorPosition","cursorPos","rawValue","collectValueRange","destructedValue","alwaysVisible","firstEmptyHolderIndex","maskChar","newMaskData","restoreValue","previousRawValue","decoding","maskKey","regexp","RegExp","err","onException","mappingItem","overrideRawValue","newRawValue","clearRange","replaceChars","applyChangeFrom","buildBodySubstring","tail","buildTailSubstring","fehi","maxShift","calculateMaxShift","tailStart","calculateCursorPosition","dynamicLeft","initialInsertableSubstring","calculateInsertableSubstring","holder","positionByDiff","firstHolderAfter","moveToAndGetNextHolderFilter","_this$destructedValue","maskCharFilter","trimmedSubstring","insertableCharIndex","FixedLengthInputMask","exception","CurrencyInputMask","locale","Intl","NumberFormat","initFormatter","updateCurrencyParams","currentValue","parseFormat","decimalSeparator","currencyFormatter","minimumFractionDigits","maximumFractionDigits","format","localeDigits","fill","trimZeroRegExp","invalidateMaskDataForFormatted","forValue","formatted","formatPattern","parsed","oldSeparatorIndex","lastIndexOf","newSeparatorIndex","needInvalidateMask","clearedValue","validFormat","isDigit","separatorOutOfDiffIndex","inDiff","replaceCharInDiff","maxSeparatorOffset","resolvedOptions","leftToInsert","oldSeparatorLeft","containsSeparator","separatorInserted","canInsertSeparator","countNodeChars","textContent","tagName","setSelectionOffset","nodeType","sel","getSelection","removeAllRanges","createRange","parent","parentNode","childNodes","setStart","setEnd","addRange","len","input","inputMask","variable","text_variable","rawVariable","mask","raw_text_variable","valueVariable","rawValueVariable","contentEditableValue","hint_text","hint_color","hintColor","highlight_color","highlightColor","alignmentHorizontal","alignmentVertical","keyboard_type","KEYBOARD_MAP","email","phone","single_line_text","multi_line_text","uri","keyboardType","inputType","isSupportInputMode","inputMode","max_visible_lines","verticalPadding","setCursorPosition","HTMLInputElement","selectionStart","selectionEnd","runRawValueMask","$rawValueVariable","activeElement","select_all_on_focus","$jsonMask","oldValue","pattern_elements","always_visible","regex","updateFixedMask","updateCurrencyMask","$jsonHintText","$jsonHintColor","$jsonFontSize","$jsonFontWeight","$jsonFontFamily","$jsonLetterSpacing","$jsonHighlightColor","$jsonKeyboardType","isMultiline","$jsonVisibleMaxLines","paddingStl","verticalPaddingStl","$$value","value_variable","options","filteredItems","selectText","hint","innerStl","selectStl","isSelfVariableSet","video_sources","sources","repeatable","loop","autostart","autoplay","muted","poster","elapsedVariableName","elapsed_time_variable","pause","$jsonSource","mime_type","src","$jsonRepeatable","$jsonAutostart","$jsonMuted","videoElem","source","TYPE_MAP","Text","container","Container","Separator","Image","gif","grid","Grid","gallery","Gallery","tabs","Tabs","State","pager","Pager","indicator","Indicator","slider","Slider","Input","select","Select","video","Video","hasTemplate","svgFiltersMap","filterKey","filterColor","filterMode","applyTemplate","templates","newContext","newJson","copyTemplated","base","extender","simpleKeys","templateKeys","voidUnsubscribe","constStore","buildBinaryExpression","element","operator","buildLogicalExpression","buildString","quasis","expressions","convertToInt64","_err","escapeChar","peg$SyntaxError","message","expected","found","location","self","setPrototypeOf","peg$padEnd","targetLength","padString","repeat","peg$parse","peg$result","peg$FAILED","peg$source","grammarSource","peg$startRuleFunctions","peg$parsestart","JsonStringContents","s0","s1","s2","peg$currPos","peg$parseJsonStringChar","peg$savedPos","peg$f1","peg$startRuleFunction","peg$c0","peg$c1","peg$c2","peg$c3","peg$c4","peg$c5","peg$c6","peg$c7","peg$c8","peg$c9","peg$c10","peg$c11","peg$c12","peg$c13","peg$c14","peg$c15","peg$c16","peg$c17","peg$c18","peg$c19","peg$c20","peg$c21","peg$c22","peg$c23","peg$c24","peg$c25","peg$c26","peg$c27","peg$c28","peg$r0","peg$r1","peg$r2","peg$r3","peg$r4","peg$r5","peg$e0","peg$literalExpectation","peg$e1","peg$e2","peg$e3","peg$e4","peg$e5","peg$classExpectation","peg$e6","peg$e7","peg$e8","peg$e9","peg$e10","peg$e11","peg$e12","peg$e13","peg$e14","peg$e15","peg$e16","peg$e17","peg$e18","peg$e19","peg$e20","peg$e21","peg$e22","peg$e23","peg$e24","peg$e25","peg$otherExpectation","peg$e26","peg$e27","peg$e28","peg$e29","peg$e30","peg$e31","peg$e32","peg$e33","peg$e34","peg$e35","peg$e36","peg$e37","peg$e38","peg$e39","peg$e40","peg$e41","peg$f0","expr","peg$f2","peg$f3","peg$f4","peg$f5","peg$f6","peg$f7","peg$f8","peg$f9","peg$f10","second","consequent","alternate","peg$f11","peg$f12","peg$f13","peg$f14","peg$f15","peg$f16","peg$f17","op","argument","peg$f18","callee","peg$f19","peg$f20","peg$f21","peg$f22","peg$f23","peg$f24","peg$f25","peg$f26","peg$f27","peg$f28","peg$f29","peg$f30","peg$f31","peg$f32","peg$f33","peg$f34","peg$f35","peg$f36","peg$f37","peg$posDetailsCache","line","peg$maxFailPos","peg$maxFailExpected","peg$silentFails","startRule","ignoreCase","parts","inverted","peg$computePosDetails","details","charCodeAt","peg$computeLocation","startPos","endPos","startPosDetails","endPosDetails","peg$fail","peg$parse_","peg$parseExpression","s3","s5","substr","s7","s9","peg$parseOr","s4","s6","peg$parseAnd","peg$parseEqual","peg$parseComparison","peg$parseSum","peg$parseFactor","peg$parseUnary","peg$parseNumber","peg$parseInteger","peg$parseIdentifier","peg$parseArguments","peg$parseStringChar","peg$parseStringContents","peg$parseString","peg$parseBoolean","peg$parsePrimaryExpression","peg$parseCall","s8","peg$parseReservedWord","buildMessage","peg$buildStructuredError","C","peg$subclass","k","s","offset_s","loc","filler","hatLen","DESCRIBE_EXPECTATION_FNS","literal","expectation","literalEscape","escapedParts","classEscape","any","other","hex","toUpperCase","describeExpectation","descriptions","describeExpected","describeFound","funcs","funcByArgs","registerFunc","desc","arr","funcKey","matchFuncArgs","func","minArgs","maxArgs","lastArg","isVararg","funcArg","walk","ast","visitors","_visitors$ast$type","valToInternal","dateToString","date","toISOString","valToString","stringifyColor","safeConvertColor","valToPreview","typeToString","roundInteger","checkIntegerOverflow","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","safeIntegerOverflow","gatherVarsFromAst","evalError","msg","transformColorValue","MAX_NUMBER","MAX_VALUE","MIN_NUMBER","MIN_VALUE","STRING","INTEGER","NUMBER","BOOLEAN","COLOR","URL","DATETIME","DICT","_ctx","arg","toNumber","getValueForced","varName","fallback","variables","getColorValue","getUrlValue","getter","method","datetime","getTime","getYear","getMonth","getDay","getDayOfWeek","getHours","getMinutes","getSeconds","getMillis","calcPad","pad","warnings","padStart","prefix","padEnd","suffix","colorGetter","field","_vars","colorSetter","getColorAlpha","getColorRed","getColorGreen","getColorBlue","setColorAlpha","setColorRed","setColorGreen","setColorBlue","getDuration","milliseconds","delimiter","whole","MS_IN_HOUR","dictGetter","jsType","runtimeType","path","current","getProp","optWrapper","fallbackType","getDictString","getDictNumber","getDictInteger","getDictBoolean","getDictColor","getDictUrl","getDictOptString","getDictOptNumber","getDictOptInteger","getDictOptBoolean","getDictOptColor","getDictOptUrl","argsToStr","intVal","encodeURIComponent","decodeURIComponent","year","copy","setUTCFullYear","month","setUTCMonth","day","getUTCMonth","setUTCDate","getUTCDate","getMaxDate","hours","setUTCHours","minutes","setUTCMinutes","seconds","setUTCSeconds","millis","setUTCMilliseconds","wholeStr","partStr","what","replacer","escapeRegExp","re","arg0","arg1","sign","red","green","blue","EVAL_MAP","StringLiteral","NumberLiteral","IntegerLiteral","BooleanLiteral","UnaryExpression","evalAny","mul","ConditionalExpression","TemplateLiteral","LogicalExpression","BinaryExpression","evalBinaryEquality","leftVal","rightVal","evalBinaryCompare","evalBinarySum","evalBinaryFactor","CallExpression","funcName","findRes","firstError","findBestMatchedFunc","argsType","variableToValue","evalExpression","vars","unknownVariableName","checkVariables","ExpressionBinding","containsUnsetVariables","prepareVarsObj","jsonProp","hasExpression","parse","propVars","expression","applyVars","prepareVars","root","storesMap","controllerToStore","controllerToVars","getControllerStore","controller","getControllerVars","GlobalVariablesController","setVariable","variableName","createGlobalVariablesController","AVAIL_ACTIONS","TimersController","hasVariableWithType","setVariableValue","visibilityHandler","visibilityState","awaitActions","execTimerAction","unholdAll","holdAll","addEventListener","removeEventListener","_id","timers","stopTimerTimeouts","createTimer","tick_interval","tick_actions","actionTyped","durationTimeout","tickTimeout","tickOrUnholdAction","performance","durationPassed","durationStarted","updateVariable","callActions","tickCount","startOrResume","hold","tickCountPredict","startTick","tickStarted","tickPassed","resume","cancel","reset","actionsWithExpressions","rootInstancesCount","onWindowKeyDown","onWindowPointerDown","platform","theme","globalVariablesController","mix","customization","builtinProtocols","onError","onStat","onCustomAction","onComponent","_fontFamily","fetchInit","matchMedia","touchQuery","matches","addListener","currentTheme","themeQuery","setTheme","newTheme","getDebugVariables","builtinSet","initialError","card","templateName","simpleCheckInput","running","stateChange","globalVariablesStore","globalVariables","localVariables","awaitingGlobalVariables","timersController","prepared","console","warn","idCounter","svgFilterUsages","URLSearchParams","stateInterface","divId","selectedStateId","childState","setState","getInstance","variableInstance","timerAction","callVideoAction","init","fetch","ok","patch","changes","failed","change","parentOfMap","download_callbacks","on_fail_actions","methods","on_success_actions","originalError","callDownloadAction","processUrls","win","open","opener","instancesMap","filterDefinedVars","usedTypes","genClass","filterId","awaitVariableChanges","setStore","foundType","Builder","registerComponent","unregisterComponent","_stateId","_json","_templateContext","_transitions","_node","_direction","startVariables","varInstance","palette","newVarName","awaitingStore","variableTriggers","variable_triggers","trigger","prevConditionResult","condition","exprVars","remaining","waitForVars","conditionResult","resultAction","rootStateDiv","RootSvgFilters","$$result","Root"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"server.mjs","mappings":"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AQ,MAAQ,MAChD,MAAQ,KAAQ,MAAQ,MAAQ,KAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAChD,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAChD,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,EAAQ,ICGNA,GAhCR,CACV,KAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MACxC,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,KAAQ,KAChD,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAChD,MAAQ,MAAQ,MAAQ,KAAQ,KAAQ,KAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,KAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,KA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","sources":["webpack://@divkitframework/divkit/webpack/bootstrap","webpack://@divkitframework/divkit/webpack/runtime/define property getters","webpack://@divkitframework/divkit/webpack/runtime/hasOwnProperty shorthand","webpack://@divkitframework/divkit/./node_modules/svelte/src/runtime/internal/loop.js","webpack://@divkitframework/divkit/./node_modules/svelte/src/runtime/internal/globals.js","webpack://@divkitframework/divkit/./node_modules/svelte/src/runtime/internal/ResizeObserverSingleton.js","webpack://@divkitframework/divkit/./node_modules/svelte/src/runtime/internal/utils.js","webpack://@divkitframework/divkit/./node_modules/svelte/src/runtime/internal/lifecycle.js","webpack://@divkitframework/divkit/./node_modules/svelte/src/runtime/internal/style_manager.js","webpack://@divkitframework/divkit/./node_modules/svelte/src/runtime/internal/scheduler.js","webpack://@divkitframework/divkit/./node_modules/svelte/src/runtime/internal/transitions.js","webpack://@divkitframework/divkit/./node_modules/svelte/src/shared/boolean_attributes.js","webpack://@divkitframework/divkit/./node_modules/svelte/src/runtime/internal/ssr.js","webpack://@divkitframework/divkit/./node_modules/svelte/src/runtime/internal/each.js","webpack://@divkitframework/divkit/./node_modules/svelte/src/runtime/internal/Component.js","webpack://@divkitframework/divkit/./node_modules/svelte/src/runtime/internal/dom.js","webpack://@divkitframework/divkit/./node_modules/svelte/src/runtime/store/index.js","webpack://@divkitframework/divkit/./src/components/Root.module.css","webpack://@divkitframework/divkit/./src/context/root.ts","webpack://@divkitframework/divkit/./src/utils/wrapError.ts","webpack://@divkitframework/divkit/./src/components/text/Text.module.css","webpack://@divkitframework/divkit/./src/components/utilities/Outer.module.css","webpack://@divkitframework/divkit/./src/utils/makeStyle.ts","webpack://@divkitframework/divkit/./src/utils/pxToEm.ts","webpack://@divkitframework/divkit/./src/utils/padLeft.ts","webpack://@divkitframework/divkit/./src/utils/correctColor.ts","webpack://@divkitframework/divkit/./src/utils/htmlFilter.ts","webpack://@divkitframework/divkit/./src/utils/truthy.ts","webpack://@divkitframework/divkit/./src/utils/background.ts","webpack://@divkitframework/divkit/./src/utils/url.ts","webpack://@divkitframework/divkit/./src/use/visibilityAction.ts","webpack://@divkitframework/divkit/./src/utils/genClassName.ts","webpack://@divkitframework/divkit/./src/use/devtool.ts","webpack://@divkitframework/divkit/./src/context/state.ts","webpack://@divkitframework/divkit/./src/utils/edgeInsertsToCss.ts","webpack://@divkitframework/divkit/./src/utils/isNumber.ts","webpack://@divkitframework/divkit/./src/utils/isNonNegativeNumber.ts","webpack://@divkitframework/divkit/./src/utils/correctEdgeInserts.ts","webpack://@divkitframework/divkit/./src/utils/correctNonNegativeNumber.ts","webpack://@divkitframework/divkit/./src/utils/isDeepEqual.ts","webpack://@divkitframework/divkit/./src/utils/assignIfDifferent.ts","webpack://@divkitframework/divkit/./src/utils/correctCSSInterpolator.ts","webpack://@divkitframework/divkit/./src/utils/correctNumber.ts","webpack://@divkitframework/divkit/./src/utils/flattenAnimation.ts","webpack://@divkitframework/divkit/./src/utils/correctEdgeInsertsObject.ts","webpack://@divkitframework/divkit/./src/utils/borderRadius.ts","webpack://@divkitframework/divkit/./src/utils/doNothing.ts","webpack://@divkitframework/divkit/./src/context/action.ts","webpack://@divkitframework/divkit/./src/components/utilities/Actionable.svelte","webpack://@divkitframework/divkit/./src/components/utilities/OuterBackground.module.css","webpack://@divkitframework/divkit/./src/utils/isPositiveNumber.ts","webpack://@divkitframework/divkit/./src/utils/filters.ts","webpack://@divkitframework/divkit/./src/components/utilities/OuterBackground.svelte","webpack://@divkitframework/divkit/./src/components/utilities/Outer.svelte","webpack://@divkitframework/divkit/./src/utils/correctBorderRadiusObject.ts","webpack://@divkitframework/divkit/./src/utils/sumEdgeInsets.ts","webpack://@divkitframework/divkit/./src/utils/correctAlpha.ts","webpack://@divkitframework/divkit/./src/utils/correctVisibility.ts","webpack://@divkitframework/divkit/./src/components/text/TextRange.module.css","webpack://@divkitframework/divkit/./src/utils/correctPositiveNumber.ts","webpack://@divkitframework/divkit/./src/utils/fontWeightToCss.ts","webpack://@divkitframework/divkit/./src/utils/correctFontWeight.ts","webpack://@divkitframework/divkit/./src/components/text/TextRange.svelte","webpack://@divkitframework/divkit/./src/utils/correctAlignmentHorizontal.ts","webpack://@divkitframework/divkit/./src/utils/correctAlignmentVertical.ts","webpack://@divkitframework/divkit/./src/utils/correctBooleanInt.ts","webpack://@divkitframework/divkit/./src/utils/correctTintMode.ts","webpack://@divkitframework/divkit/./src/components/text/Text.svelte","webpack://@divkitframework/divkit/./src/utils/propToString.ts","webpack://@divkitframework/divkit/./src/components/container/Container.module.css","webpack://@divkitframework/divkit/./src/utils/container.ts","webpack://@divkitframework/divkit/./src/utils/correctDrawableStyles.ts","webpack://@divkitframework/divkit/./src/utils/hasGapSupport.ts","webpack://@divkitframework/divkit/./src/components/container/ContainerSeparator.module.css","webpack://@divkitframework/divkit/./src/components/container/ContainerSeparators.svelte","webpack://@divkitframework/divkit/./src/utils/simpleThrottle.ts","webpack://@divkitframework/divkit/./src/utils/getMarginBox.ts","webpack://@divkitframework/divkit/./src/components/container/Container.svelte","webpack://@divkitframework/divkit/./src/utils/correctContainerOrientation.ts","webpack://@divkitframework/divkit/./src/utils/correctContentAlignmentVertical.ts","webpack://@divkitframework/divkit/./src/utils/correctContentAlignmentHorizontal.ts","webpack://@divkitframework/divkit/./src/components/separator/Separator.module.css","webpack://@divkitframework/divkit/./src/utils/correctGeneralOrientation.ts","webpack://@divkitframework/divkit/./src/components/separator/Separator.svelte","webpack://@divkitframework/divkit/./src/components/image/Image.module.css","webpack://@divkitframework/divkit/./src/utils/prepareBase64.ts","webpack://@divkitframework/divkit/./src/components/image/Image.svelte","webpack://@divkitframework/divkit/./src/utils/correctImagePosition.ts","webpack://@divkitframework/divkit/./src/components/grid/Grid.module.css","webpack://@divkitframework/divkit/./src/utils/gridCalcTemplates.ts","webpack://@divkitframework/divkit/./src/components/grid/Grid.svelte","webpack://@divkitframework/divkit/./src/components/gallery/Gallery.module.css","webpack://@divkitframework/divkit/./src/utils/joinTemplateSizes.ts","webpack://@divkitframework/divkit/./src/utils/debounce.ts","webpack://@divkitframework/divkit/./src/components/gallery/Gallery.svelte","webpack://@divkitframework/divkit/./src/utils/correctAlignment.ts","webpack://@divkitframework/divkit/./src/components/tabs/Tabs.module.css","webpack://@divkitframework/divkit/./src/components/tabs/Tabs.svelte","webpack://@divkitframework/divkit/./src/utils/correctBorderRadius.ts","webpack://@divkitframework/divkit/./src/components/state/State.module.css","webpack://@divkitframework/divkit/./src/utils/easings/interpolateEasing.ts","webpack://@divkitframework/divkit/./src/utils/easings/ease.ts","webpack://@divkitframework/divkit/./src/utils/easings/spring.ts","webpack://@divkitframework/divkit/./src/components/tooltip/Tooltip.module.css","webpack://@divkitframework/divkit/./src/components/tooltip/Tooltip.svelte","webpack://@divkitframework/divkit/./src/components/state/State.svelte","webpack://@divkitframework/divkit/./src/components/pager/Pager.module.css","webpack://@divkitframework/divkit/./src/components/pager/Pager.svelte","webpack://@divkitframework/divkit/./src/components/indicator/Indicator.module.css","webpack://@divkitframework/divkit/./src/components/indicator/Indicator.svelte","webpack://@divkitframework/divkit/./src/components/slider/Slider.module.css","webpack://@divkitframework/divkit/./src/utils/correctSliderTextStyle.ts","webpack://@divkitframework/divkit/./src/utils/clamp.ts","webpack://@divkitframework/divkit/./src/expressions/bigint.ts","webpack://@divkitframework/divkit/./src/expressions/variable.ts","webpack://@divkitframework/divkit/./src/components/slider/Slider.svelte","webpack://@divkitframework/divkit/./src/components/input/Input.module.css","webpack://@divkitframework/divkit/./src/utils/textDiff.ts","webpack://@divkitframework/divkit/./src/utils/mask/baseInputMask.ts","webpack://@divkitframework/divkit/./src/utils/mask/fixedLengthInputMask.ts","webpack://@divkitframework/divkit/./src/utils/mask/currencyInputMask.ts","webpack://@divkitframework/divkit/./src/utils/contenteditable.ts","webpack://@divkitframework/divkit/./src/components/input/Input.svelte","webpack://@divkitframework/divkit/./src/utils/updateFixedMask.ts","webpack://@divkitframework/divkit/./src/utils/updateCurrencyMask.ts","webpack://@divkitframework/divkit/./src/components/select/Select.module.css","webpack://@divkitframework/divkit/./src/components/select/Select.svelte","webpack://@divkitframework/divkit/./src/components/video/Video.module.css","webpack://@divkitframework/divkit/./src/components/video/Video.svelte","webpack://@divkitframework/divkit/./src/utils/correctVideoSource.ts","webpack://@divkitframework/divkit/./src/components/typeMap.ts","webpack://@divkitframework/divkit/./src/components/utilities/Unknown.svelte","webpack://@divkitframework/divkit/./src/components/utilities/RootSvgFilters.svelte","webpack://@divkitframework/divkit/./src/components/utilities/RootSvgFilters.module.css","webpack://@divkitframework/divkit/./src/utils/applyTemplate.ts","webpack://@divkitframework/divkit/./src/utils/constStore.ts","webpack://@divkitframework/divkit/./src/expressions/expressions.js","webpack://@divkitframework/divkit/./src/expressions/funcs/funcs.ts","webpack://@divkitframework/divkit/./src/expressions/walk.ts","webpack://@divkitframework/divkit/./src/expressions/utils.ts","webpack://@divkitframework/divkit/./src/expressions/const.ts","webpack://@divkitframework/divkit/./src/expressions/funcs/std.ts","webpack://@divkitframework/divkit/./src/expressions/funcs/datetime.ts","webpack://@divkitframework/divkit/./src/expressions/funcs/strings.ts","webpack://@divkitframework/divkit/./src/expressions/funcs/colors.ts","webpack://@divkitframework/divkit/./src/expressions/funcs/interval.ts","webpack://@divkitframework/divkit/./src/expressions/funcs/dict.ts","webpack://@divkitframework/divkit/./src/expressions/eval.ts","webpack://@divkitframework/divkit/./src/utils/escapeRegExp.ts","webpack://@divkitframework/divkit/./src/expressions/funcs/math.ts","webpack://@divkitframework/divkit/./src/expressions/json.ts","webpack://@divkitframework/divkit/./src/utils/uniq.ts","webpack://@divkitframework/divkit/./src/stores/index.ts","webpack://@divkitframework/divkit/./src/stores/pagers.ts","webpack://@divkitframework/divkit/./src/expressions/globalVariablesController.ts","webpack://@divkitframework/divkit/./src/utils/timers.ts","webpack://@divkitframework/divkit/./src/components/Root.svelte","webpack://@divkitframework/divkit/./src/utils/simpleCheckInput.ts","webpack://@divkitframework/divkit/./src/server.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import { raf } from './environment.js';\n\nconst tasks = new Set();\n\n/**\n * @param {number} now\n * @returns {void}\n */\nfunction run_tasks(now) {\n\ttasks.forEach((task) => {\n\t\tif (!task.c(now)) {\n\t\t\ttasks.delete(task);\n\t\t\ttask.f();\n\t\t}\n\t});\n\tif (tasks.size !== 0) raf(run_tasks);\n}\n\n/**\n * For testing purposes only!\n * @returns {void}\n */\nexport function clear_loops() {\n\ttasks.clear();\n}\n\n/**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\n * @param {import('./private.js').TaskCallback} callback\n * @returns {import('./private.js').Task}\n */\nexport function loop(callback) {\n\t/** @type {import('./private.js').TaskEntry} */\n\tlet task;\n\tif (tasks.size === 0) raf(run_tasks);\n\treturn {\n\t\tpromise: new Promise((fulfill) => {\n\t\t\ttasks.add((task = { c: callback, f: fulfill }));\n\t\t}),\n\t\tabort() {\n\t\t\ttasks.delete(task);\n\t\t}\n\t};\n}\n","/** @type {typeof globalThis} */\nexport const globals =\n\ttypeof window !== 'undefined'\n\t\t? window\n\t\t: typeof globalThis !== 'undefined'\n\t\t? globalThis\n\t\t: // @ts-ignore Node typings have this\n\t\t global;\n","import { globals } from './globals.js';\n\n/**\n * Resize observer singleton.\n * One listener per element only!\n * https://groups.google.com/a/chromium.org/g/blink-dev/c/z6ienONUb5A/m/F5-VcUZtBAAJ\n */\nexport class ResizeObserverSingleton {\n\t/**\n\t * @private\n\t * @readonly\n\t * @type {WeakMap<Element, import('./private.js').Listener>}\n\t */\n\t_listeners = 'WeakMap' in globals ? new WeakMap() : undefined;\n\n\t/**\n\t * @private\n\t * @type {ResizeObserver}\n\t */\n\t_observer = undefined;\n\n\t/** @type {ResizeObserverOptions} */\n\toptions;\n\n\t/** @param {ResizeObserverOptions} options */\n\tconstructor(options) {\n\t\tthis.options = options;\n\t}\n\n\t/**\n\t * @param {Element} element\n\t * @param {import('./private.js').Listener} listener\n\t * @returns {() => void}\n\t */\n\tobserve(element, listener) {\n\t\tthis._listeners.set(element, listener);\n\t\tthis._getObserver().observe(element, this.options);\n\t\treturn () => {\n\t\t\tthis._listeners.delete(element);\n\t\t\tthis._observer.unobserve(element); // this line can probably be removed\n\t\t};\n\t}\n\n\t/**\n\t * @private\n\t */\n\t_getObserver() {\n\t\treturn (\n\t\t\tthis._observer ??\n\t\t\t(this._observer = new ResizeObserver((entries) => {\n\t\t\t\tfor (const entry of entries) {\n\t\t\t\t\tResizeObserverSingleton.entries.set(entry.target, entry);\n\t\t\t\t\tthis._listeners.get(entry.target)?.(entry);\n\t\t\t\t}\n\t\t\t}))\n\t\t);\n\t}\n}\n\n// Needs to be written like this to pass the tree-shake-test\nResizeObserverSingleton.entries = 'WeakMap' in globals ? new WeakMap() : undefined;\n","/** @returns {void} */\nexport function noop() {}\n\nexport const identity = (x) => x;\n\n/**\n * @template T\n * @template S\n * @param {T} tar\n * @param {S} src\n * @returns {T & S}\n */\nexport function assign(tar, src) {\n\t// @ts-ignore\n\tfor (const k in src) tar[k] = src[k];\n\treturn /** @type {T & S} */ (tar);\n}\n\n// Adapted from https://github.com/then/is-promise/blob/master/index.js\n// Distributed under MIT License https://github.com/then/is-promise/blob/master/LICENSE\n/**\n * @param {any} value\n * @returns {value is PromiseLike<any>}\n */\nexport function is_promise(value) {\n\treturn (\n\t\t!!value &&\n\t\t(typeof value === 'object' || typeof value === 'function') &&\n\t\ttypeof (/** @type {any} */ (value).then) === 'function'\n\t);\n}\n\n/** @returns {void} */\nexport function add_location(element, file, line, column, char) {\n\telement.__svelte_meta = {\n\t\tloc: { file, line, column, char }\n\t};\n}\n\nexport function run(fn) {\n\treturn fn();\n}\n\nexport function blank_object() {\n\treturn Object.create(null);\n}\n\n/**\n * @param {Function[]} fns\n * @returns {void}\n */\nexport function run_all(fns) {\n\tfns.forEach(run);\n}\n\n/**\n * @param {any} thing\n * @returns {thing is Function}\n */\nexport function is_function(thing) {\n\treturn typeof thing === 'function';\n}\n\n/** @returns {boolean} */\nexport function safe_not_equal(a, b) {\n\treturn a != a ? b == b : a !== b || (a && typeof a === 'object') || typeof a === 'function';\n}\n\nlet src_url_equal_anchor;\n\n/**\n * @param {string} element_src\n * @param {string} url\n * @returns {boolean}\n */\nexport function src_url_equal(element_src, url) {\n\tif (element_src === url) return true;\n\tif (!src_url_equal_anchor) {\n\t\tsrc_url_equal_anchor = document.createElement('a');\n\t}\n\t// This is actually faster than doing URL(..).href\n\tsrc_url_equal_anchor.href = url;\n\treturn element_src === src_url_equal_anchor.href;\n}\n\n/** @param {string} srcset */\nfunction split_srcset(srcset) {\n\treturn srcset.split(',').map((src) => src.trim().split(' ').filter(Boolean));\n}\n\n/**\n * @param {HTMLSourceElement | HTMLImageElement} element_srcset\n * @param {string | undefined | null} srcset\n * @returns {boolean}\n */\nexport function srcset_url_equal(element_srcset, srcset) {\n\tconst element_urls = split_srcset(element_srcset.srcset);\n\tconst urls = split_srcset(srcset || '');\n\n\treturn (\n\t\turls.length === element_urls.length &&\n\t\turls.every(\n\t\t\t([url, width], i) =>\n\t\t\t\twidth === element_urls[i][1] &&\n\t\t\t\t// We need to test both ways because Vite will create an a full URL with\n\t\t\t\t// `new URL(asset, import.meta.url).href` for the client when `base: './'`, and the\n\t\t\t\t// relative URLs inside srcset are not automatically resolved to absolute URLs by\n\t\t\t\t// browsers (in contrast to img.src). This means both SSR and DOM code could\n\t\t\t\t// contain relative or absolute URLs.\n\t\t\t\t(src_url_equal(element_urls[i][0], url) || src_url_equal(url, element_urls[i][0]))\n\t\t)\n\t);\n}\n\n/** @returns {boolean} */\nexport function not_equal(a, b) {\n\treturn a != a ? b == b : a !== b;\n}\n\n/** @returns {boolean} */\nexport function is_empty(obj) {\n\treturn Object.keys(obj).length === 0;\n}\n\n/** @returns {void} */\nexport function validate_store(store, name) {\n\tif (store != null && typeof store.subscribe !== 'function') {\n\t\tthrow new Error(`'${name}' is not a store with a 'subscribe' method`);\n\t}\n}\n\nexport function subscribe(store, ...callbacks) {\n\tif (store == null) {\n\t\tfor (const callback of callbacks) {\n\t\t\tcallback(undefined);\n\t\t}\n\t\treturn noop;\n\t}\n\tconst unsub = store.subscribe(...callbacks);\n\treturn unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\n\n/**\n * Get the current value from a store by subscribing and immediately unsubscribing.\n *\n * https://svelte.dev/docs/svelte-store#get\n * @template T\n * @param {import('../store/public.js').Readable<T>} store\n * @returns {T}\n */\nexport function get_store_value(store) {\n\tlet value;\n\tsubscribe(store, (_) => (value = _))();\n\treturn value;\n}\n\n/** @returns {void} */\nexport function component_subscribe(component, store, callback) {\n\tcomponent.$$.on_destroy.push(subscribe(store, callback));\n}\n\nexport function create_slot(definition, ctx, $$scope, fn) {\n\tif (definition) {\n\t\tconst slot_ctx = get_slot_context(definition, ctx, $$scope, fn);\n\t\treturn definition[0](slot_ctx);\n\t}\n}\n\nfunction get_slot_context(definition, ctx, $$scope, fn) {\n\treturn definition[1] && fn ? assign($$scope.ctx.slice(), definition[1](fn(ctx))) : $$scope.ctx;\n}\n\nexport function get_slot_changes(definition, $$scope, dirty, fn) {\n\tif (definition[2] && fn) {\n\t\tconst lets = definition[2](fn(dirty));\n\t\tif ($$scope.dirty === undefined) {\n\t\t\treturn lets;\n\t\t}\n\t\tif (typeof lets === 'object') {\n\t\t\tconst merged = [];\n\t\t\tconst len = Math.max($$scope.dirty.length, lets.length);\n\t\t\tfor (let i = 0; i < len; i += 1) {\n\t\t\t\tmerged[i] = $$scope.dirty[i] | lets[i];\n\t\t\t}\n\t\t\treturn merged;\n\t\t}\n\t\treturn $$scope.dirty | lets;\n\t}\n\treturn $$scope.dirty;\n}\n\n/** @returns {void} */\nexport function update_slot_base(\n\tslot,\n\tslot_definition,\n\tctx,\n\t$$scope,\n\tslot_changes,\n\tget_slot_context_fn\n) {\n\tif (slot_changes) {\n\t\tconst slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn);\n\t\tslot.p(slot_context, slot_changes);\n\t}\n}\n\n/** @returns {void} */\nexport function update_slot(\n\tslot,\n\tslot_definition,\n\tctx,\n\t$$scope,\n\tdirty,\n\tget_slot_changes_fn,\n\tget_slot_context_fn\n) {\n\tconst slot_changes = get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_fn);\n\tupdate_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn);\n}\n\n/** @returns {any[] | -1} */\nexport function get_all_dirty_from_scope($$scope) {\n\tif ($$scope.ctx.length > 32) {\n\t\tconst dirty = [];\n\t\tconst length = $$scope.ctx.length / 32;\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tdirty[i] = -1;\n\t\t}\n\t\treturn dirty;\n\t}\n\treturn -1;\n}\n\n/** @returns {{}} */\nexport function exclude_internal_props(props) {\n\tconst result = {};\n\tfor (const k in props) if (k[0] !== '$') result[k] = props[k];\n\treturn result;\n}\n\n/** @returns {{}} */\nexport function compute_rest_props(props, keys) {\n\tconst rest = {};\n\tkeys = new Set(keys);\n\tfor (const k in props) if (!keys.has(k) && k[0] !== '$') rest[k] = props[k];\n\treturn rest;\n}\n\n/** @returns {{}} */\nexport function compute_slots(slots) {\n\tconst result = {};\n\tfor (const key in slots) {\n\t\tresult[key] = true;\n\t}\n\treturn result;\n}\n\n/** @returns {(this: any, ...args: any[]) => void} */\nexport function once(fn) {\n\tlet ran = false;\n\treturn function (...args) {\n\t\tif (ran) return;\n\t\tran = true;\n\t\tfn.call(this, ...args);\n\t};\n}\n\nexport function null_to_empty(value) {\n\treturn value == null ? '' : value;\n}\n\nexport function set_store_value(store, ret, value) {\n\tstore.set(value);\n\treturn ret;\n}\n\nexport const has_prop = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);\n\nexport function action_destroyer(action_result) {\n\treturn action_result && is_function(action_result.destroy) ? action_result.destroy : noop;\n}\n\n/** @param {number | string} value\n * @returns {[number, string]}\n */\nexport function split_css_unit(value) {\n\tconst split = typeof value === 'string' && value.match(/^\\s*(-?[\\d.]+)([^\\s]*)\\s*$/);\n\treturn split ? [parseFloat(split[1]), split[2] || 'px'] : [/** @type {number} */ (value), 'px'];\n}\n\nexport const contenteditable_truthy_values = ['', true, 1, 'true', 'contenteditable'];\n","import { custom_event } from './dom.js';\n\nexport let current_component;\n\n/** @returns {void} */\nexport function set_current_component(component) {\n\tcurrent_component = component;\n}\n\nexport function get_current_component() {\n\tif (!current_component) throw new Error('Function called outside component initialization');\n\treturn current_component;\n}\n\n/**\n * Schedules a callback to run immediately before the component is updated after any state change.\n *\n * The first time the callback runs will be before the initial `onMount`\n *\n * https://svelte.dev/docs/svelte#beforeupdate\n * @param {() => any} fn\n * @returns {void}\n */\nexport function beforeUpdate(fn) {\n\tget_current_component().$$.before_update.push(fn);\n}\n\n/**\n * The `onMount` function schedules a callback to run as soon as the component has been mounted to the DOM.\n * It must be called during the component's initialisation (but doesn't need to live *inside* the component;\n * it can be called from an external module).\n *\n * If a function is returned _synchronously_ from `onMount`, it will be called when the component is unmounted.\n *\n * `onMount` does not run inside a [server-side component](/docs#run-time-server-side-component-api).\n *\n * https://svelte.dev/docs/svelte#onmount\n * @template T\n * @param {() => import('./private.js').NotFunction<T> | Promise<import('./private.js').NotFunction<T>> | (() => any)} fn\n * @returns {void}\n */\nexport function onMount(fn) {\n\tget_current_component().$$.on_mount.push(fn);\n}\n\n/**\n * Schedules a callback to run immediately after the component has been updated.\n *\n * The first time the callback runs will be after the initial `onMount`\n *\n * https://svelte.dev/docs/svelte#afterupdate\n * @param {() => any} fn\n * @returns {void}\n */\nexport function afterUpdate(fn) {\n\tget_current_component().$$.after_update.push(fn);\n}\n\n/**\n * Schedules a callback to run immediately before the component is unmounted.\n *\n * Out of `onMount`, `beforeUpdate`, `afterUpdate` and `onDestroy`, this is the\n * only one that runs inside a server-side component.\n *\n * https://svelte.dev/docs/svelte#ondestroy\n * @param {() => any} fn\n * @returns {void}\n */\nexport function onDestroy(fn) {\n\tget_current_component().$$.on_destroy.push(fn);\n}\n\n/**\n * Creates an event dispatcher that can be used to dispatch [component events](/docs#template-syntax-component-directives-on-eventname).\n * Event dispatchers are functions that can take two arguments: `name` and `detail`.\n *\n * Component events created with `createEventDispatcher` create a\n * [CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent).\n * These events do not [bubble](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events#Event_bubbling_and_capture).\n * The `detail` argument corresponds to the [CustomEvent.detail](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail)\n * property and can contain any type of data.\n *\n * The event dispatcher can be typed to narrow the allowed event names and the type of the `detail` argument:\n * ```ts\n * const dispatch = createEventDispatcher<{\n * loaded: never; // does not take a detail argument\n * change: string; // takes a detail argument of type string, which is required\n * optional: number | null; // takes an optional detail argument of type number\n * }>();\n * ```\n *\n * https://svelte.dev/docs/svelte#createeventdispatcher\n * @template {Record<string, any>} [EventMap=any]\n * @returns {import('./public.js').EventDispatcher<EventMap>}\n */\nexport function createEventDispatcher() {\n\tconst component = get_current_component();\n\treturn (type, detail, { cancelable = false } = {}) => {\n\t\tconst callbacks = component.$$.callbacks[type];\n\t\tif (callbacks) {\n\t\t\t// TODO are there situations where events could be dispatched\n\t\t\t// in a server (non-DOM) environment?\n\t\t\tconst event = custom_event(/** @type {string} */ (type), detail, { cancelable });\n\t\t\tcallbacks.slice().forEach((fn) => {\n\t\t\t\tfn.call(component, event);\n\t\t\t});\n\t\t\treturn !event.defaultPrevented;\n\t\t}\n\t\treturn true;\n\t};\n}\n\n/**\n * Associates an arbitrary `context` object with the current component and the specified `key`\n * and returns that object. The context is then available to children of the component\n * (including slotted content) with `getContext`.\n *\n * Like lifecycle functions, this must be called during component initialisation.\n *\n * https://svelte.dev/docs/svelte#setcontext\n * @template T\n * @param {any} key\n * @param {T} context\n * @returns {T}\n */\nexport function setContext(key, context) {\n\tget_current_component().$$.context.set(key, context);\n\treturn context;\n}\n\n/**\n * Retrieves the context that belongs to the closest parent component with the specified `key`.\n * Must be called during component initialisation.\n *\n * https://svelte.dev/docs/svelte#getcontext\n * @template T\n * @param {any} key\n * @returns {T}\n */\nexport function getContext(key) {\n\treturn get_current_component().$$.context.get(key);\n}\n\n/**\n * Retrieves the whole context map that belongs to the closest parent component.\n * Must be called during component initialisation. Useful, for example, if you\n * programmatically create a component and want to pass the existing context to it.\n *\n * https://svelte.dev/docs/svelte#getallcontexts\n * @template {Map<any, any>} [T=Map<any, any>]\n * @returns {T}\n */\nexport function getAllContexts() {\n\treturn get_current_component().$$.context;\n}\n\n/**\n * Checks whether a given `key` has been set in the context of a parent component.\n * Must be called during component initialisation.\n *\n * https://svelte.dev/docs/svelte#hascontext\n * @param {any} key\n * @returns {boolean}\n */\nexport function hasContext(key) {\n\treturn get_current_component().$$.context.has(key);\n}\n\n// TODO figure out if we still want to support\n// shorthand events, or if we want to implement\n// a real bubbling mechanism\n/**\n * @param component\n * @param event\n * @returns {void}\n */\nexport function bubble(component, event) {\n\tconst callbacks = component.$$.callbacks[event.type];\n\tif (callbacks) {\n\t\t// @ts-ignore\n\t\tcallbacks.slice().forEach((fn) => fn.call(this, event));\n\t}\n}\n","import { append_empty_stylesheet, detach, get_root_for_style } from './dom.js';\nimport { raf } from './environment.js';\n\n// we need to store the information for multiple documents because a Svelte application could also contain iframes\n// https://github.com/sveltejs/svelte/issues/3624\n/** @type {Map<Document | ShadowRoot, import('./private.d.ts').StyleInformation>} */\nconst managed_styles = new Map();\n\nlet active = 0;\n\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\n/**\n * @param {string} str\n * @returns {number}\n */\nfunction hash(str) {\n\tlet hash = 5381;\n\tlet i = str.length;\n\twhile (i--) hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n\treturn hash >>> 0;\n}\n\n/**\n * @param {Document | ShadowRoot} doc\n * @param {Element & ElementCSSInlineStyle} node\n * @returns {{ stylesheet: any; rules: {}; }}\n */\nfunction create_style_information(doc, node) {\n\tconst info = { stylesheet: append_empty_stylesheet(node), rules: {} };\n\tmanaged_styles.set(doc, info);\n\treturn info;\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {number} a\n * @param {number} b\n * @param {number} duration\n * @param {number} delay\n * @param {(t: number) => number} ease\n * @param {(t: number, u: number) => string} fn\n * @param {number} uid\n * @returns {string}\n */\nexport function create_rule(node, a, b, duration, delay, ease, fn, uid = 0) {\n\tconst step = 16.666 / duration;\n\tlet keyframes = '{\\n';\n\tfor (let p = 0; p <= 1; p += step) {\n\t\tconst t = a + (b - a) * ease(p);\n\t\tkeyframes += p * 100 + `%{${fn(t, 1 - t)}}\\n`;\n\t}\n\tconst rule = keyframes + `100% {${fn(b, 1 - b)}}\\n}`;\n\tconst name = `__svelte_${hash(rule)}_${uid}`;\n\tconst doc = get_root_for_style(node);\n\tconst { stylesheet, rules } = managed_styles.get(doc) || create_style_information(doc, node);\n\tif (!rules[name]) {\n\t\trules[name] = true;\n\t\tstylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length);\n\t}\n\tconst animation = node.style.animation || '';\n\tnode.style.animation = `${\n\t\tanimation ? `${animation}, ` : ''\n\t}${name} ${duration}ms linear ${delay}ms 1 both`;\n\tactive += 1;\n\treturn name;\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {string} [name]\n * @returns {void}\n */\nexport function delete_rule(node, name) {\n\tconst previous = (node.style.animation || '').split(', ');\n\tconst next = previous.filter(\n\t\tname\n\t\t\t? (anim) => anim.indexOf(name) < 0 // remove specific animation\n\t\t\t: (anim) => anim.indexOf('__svelte') === -1 // remove all Svelte animations\n\t);\n\tconst deleted = previous.length - next.length;\n\tif (deleted) {\n\t\tnode.style.animation = next.join(', ');\n\t\tactive -= deleted;\n\t\tif (!active) clear_rules();\n\t}\n}\n\n/** @returns {void} */\nexport function clear_rules() {\n\traf(() => {\n\t\tif (active) return;\n\t\tmanaged_styles.forEach((info) => {\n\t\t\tconst { ownerNode } = info.stylesheet;\n\t\t\t// there is no ownerNode if it runs on jsdom.\n\t\t\tif (ownerNode) detach(ownerNode);\n\t\t});\n\t\tmanaged_styles.clear();\n\t});\n}\n","import { run_all } from './utils.js';\nimport { current_component, set_current_component } from './lifecycle.js';\n\nexport const dirty_components = [];\nexport const intros = { enabled: false };\nexport const binding_callbacks = [];\n\nlet render_callbacks = [];\n\nconst flush_callbacks = [];\n\nconst resolved_promise = /* @__PURE__ */ Promise.resolve();\n\nlet update_scheduled = false;\n\n/** @returns {void} */\nexport function schedule_update() {\n\tif (!update_scheduled) {\n\t\tupdate_scheduled = true;\n\t\tresolved_promise.then(flush);\n\t}\n}\n\n/** @returns {Promise<void>} */\nexport function tick() {\n\tschedule_update();\n\treturn resolved_promise;\n}\n\n/** @returns {void} */\nexport function add_render_callback(fn) {\n\trender_callbacks.push(fn);\n}\n\n/** @returns {void} */\nexport function add_flush_callback(fn) {\n\tflush_callbacks.push(fn);\n}\n\n// flush() calls callbacks in this order:\n// 1. All beforeUpdate callbacks, in order: parents before children\n// 2. All bind:this callbacks, in reverse order: children before parents.\n// 3. All afterUpdate callbacks, in order: parents before children. EXCEPT\n// for afterUpdates called during the initial onMount, which are called in\n// reverse order: children before parents.\n// Since callbacks might update component values, which could trigger another\n// call to flush(), the following steps guard against this:\n// 1. During beforeUpdate, any updated components will be added to the\n// dirty_components array and will cause a reentrant call to flush(). Because\n// the flush index is kept outside the function, the reentrant call will pick\n// up where the earlier call left off and go through all dirty components. The\n// current_component value is saved and restored so that the reentrant call will\n// not interfere with the \"parent\" flush() call.\n// 2. bind:this callbacks cannot trigger new flush() calls.\n// 3. During afterUpdate, any updated components will NOT have their afterUpdate\n// callback called a second time; the seen_callbacks set, outside the flush()\n// function, guarantees this behavior.\nconst seen_callbacks = new Set();\n\nlet flushidx = 0; // Do *not* move this inside the flush() function\n\n/** @returns {void} */\nexport function flush() {\n\t// Do not reenter flush while dirty components are updated, as this can\n\t// result in an infinite loop. Instead, let the inner flush handle it.\n\t// Reentrancy is ok afterwards for bindings etc.\n\tif (flushidx !== 0) {\n\t\treturn;\n\t}\n\tconst saved_component = current_component;\n\tdo {\n\t\t// first, call beforeUpdate functions\n\t\t// and update components\n\t\ttry {\n\t\t\twhile (flushidx < dirty_components.length) {\n\t\t\t\tconst component = dirty_components[flushidx];\n\t\t\t\tflushidx++;\n\t\t\t\tset_current_component(component);\n\t\t\t\tupdate(component.$$);\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t// reset dirty state to not end up in a deadlocked state and then rethrow\n\t\t\tdirty_components.length = 0;\n\t\t\tflushidx = 0;\n\t\t\tthrow e;\n\t\t}\n\t\tset_current_component(null);\n\t\tdirty_components.length = 0;\n\t\tflushidx = 0;\n\t\twhile (binding_callbacks.length) binding_callbacks.pop()();\n\t\t// then, once components are updated, call\n\t\t// afterUpdate functions. This may cause\n\t\t// subsequent updates...\n\t\tfor (let i = 0; i < render_callbacks.length; i += 1) {\n\t\t\tconst callback = render_callbacks[i];\n\t\t\tif (!seen_callbacks.has(callback)) {\n\t\t\t\t// ...so guard against infinite loops\n\t\t\t\tseen_callbacks.add(callback);\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t\trender_callbacks.length = 0;\n\t} while (dirty_components.length);\n\twhile (flush_callbacks.length) {\n\t\tflush_callbacks.pop()();\n\t}\n\tupdate_scheduled = false;\n\tseen_callbacks.clear();\n\tset_current_component(saved_component);\n}\n\n/** @returns {void} */\nfunction update($$) {\n\tif ($$.fragment !== null) {\n\t\t$$.update();\n\t\trun_all($$.before_update);\n\t\tconst dirty = $$.dirty;\n\t\t$$.dirty = [-1];\n\t\t$$.fragment && $$.fragment.p($$.ctx, dirty);\n\t\t$$.after_update.forEach(add_render_callback);\n\t}\n}\n\n/**\n * Useful for example to execute remaining `afterUpdate` callbacks before executing `destroy`.\n * @param {Function[]} fns\n * @returns {void}\n */\nexport function flush_render_callbacks(fns) {\n\tconst filtered = [];\n\tconst targets = [];\n\trender_callbacks.forEach((c) => (fns.indexOf(c) === -1 ? filtered.push(c) : targets.push(c)));\n\ttargets.forEach((c) => c());\n\trender_callbacks = filtered;\n}\n","import { identity as linear, is_function, noop, run_all } from './utils.js';\nimport { now } from './environment.js';\nimport { loop } from './loop.js';\nimport { create_rule, delete_rule } from './style_manager.js';\nimport { custom_event } from './dom.js';\nimport { add_render_callback } from './scheduler.js';\n\n/**\n * @type {Promise<void> | null}\n */\nlet promise;\n\n/**\n * @returns {Promise<void>}\n */\nfunction wait() {\n\tif (!promise) {\n\t\tpromise = Promise.resolve();\n\t\tpromise.then(() => {\n\t\t\tpromise = null;\n\t\t});\n\t}\n\treturn promise;\n}\n\n/**\n * @param {Element} node\n * @param {INTRO | OUTRO | boolean} direction\n * @param {'start' | 'end'} kind\n * @returns {void}\n */\nfunction dispatch(node, direction, kind) {\n\tnode.dispatchEvent(custom_event(`${direction ? 'intro' : 'outro'}${kind}`));\n}\n\nconst outroing = new Set();\n\n/**\n * @type {Outro}\n */\nlet outros;\n\n/**\n * @returns {void} */\nexport function group_outros() {\n\toutros = {\n\t\tr: 0,\n\t\tc: [],\n\t\tp: outros // parent group\n\t};\n}\n\n/**\n * @returns {void} */\nexport function check_outros() {\n\tif (!outros.r) {\n\t\trun_all(outros.c);\n\t}\n\toutros = outros.p;\n}\n\n/**\n * @param {import('./private.js').Fragment} block\n * @param {0 | 1} [local]\n * @returns {void}\n */\nexport function transition_in(block, local) {\n\tif (block && block.i) {\n\t\toutroing.delete(block);\n\t\tblock.i(local);\n\t}\n}\n\n/**\n * @param {import('./private.js').Fragment} block\n * @param {0 | 1} local\n * @param {0 | 1} [detach]\n * @param {() => void} [callback]\n * @returns {void}\n */\nexport function transition_out(block, local, detach, callback) {\n\tif (block && block.o) {\n\t\tif (outroing.has(block)) return;\n\t\toutroing.add(block);\n\t\toutros.c.push(() => {\n\t\t\toutroing.delete(block);\n\t\t\tif (callback) {\n\t\t\t\tif (detach) block.d(1);\n\t\t\t\tcallback();\n\t\t\t}\n\t\t});\n\t\tblock.o(local);\n\t} else if (callback) {\n\t\tcallback();\n\t}\n}\n\n/**\n * @type {import('../transition/public.js').TransitionConfig}\n */\nconst null_transition = { duration: 0 };\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {TransitionFn} fn\n * @param {any} params\n * @returns {{ start(): void; invalidate(): void; end(): void; }}\n */\nexport function create_in_transition(node, fn, params) {\n\t/**\n\t * @type {TransitionOptions} */\n\tconst options = { direction: 'in' };\n\tlet config = fn(node, params, options);\n\tlet running = false;\n\tlet animation_name;\n\tlet task;\n\tlet uid = 0;\n\n\t/**\n\t * @returns {void} */\n\tfunction cleanup() {\n\t\tif (animation_name) delete_rule(node, animation_name);\n\t}\n\n\t/**\n\t * @returns {void} */\n\tfunction go() {\n\t\tconst {\n\t\t\tdelay = 0,\n\t\t\tduration = 300,\n\t\t\teasing = linear,\n\t\t\ttick = noop,\n\t\t\tcss\n\t\t} = config || null_transition;\n\t\tif (css) animation_name = create_rule(node, 0, 1, duration, delay, easing, css, uid++);\n\t\ttick(0, 1);\n\t\tconst start_time = now() + delay;\n\t\tconst end_time = start_time + duration;\n\t\tif (task) task.abort();\n\t\trunning = true;\n\t\tadd_render_callback(() => dispatch(node, true, 'start'));\n\t\ttask = loop((now) => {\n\t\t\tif (running) {\n\t\t\t\tif (now >= end_time) {\n\t\t\t\t\ttick(1, 0);\n\t\t\t\t\tdispatch(node, true, 'end');\n\t\t\t\t\tcleanup();\n\t\t\t\t\treturn (running = false);\n\t\t\t\t}\n\t\t\t\tif (now >= start_time) {\n\t\t\t\t\tconst t = easing((now - start_time) / duration);\n\t\t\t\t\ttick(t, 1 - t);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn running;\n\t\t});\n\t}\n\tlet started = false;\n\treturn {\n\t\tstart() {\n\t\t\tif (started) return;\n\t\t\tstarted = true;\n\t\t\tdelete_rule(node);\n\t\t\tif (is_function(config)) {\n\t\t\t\tconfig = config(options);\n\t\t\t\twait().then(go);\n\t\t\t} else {\n\t\t\t\tgo();\n\t\t\t}\n\t\t},\n\t\tinvalidate() {\n\t\t\tstarted = false;\n\t\t},\n\t\tend() {\n\t\t\tif (running) {\n\t\t\t\tcleanup();\n\t\t\t\trunning = false;\n\t\t\t}\n\t\t}\n\t};\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {TransitionFn} fn\n * @param {any} params\n * @returns {{ end(reset: any): void; }}\n */\nexport function create_out_transition(node, fn, params) {\n\t/** @type {TransitionOptions} */\n\tconst options = { direction: 'out' };\n\tlet config = fn(node, params, options);\n\tlet running = true;\n\tlet animation_name;\n\tconst group = outros;\n\tgroup.r += 1;\n\t/** @type {boolean} */\n\tlet original_inert_value;\n\n\t/**\n\t * @returns {void} */\n\tfunction go() {\n\t\tconst {\n\t\t\tdelay = 0,\n\t\t\tduration = 300,\n\t\t\teasing = linear,\n\t\t\ttick = noop,\n\t\t\tcss\n\t\t} = config || null_transition;\n\n\t\tif (css) animation_name = create_rule(node, 1, 0, duration, delay, easing, css);\n\n\t\tconst start_time = now() + delay;\n\t\tconst end_time = start_time + duration;\n\t\tadd_render_callback(() => dispatch(node, false, 'start'));\n\n\t\tif ('inert' in node) {\n\t\t\toriginal_inert_value = /** @type {HTMLElement} */ (node).inert;\n\t\t\tnode.inert = true;\n\t\t}\n\n\t\tloop((now) => {\n\t\t\tif (running) {\n\t\t\t\tif (now >= end_time) {\n\t\t\t\t\ttick(0, 1);\n\t\t\t\t\tdispatch(node, false, 'end');\n\t\t\t\t\tif (!--group.r) {\n\t\t\t\t\t\t// this will result in `end()` being called,\n\t\t\t\t\t\t// so we don't need to clean up here\n\t\t\t\t\t\trun_all(group.c);\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (now >= start_time) {\n\t\t\t\t\tconst t = easing((now - start_time) / duration);\n\t\t\t\t\ttick(1 - t, t);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn running;\n\t\t});\n\t}\n\n\tif (is_function(config)) {\n\t\twait().then(() => {\n\t\t\t// @ts-ignore\n\t\t\tconfig = config(options);\n\t\t\tgo();\n\t\t});\n\t} else {\n\t\tgo();\n\t}\n\n\treturn {\n\t\tend(reset) {\n\t\t\tif (reset && 'inert' in node) {\n\t\t\t\tnode.inert = original_inert_value;\n\t\t\t}\n\t\t\tif (reset && config.tick) {\n\t\t\t\tconfig.tick(1, 0);\n\t\t\t}\n\t\t\tif (running) {\n\t\t\t\tif (animation_name) delete_rule(node, animation_name);\n\t\t\t\trunning = false;\n\t\t\t}\n\t\t}\n\t};\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {TransitionFn} fn\n * @param {any} params\n * @param {boolean} intro\n * @returns {{ run(b: 0 | 1): void; end(): void; }}\n */\nexport function create_bidirectional_transition(node, fn, params, intro) {\n\t/**\n\t * @type {TransitionOptions} */\n\tconst options = { direction: 'both' };\n\tlet config = fn(node, params, options);\n\tlet t = intro ? 0 : 1;\n\n\t/**\n\t * @type {Program | null} */\n\tlet running_program = null;\n\n\t/**\n\t * @type {PendingProgram | null} */\n\tlet pending_program = null;\n\tlet animation_name = null;\n\n\t/** @type {boolean} */\n\tlet original_inert_value;\n\n\t/**\n\t * @returns {void} */\n\tfunction clear_animation() {\n\t\tif (animation_name) delete_rule(node, animation_name);\n\t}\n\n\t/**\n\t * @param {PendingProgram} program\n\t * @param {number} duration\n\t * @returns {Program}\n\t */\n\tfunction init(program, duration) {\n\t\tconst d = /** @type {Program['d']} */ (program.b - t);\n\t\tduration *= Math.abs(d);\n\t\treturn {\n\t\t\ta: t,\n\t\t\tb: program.b,\n\t\t\td,\n\t\t\tduration,\n\t\t\tstart: program.start,\n\t\t\tend: program.start + duration,\n\t\t\tgroup: program.group\n\t\t};\n\t}\n\n\t/**\n\t * @param {INTRO | OUTRO} b\n\t * @returns {void}\n\t */\n\tfunction go(b) {\n\t\tconst {\n\t\t\tdelay = 0,\n\t\t\tduration = 300,\n\t\t\teasing = linear,\n\t\t\ttick = noop,\n\t\t\tcss\n\t\t} = config || null_transition;\n\n\t\t/**\n\t\t * @type {PendingProgram} */\n\t\tconst program = {\n\t\t\tstart: now() + delay,\n\t\t\tb\n\t\t};\n\n\t\tif (!b) {\n\t\t\t// @ts-ignore todo: improve typings\n\t\t\tprogram.group = outros;\n\t\t\toutros.r += 1;\n\t\t}\n\n\t\tif ('inert' in node) {\n\t\t\tif (b) {\n\t\t\t\tif (original_inert_value !== undefined) {\n\t\t\t\t\t// aborted/reversed outro — restore previous inert value\n\t\t\t\t\tnode.inert = original_inert_value;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toriginal_inert_value = /** @type {HTMLElement} */ (node).inert;\n\t\t\t\tnode.inert = true;\n\t\t\t}\n\t\t}\n\n\t\tif (running_program || pending_program) {\n\t\t\tpending_program = program;\n\t\t} else {\n\t\t\t// if this is an intro, and there's a delay, we need to do\n\t\t\t// an initial tick and/or apply CSS animation immediately\n\t\t\tif (css) {\n\t\t\t\tclear_animation();\n\t\t\t\tanimation_name = create_rule(node, t, b, duration, delay, easing, css);\n\t\t\t}\n\t\t\tif (b) tick(0, 1);\n\t\t\trunning_program = init(program, duration);\n\t\t\tadd_render_callback(() => dispatch(node, b, 'start'));\n\t\t\tloop((now) => {\n\t\t\t\tif (pending_program && now > pending_program.start) {\n\t\t\t\t\trunning_program = init(pending_program, duration);\n\t\t\t\t\tpending_program = null;\n\t\t\t\t\tdispatch(node, running_program.b, 'start');\n\t\t\t\t\tif (css) {\n\t\t\t\t\t\tclear_animation();\n\t\t\t\t\t\tanimation_name = create_rule(\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tt,\n\t\t\t\t\t\t\trunning_program.b,\n\t\t\t\t\t\t\trunning_program.duration,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\teasing,\n\t\t\t\t\t\t\tconfig.css\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (running_program) {\n\t\t\t\t\tif (now >= running_program.end) {\n\t\t\t\t\t\ttick((t = running_program.b), 1 - t);\n\t\t\t\t\t\tdispatch(node, running_program.b, 'end');\n\t\t\t\t\t\tif (!pending_program) {\n\t\t\t\t\t\t\t// we're done\n\t\t\t\t\t\t\tif (running_program.b) {\n\t\t\t\t\t\t\t\t// intro — we can tidy up immediately\n\t\t\t\t\t\t\t\tclear_animation();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// outro — needs to be coordinated\n\t\t\t\t\t\t\t\tif (!--running_program.group.r) run_all(running_program.group.c);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\trunning_program = null;\n\t\t\t\t\t} else if (now >= running_program.start) {\n\t\t\t\t\t\tconst p = now - running_program.start;\n\t\t\t\t\t\tt = running_program.a + running_program.d * easing(p / running_program.duration);\n\t\t\t\t\t\ttick(t, 1 - t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn !!(running_program || pending_program);\n\t\t\t});\n\t\t}\n\t}\n\treturn {\n\t\trun(b) {\n\t\t\tif (is_function(config)) {\n\t\t\t\twait().then(() => {\n\t\t\t\t\tconst opts = { direction: b ? 'in' : 'out' };\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tconfig = config(opts);\n\t\t\t\t\tgo(b);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tgo(b);\n\t\t\t}\n\t\t},\n\t\tend() {\n\t\t\tclear_animation();\n\t\t\trunning_program = pending_program = null;\n\t\t}\n\t};\n}\n\n/** @typedef {1} INTRO */\n/** @typedef {0} OUTRO */\n/** @typedef {{ direction: 'in' | 'out' | 'both' }} TransitionOptions */\n/** @typedef {(node: Element, params: any, options: TransitionOptions) => import('../transition/public.js').TransitionConfig} TransitionFn */\n\n/**\n * @typedef {Object} Outro\n * @property {number} r\n * @property {Function[]} c\n * @property {Object} p\n */\n\n/**\n * @typedef {Object} PendingProgram\n * @property {number} start\n * @property {INTRO|OUTRO} b\n * @property {Outro} [group]\n */\n\n/**\n * @typedef {Object} Program\n * @property {number} a\n * @property {INTRO|OUTRO} b\n * @property {1|-1} d\n * @property {number} duration\n * @property {number} start\n * @property {number} end\n * @property {Outro} [group]\n */\n","const _boolean_attributes = /** @type {const} */ ([\n\t'allowfullscreen',\n\t'allowpaymentrequest',\n\t'async',\n\t'autofocus',\n\t'autoplay',\n\t'checked',\n\t'controls',\n\t'default',\n\t'defer',\n\t'disabled',\n\t'formnovalidate',\n\t'hidden',\n\t'inert',\n\t'ismap',\n\t'loop',\n\t'multiple',\n\t'muted',\n\t'nomodule',\n\t'novalidate',\n\t'open',\n\t'playsinline',\n\t'readonly',\n\t'required',\n\t'reversed',\n\t'selected'\n]);\n\n/**\n * List of HTML boolean attributes (e.g. `<input disabled>`).\n * Source: https://html.spec.whatwg.org/multipage/indices.html\n *\n * @type {Set<string>}\n */\nexport const boolean_attributes = new Set([..._boolean_attributes]);\n\n/** @typedef {typeof _boolean_attributes[number]} BooleanAttributes */\n","import { set_current_component, current_component } from './lifecycle.js';\nimport { run_all, blank_object } from './utils.js';\nimport { boolean_attributes } from '../../shared/boolean_attributes.js';\nimport { ensure_array_like } from './each.js';\nexport { is_void } from '../../shared/utils/names.js';\n\nexport const invalid_attribute_name_character =\n\t/[\\s'\">/=\\u{FDD0}-\\u{FDEF}\\u{FFFE}\\u{FFFF}\\u{1FFFE}\\u{1FFFF}\\u{2FFFE}\\u{2FFFF}\\u{3FFFE}\\u{3FFFF}\\u{4FFFE}\\u{4FFFF}\\u{5FFFE}\\u{5FFFF}\\u{6FFFE}\\u{6FFFF}\\u{7FFFE}\\u{7FFFF}\\u{8FFFE}\\u{8FFFF}\\u{9FFFE}\\u{9FFFF}\\u{AFFFE}\\u{AFFFF}\\u{BFFFE}\\u{BFFFF}\\u{CFFFE}\\u{CFFFF}\\u{DFFFE}\\u{DFFFF}\\u{EFFFE}\\u{EFFFF}\\u{FFFFE}\\u{FFFFF}\\u{10FFFE}\\u{10FFFF}]/u;\n// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n// https://infra.spec.whatwg.org/#noncharacter\n\n/** @returns {string} */\nexport function spread(args, attrs_to_add) {\n\tconst attributes = Object.assign({}, ...args);\n\tif (attrs_to_add) {\n\t\tconst classes_to_add = attrs_to_add.classes;\n\t\tconst styles_to_add = attrs_to_add.styles;\n\t\tif (classes_to_add) {\n\t\t\tif (attributes.class == null) {\n\t\t\t\tattributes.class = classes_to_add;\n\t\t\t} else {\n\t\t\t\tattributes.class += ' ' + classes_to_add;\n\t\t\t}\n\t\t}\n\t\tif (styles_to_add) {\n\t\t\tif (attributes.style == null) {\n\t\t\t\tattributes.style = style_object_to_string(styles_to_add);\n\t\t\t} else {\n\t\t\t\tattributes.style = style_object_to_string(\n\t\t\t\t\tmerge_ssr_styles(attributes.style, styles_to_add)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\tlet str = '';\n\tObject.keys(attributes).forEach((name) => {\n\t\tif (invalid_attribute_name_character.test(name)) return;\n\t\tconst value = attributes[name];\n\t\tif (value === true) str += ' ' + name;\n\t\telse if (boolean_attributes.has(name.toLowerCase())) {\n\t\t\tif (value) str += ' ' + name;\n\t\t} else if (value != null) {\n\t\t\tstr += ` ${name}=\"${value}\"`;\n\t\t}\n\t});\n\treturn str;\n}\n\n/** @returns {{}} */\nexport function merge_ssr_styles(style_attribute, style_directive) {\n\tconst style_object = {};\n\tfor (const individual_style of style_attribute.split(';')) {\n\t\tconst colon_index = individual_style.indexOf(':');\n\t\tconst name = individual_style.slice(0, colon_index).trim();\n\t\tconst value = individual_style.slice(colon_index + 1).trim();\n\t\tif (!name) continue;\n\t\tstyle_object[name] = value;\n\t}\n\tfor (const name in style_directive) {\n\t\tconst value = style_directive[name];\n\t\tif (value) {\n\t\t\tstyle_object[name] = value;\n\t\t} else {\n\t\t\tdelete style_object[name];\n\t\t}\n\t}\n\treturn style_object;\n}\n\nconst ATTR_REGEX = /[&\"]/g;\nconst CONTENT_REGEX = /[&<]/g;\n\n/**\n * Note: this method is performance sensitive and has been optimized\n * https://github.com/sveltejs/svelte/pull/5701\n * @param {unknown} value\n * @returns {string}\n */\nexport function escape(value, is_attr = false) {\n\tconst str = String(value);\n\tconst pattern = is_attr ? ATTR_REGEX : CONTENT_REGEX;\n\tpattern.lastIndex = 0;\n\tlet escaped = '';\n\tlet last = 0;\n\twhile (pattern.test(str)) {\n\t\tconst i = pattern.lastIndex - 1;\n\t\tconst ch = str[i];\n\t\tescaped += str.substring(last, i) + (ch === '&' ? '&' : ch === '\"' ? '"' : '<');\n\t\tlast = i + 1;\n\t}\n\treturn escaped + str.substring(last);\n}\n\nexport function escape_attribute_value(value) {\n\t// keep booleans, null, and undefined for the sake of `spread`\n\tconst should_escape = typeof value === 'string' || (value && typeof value === 'object');\n\treturn should_escape ? escape(value, true) : value;\n}\n\n/** @returns {{}} */\nexport function escape_object(obj) {\n\tconst result = {};\n\tfor (const key in obj) {\n\t\tresult[key] = escape_attribute_value(obj[key]);\n\t}\n\treturn result;\n}\n\n/** @returns {string} */\nexport function each(items, fn) {\n\titems = ensure_array_like(items);\n\tlet str = '';\n\tfor (let i = 0; i < items.length; i += 1) {\n\t\tstr += fn(items[i], i);\n\t}\n\treturn str;\n}\n\nexport const missing_component = {\n\t$$render: () => ''\n};\n\nexport function validate_component(component, name) {\n\tif (!component || !component.$$render) {\n\t\tif (name === 'svelte:component') name += ' this={...}';\n\t\tthrow new Error(\n\t\t\t`<${name}> is not a valid SSR component. You may need to review your build config to ensure that dependencies are compiled, rather than imported as pre-compiled modules. Otherwise you may need to fix a <${name}>.`\n\t\t);\n\t}\n\treturn component;\n}\n\n/** @returns {string} */\nexport function debug(file, line, column, values) {\n\tconsole.log(`{@debug} ${file ? file + ' ' : ''}(${line}:${column})`); // eslint-disable-line no-console\n\tconsole.log(values); // eslint-disable-line no-console\n\treturn '';\n}\n\nlet on_destroy;\n\n/** @returns {{ render: (props?: {}, { $$slots, context }?: { $$slots?: {}; context?: Map<any, any>; }) => { html: any; css: { code: string; map: any; }; head: string; }; $$render: (result: any, props: any, bindings: any, slots: any, context: any) => any; }} */\nexport function create_ssr_component(fn) {\n\tfunction $$render(result, props, bindings, slots, context) {\n\t\tconst parent_component = current_component;\n\t\tconst $$ = {\n\t\t\ton_destroy,\n\t\t\tcontext: new Map(context || (parent_component ? parent_component.$$.context : [])),\n\t\t\t// these will be immediately discarded\n\t\t\ton_mount: [],\n\t\t\tbefore_update: [],\n\t\t\tafter_update: [],\n\t\t\tcallbacks: blank_object()\n\t\t};\n\t\tset_current_component({ $$ });\n\t\tconst html = fn(result, props, bindings, slots);\n\t\tset_current_component(parent_component);\n\t\treturn html;\n\t}\n\treturn {\n\t\trender: (props = {}, { $$slots = {}, context = new Map() } = {}) => {\n\t\t\ton_destroy = [];\n\t\t\tconst result = { title: '', head: '', css: new Set() };\n\t\t\tconst html = $$render(result, props, {}, $$slots, context);\n\t\t\trun_all(on_destroy);\n\t\t\treturn {\n\t\t\t\thtml,\n\t\t\t\tcss: {\n\t\t\t\t\tcode: Array.from(result.css)\n\t\t\t\t\t\t.map((css) => css.code)\n\t\t\t\t\t\t.join('\\n'),\n\t\t\t\t\tmap: null // TODO\n\t\t\t\t},\n\t\t\t\thead: result.title + result.head\n\t\t\t};\n\t\t},\n\t\t$$render\n\t};\n}\n\n/** @returns {string} */\nexport function add_attribute(name, value, boolean) {\n\tif (value == null || (boolean && !value)) return '';\n\tconst assignment = boolean && value === true ? '' : `=\"${escape(value, true)}\"`;\n\treturn ` ${name}${assignment}`;\n}\n\n/** @returns {string} */\nexport function add_classes(classes) {\n\treturn classes ? ` class=\"${classes}\"` : '';\n}\n\n/** @returns {string} */\nfunction style_object_to_string(style_object) {\n\treturn Object.keys(style_object)\n\t\t.filter((key) => style_object[key])\n\t\t.map((key) => `${key}: ${escape_attribute_value(style_object[key])};`)\n\t\t.join(' ');\n}\n\n/** @returns {string} */\nexport function add_styles(style_object) {\n\tconst styles = style_object_to_string(style_object);\n\treturn styles ? ` style=\"${styles}\"` : '';\n}\n","import { transition_in, transition_out } from './transitions.js';\nimport { run_all } from './utils.js';\n\n// general each functions:\n\nexport function ensure_array_like(array_like_or_iterator) {\n\treturn array_like_or_iterator?.length !== undefined\n\t\t? array_like_or_iterator\n\t\t: Array.from(array_like_or_iterator);\n}\n\n// keyed each functions:\n\n/** @returns {void} */\nexport function destroy_block(block, lookup) {\n\tblock.d(1);\n\tlookup.delete(block.key);\n}\n\n/** @returns {void} */\nexport function outro_and_destroy_block(block, lookup) {\n\ttransition_out(block, 1, 1, () => {\n\t\tlookup.delete(block.key);\n\t});\n}\n\n/** @returns {void} */\nexport function fix_and_destroy_block(block, lookup) {\n\tblock.f();\n\tdestroy_block(block, lookup);\n}\n\n/** @returns {void} */\nexport function fix_and_outro_and_destroy_block(block, lookup) {\n\tblock.f();\n\toutro_and_destroy_block(block, lookup);\n}\n\n/** @returns {any[]} */\nexport function update_keyed_each(\n\told_blocks,\n\tdirty,\n\tget_key,\n\tdynamic,\n\tctx,\n\tlist,\n\tlookup,\n\tnode,\n\tdestroy,\n\tcreate_each_block,\n\tnext,\n\tget_context\n) {\n\tlet o = old_blocks.length;\n\tlet n = list.length;\n\tlet i = o;\n\tconst old_indexes = {};\n\twhile (i--) old_indexes[old_blocks[i].key] = i;\n\tconst new_blocks = [];\n\tconst new_lookup = new Map();\n\tconst deltas = new Map();\n\tconst updates = [];\n\ti = n;\n\twhile (i--) {\n\t\tconst child_ctx = get_context(ctx, list, i);\n\t\tconst key = get_key(child_ctx);\n\t\tlet block = lookup.get(key);\n\t\tif (!block) {\n\t\t\tblock = create_each_block(key, child_ctx);\n\t\t\tblock.c();\n\t\t} else if (dynamic) {\n\t\t\t// defer updates until all the DOM shuffling is done\n\t\t\tupdates.push(() => block.p(child_ctx, dirty));\n\t\t}\n\t\tnew_lookup.set(key, (new_blocks[i] = block));\n\t\tif (key in old_indexes) deltas.set(key, Math.abs(i - old_indexes[key]));\n\t}\n\tconst will_move = new Set();\n\tconst did_move = new Set();\n\t/** @returns {void} */\n\tfunction insert(block) {\n\t\ttransition_in(block, 1);\n\t\tblock.m(node, next);\n\t\tlookup.set(block.key, block);\n\t\tnext = block.first;\n\t\tn--;\n\t}\n\twhile (o && n) {\n\t\tconst new_block = new_blocks[n - 1];\n\t\tconst old_block = old_blocks[o - 1];\n\t\tconst new_key = new_block.key;\n\t\tconst old_key = old_block.key;\n\t\tif (new_block === old_block) {\n\t\t\t// do nothing\n\t\t\tnext = new_block.first;\n\t\t\to--;\n\t\t\tn--;\n\t\t} else if (!new_lookup.has(old_key)) {\n\t\t\t// remove old block\n\t\t\tdestroy(old_block, lookup);\n\t\t\to--;\n\t\t} else if (!lookup.has(new_key) || will_move.has(new_key)) {\n\t\t\tinsert(new_block);\n\t\t} else if (did_move.has(old_key)) {\n\t\t\to--;\n\t\t} else if (deltas.get(new_key) > deltas.get(old_key)) {\n\t\t\tdid_move.add(new_key);\n\t\t\tinsert(new_block);\n\t\t} else {\n\t\t\twill_move.add(old_key);\n\t\t\to--;\n\t\t}\n\t}\n\twhile (o--) {\n\t\tconst old_block = old_blocks[o];\n\t\tif (!new_lookup.has(old_block.key)) destroy(old_block, lookup);\n\t}\n\twhile (n) insert(new_blocks[n - 1]);\n\trun_all(updates);\n\treturn new_blocks;\n}\n\n/** @returns {void} */\nexport function validate_each_keys(ctx, list, get_context, get_key) {\n\tconst keys = new Map();\n\tfor (let i = 0; i < list.length; i++) {\n\t\tconst key = get_key(get_context(ctx, list, i));\n\t\tif (keys.has(key)) {\n\t\t\tlet value = '';\n\t\t\ttry {\n\t\t\t\tvalue = `with value '${String(key)}' `;\n\t\t\t} catch (e) {\n\t\t\t\t// can't stringify\n\t\t\t}\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot have duplicate keys in a keyed each: Keys at index ${keys.get(\n\t\t\t\t\tkey\n\t\t\t\t)} and ${i} ${value}are duplicates`\n\t\t\t);\n\t\t}\n\t\tkeys.set(key, i);\n\t}\n}\n","import {\n\tadd_render_callback,\n\tflush,\n\tflush_render_callbacks,\n\tschedule_update,\n\tdirty_components\n} from './scheduler.js';\nimport { current_component, set_current_component } from './lifecycle.js';\nimport { blank_object, is_empty, is_function, run, run_all, noop } from './utils.js';\nimport {\n\tchildren,\n\tdetach,\n\tstart_hydrating,\n\tend_hydrating,\n\tget_custom_elements_slots,\n\tinsert,\n\telement,\n\tattr\n} from './dom.js';\nimport { transition_in } from './transitions.js';\n\n/** @returns {void} */\nexport function bind(component, name, callback) {\n\tconst index = component.$$.props[name];\n\tif (index !== undefined) {\n\t\tcomponent.$$.bound[index] = callback;\n\t\tcallback(component.$$.ctx[index]);\n\t}\n}\n\n/** @returns {void} */\nexport function create_component(block) {\n\tblock && block.c();\n}\n\n/** @returns {void} */\nexport function claim_component(block, parent_nodes) {\n\tblock && block.l(parent_nodes);\n}\n\n/** @returns {void} */\nexport function mount_component(component, target, anchor) {\n\tconst { fragment, after_update } = component.$$;\n\tfragment && fragment.m(target, anchor);\n\t// onMount happens before the initial afterUpdate\n\tadd_render_callback(() => {\n\t\tconst new_on_destroy = component.$$.on_mount.map(run).filter(is_function);\n\t\t// if the component was destroyed immediately\n\t\t// it will update the `$$.on_destroy` reference to `null`.\n\t\t// the destructured on_destroy may still reference to the old array\n\t\tif (component.$$.on_destroy) {\n\t\t\tcomponent.$$.on_destroy.push(...new_on_destroy);\n\t\t} else {\n\t\t\t// Edge case - component was destroyed immediately,\n\t\t\t// most likely as a result of a binding initialising\n\t\t\trun_all(new_on_destroy);\n\t\t}\n\t\tcomponent.$$.on_mount = [];\n\t});\n\tafter_update.forEach(add_render_callback);\n}\n\n/** @returns {void} */\nexport function destroy_component(component, detaching) {\n\tconst $$ = component.$$;\n\tif ($$.fragment !== null) {\n\t\tflush_render_callbacks($$.after_update);\n\t\trun_all($$.on_destroy);\n\t\t$$.fragment && $$.fragment.d(detaching);\n\t\t// TODO null out other refs, including component.$$ (but need to\n\t\t// preserve final state?)\n\t\t$$.on_destroy = $$.fragment = null;\n\t\t$$.ctx = [];\n\t}\n}\n\n/** @returns {void} */\nfunction make_dirty(component, i) {\n\tif (component.$$.dirty[0] === -1) {\n\t\tdirty_components.push(component);\n\t\tschedule_update();\n\t\tcomponent.$$.dirty.fill(0);\n\t}\n\tcomponent.$$.dirty[(i / 31) | 0] |= 1 << i % 31;\n}\n\n/** @returns {void} */\nexport function init(\n\tcomponent,\n\toptions,\n\tinstance,\n\tcreate_fragment,\n\tnot_equal,\n\tprops,\n\tappend_styles,\n\tdirty = [-1]\n) {\n\tconst parent_component = current_component;\n\tset_current_component(component);\n\t/** @type {import('./private.js').T$$} */\n\tconst $$ = (component.$$ = {\n\t\tfragment: null,\n\t\tctx: [],\n\t\t// state\n\t\tprops,\n\t\tupdate: noop,\n\t\tnot_equal,\n\t\tbound: blank_object(),\n\t\t// lifecycle\n\t\ton_mount: [],\n\t\ton_destroy: [],\n\t\ton_disconnect: [],\n\t\tbefore_update: [],\n\t\tafter_update: [],\n\t\tcontext: new Map(options.context || (parent_component ? parent_component.$$.context : [])),\n\t\t// everything else\n\t\tcallbacks: blank_object(),\n\t\tdirty,\n\t\tskip_bound: false,\n\t\troot: options.target || parent_component.$$.root\n\t});\n\tappend_styles && append_styles($$.root);\n\tlet ready = false;\n\t$$.ctx = instance\n\t\t? instance(component, options.props || {}, (i, ret, ...rest) => {\n\t\t\t\tconst value = rest.length ? rest[0] : ret;\n\t\t\t\tif ($$.ctx && not_equal($$.ctx[i], ($$.ctx[i] = value))) {\n\t\t\t\t\tif (!$$.skip_bound && $$.bound[i]) $$.bound[i](value);\n\t\t\t\t\tif (ready) make_dirty(component, i);\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t })\n\t\t: [];\n\t$$.update();\n\tready = true;\n\trun_all($$.before_update);\n\t// `false` as a special case of no DOM component\n\t$$.fragment = create_fragment ? create_fragment($$.ctx) : false;\n\tif (options.target) {\n\t\tif (options.hydrate) {\n\t\t\tstart_hydrating();\n\t\t\tconst nodes = children(options.target);\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t$$.fragment && $$.fragment.l(nodes);\n\t\t\tnodes.forEach(detach);\n\t\t} else {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t$$.fragment && $$.fragment.c();\n\t\t}\n\t\tif (options.intro) transition_in(component.$$.fragment);\n\t\tmount_component(component, options.target, options.anchor);\n\t\tend_hydrating();\n\t\tflush();\n\t}\n\tset_current_component(parent_component);\n}\n\nexport let SvelteElement;\n\nif (typeof HTMLElement === 'function') {\n\tSvelteElement = class extends HTMLElement {\n\t\t/** The Svelte component constructor */\n\t\t$$ctor;\n\t\t/** Slots */\n\t\t$$s;\n\t\t/** The Svelte component instance */\n\t\t$$c;\n\t\t/** Whether or not the custom element is connected */\n\t\t$$cn = false;\n\t\t/** Component props data */\n\t\t$$d = {};\n\t\t/** `true` if currently in the process of reflecting component props back to attributes */\n\t\t$$r = false;\n\t\t/** @type {Record<string, CustomElementPropDefinition>} Props definition (name, reflected, type etc) */\n\t\t$$p_d = {};\n\t\t/** @type {Record<string, Function[]>} Event listeners */\n\t\t$$l = {};\n\t\t/** @type {Map<Function, Function>} Event listener unsubscribe functions */\n\t\t$$l_u = new Map();\n\n\t\tconstructor($$componentCtor, $$slots, use_shadow_dom) {\n\t\t\tsuper();\n\t\t\tthis.$$ctor = $$componentCtor;\n\t\t\tthis.$$s = $$slots;\n\t\t\tif (use_shadow_dom) {\n\t\t\t\tthis.attachShadow({ mode: 'open' });\n\t\t\t}\n\t\t}\n\n\t\taddEventListener(type, listener, options) {\n\t\t\t// We can't determine upfront if the event is a custom event or not, so we have to\n\t\t\t// listen to both. If someone uses a custom event with the same name as a regular\n\t\t\t// browser event, this fires twice - we can't avoid that.\n\t\t\tthis.$$l[type] = this.$$l[type] || [];\n\t\t\tthis.$$l[type].push(listener);\n\t\t\tif (this.$$c) {\n\t\t\t\tconst unsub = this.$$c.$on(type, listener);\n\t\t\t\tthis.$$l_u.set(listener, unsub);\n\t\t\t}\n\t\t\tsuper.addEventListener(type, listener, options);\n\t\t}\n\n\t\tremoveEventListener(type, listener, options) {\n\t\t\tsuper.removeEventListener(type, listener, options);\n\t\t\tif (this.$$c) {\n\t\t\t\tconst unsub = this.$$l_u.get(listener);\n\t\t\t\tif (unsub) {\n\t\t\t\t\tunsub();\n\t\t\t\t\tthis.$$l_u.delete(listener);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tasync connectedCallback() {\n\t\t\tthis.$$cn = true;\n\t\t\tif (!this.$$c) {\n\t\t\t\t// We wait one tick to let possible child slot elements be created/mounted\n\t\t\t\tawait Promise.resolve();\n\t\t\t\tif (!this.$$cn) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tfunction create_slot(name) {\n\t\t\t\t\treturn () => {\n\t\t\t\t\t\tlet node;\n\t\t\t\t\t\tconst obj = {\n\t\t\t\t\t\t\tc: function create() {\n\t\t\t\t\t\t\t\tnode = element('slot');\n\t\t\t\t\t\t\t\tif (name !== 'default') {\n\t\t\t\t\t\t\t\t\tattr(node, 'name', name);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * @param {HTMLElement} target\n\t\t\t\t\t\t\t * @param {HTMLElement} [anchor]\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tm: function mount(target, anchor) {\n\t\t\t\t\t\t\t\tinsert(target, node, anchor);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\td: function destroy(detaching) {\n\t\t\t\t\t\t\t\tif (detaching) {\n\t\t\t\t\t\t\t\t\tdetach(node);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t\treturn obj;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst $$slots = {};\n\t\t\t\tconst existing_slots = get_custom_elements_slots(this);\n\t\t\t\tfor (const name of this.$$s) {\n\t\t\t\t\tif (name in existing_slots) {\n\t\t\t\t\t\t$$slots[name] = [create_slot(name)];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (const attribute of this.attributes) {\n\t\t\t\t\t// this.$$data takes precedence over this.attributes\n\t\t\t\t\tconst name = this.$$g_p(attribute.name);\n\t\t\t\t\tif (!(name in this.$$d)) {\n\t\t\t\t\t\tthis.$$d[name] = get_custom_element_value(name, attribute.value, this.$$p_d, 'toProp');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.$$c = new this.$$ctor({\n\t\t\t\t\ttarget: this.shadowRoot || this,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\t...this.$$d,\n\t\t\t\t\t\t$$slots,\n\t\t\t\t\t\t$$scope: {\n\t\t\t\t\t\t\tctx: []\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// Reflect component props as attributes\n\t\t\t\tconst reflect_attributes = () => {\n\t\t\t\t\tthis.$$r = true;\n\t\t\t\t\tfor (const key in this.$$p_d) {\n\t\t\t\t\t\tthis.$$d[key] = this.$$c.$$.ctx[this.$$c.$$.props[key]];\n\t\t\t\t\t\tif (this.$$p_d[key].reflect) {\n\t\t\t\t\t\t\tconst attribute_value = get_custom_element_value(\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tthis.$$d[key],\n\t\t\t\t\t\t\t\tthis.$$p_d,\n\t\t\t\t\t\t\t\t'toAttribute'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (attribute_value == null) {\n\t\t\t\t\t\t\t\tthis.removeAttribute(key);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.setAttribute(this.$$p_d[key].attribute || key, attribute_value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.$$r = false;\n\t\t\t\t};\n\t\t\t\tthis.$$c.$$.after_update.push(reflect_attributes);\n\t\t\t\treflect_attributes(); // once initially because after_update is added too late for first render\n\n\t\t\t\tfor (const type in this.$$l) {\n\t\t\t\t\tfor (const listener of this.$$l[type]) {\n\t\t\t\t\t\tconst unsub = this.$$c.$on(type, listener);\n\t\t\t\t\t\tthis.$$l_u.set(listener, unsub);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.$$l = {};\n\t\t\t}\n\t\t}\n\n\t\t// We don't need this when working within Svelte code, but for compatibility of people using this outside of Svelte\n\t\t// and setting attributes through setAttribute etc, this is helpful\n\t\tattributeChangedCallback(attr, _oldValue, newValue) {\n\t\t\tif (this.$$r) return;\n\t\t\tattr = this.$$g_p(attr);\n\t\t\tthis.$$d[attr] = get_custom_element_value(attr, newValue, this.$$p_d, 'toProp');\n\t\t\tthis.$$c?.$set({ [attr]: this.$$d[attr] });\n\t\t}\n\n\t\tdisconnectedCallback() {\n\t\t\tthis.$$cn = false;\n\t\t\t// In a microtask, because this could be a move within the DOM\n\t\t\tPromise.resolve().then(() => {\n\t\t\t\tif (!this.$$cn) {\n\t\t\t\t\tthis.$$c.$destroy();\n\t\t\t\t\tthis.$$c = undefined;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t$$g_p(attribute_name) {\n\t\t\treturn (\n\t\t\t\tObject.keys(this.$$p_d).find(\n\t\t\t\t\t(key) =>\n\t\t\t\t\t\tthis.$$p_d[key].attribute === attribute_name ||\n\t\t\t\t\t\t(!this.$$p_d[key].attribute && key.toLowerCase() === attribute_name)\n\t\t\t\t) || attribute_name\n\t\t\t);\n\t\t}\n\t};\n}\n\n/**\n * @param {string} prop\n * @param {any} value\n * @param {Record<string, CustomElementPropDefinition>} props_definition\n * @param {'toAttribute' | 'toProp'} [transform]\n */\nfunction get_custom_element_value(prop, value, props_definition, transform) {\n\tconst type = props_definition[prop]?.type;\n\tvalue = type === 'Boolean' && typeof value !== 'boolean' ? value != null : value;\n\tif (!transform || !props_definition[prop]) {\n\t\treturn value;\n\t} else if (transform === 'toAttribute') {\n\t\tswitch (type) {\n\t\t\tcase 'Object':\n\t\t\tcase 'Array':\n\t\t\t\treturn value == null ? null : JSON.stringify(value);\n\t\t\tcase 'Boolean':\n\t\t\t\treturn value ? '' : null;\n\t\t\tcase 'Number':\n\t\t\t\treturn value == null ? null : value;\n\t\t\tdefault:\n\t\t\t\treturn value;\n\t\t}\n\t} else {\n\t\tswitch (type) {\n\t\t\tcase 'Object':\n\t\t\tcase 'Array':\n\t\t\t\treturn value && JSON.parse(value);\n\t\t\tcase 'Boolean':\n\t\t\t\treturn value; // conversion already handled above\n\t\t\tcase 'Number':\n\t\t\t\treturn value != null ? +value : value;\n\t\t\tdefault:\n\t\t\t\treturn value;\n\t\t}\n\t}\n}\n\n/**\n * @internal\n *\n * Turn a Svelte component into a custom element.\n * @param {import('./public.js').ComponentType} Component A Svelte component constructor\n * @param {Record<string, CustomElementPropDefinition>} props_definition The props to observe\n * @param {string[]} slots The slots to create\n * @param {string[]} accessors Other accessors besides the ones for props the component has\n * @param {boolean} use_shadow_dom Whether to use shadow DOM\n * @param {(ce: new () => HTMLElement) => new () => HTMLElement} [extend]\n */\nexport function create_custom_element(\n\tComponent,\n\tprops_definition,\n\tslots,\n\taccessors,\n\tuse_shadow_dom,\n\textend\n) {\n\tlet Class = class extends SvelteElement {\n\t\tconstructor() {\n\t\t\tsuper(Component, slots, use_shadow_dom);\n\t\t\tthis.$$p_d = props_definition;\n\t\t}\n\t\tstatic get observedAttributes() {\n\t\t\treturn Object.keys(props_definition).map((key) =>\n\t\t\t\t(props_definition[key].attribute || key).toLowerCase()\n\t\t\t);\n\t\t}\n\t};\n\tObject.keys(props_definition).forEach((prop) => {\n\t\tObject.defineProperty(Class.prototype, prop, {\n\t\t\tget() {\n\t\t\t\treturn this.$$c && prop in this.$$c ? this.$$c[prop] : this.$$d[prop];\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tvalue = get_custom_element_value(prop, value, props_definition);\n\t\t\t\tthis.$$d[prop] = value;\n\t\t\t\tthis.$$c?.$set({ [prop]: value });\n\t\t\t}\n\t\t});\n\t});\n\taccessors.forEach((accessor) => {\n\t\tObject.defineProperty(Class.prototype, accessor, {\n\t\t\tget() {\n\t\t\t\treturn this.$$c?.[accessor];\n\t\t\t}\n\t\t});\n\t});\n\tif (extend) {\n\t\t// @ts-expect-error - assigning here is fine\n\t\tClass = extend(Class);\n\t}\n\tComponent.element = /** @type {any} */ (Class);\n\treturn Class;\n}\n\n/**\n * Base class for Svelte components. Used when dev=false.\n *\n * @template {Record<string, any>} [Props=any]\n * @template {Record<string, any>} [Events=any]\n */\nexport class SvelteComponent {\n\t/**\n\t * ### PRIVATE API\n\t *\n\t * Do not use, may change at any time\n\t *\n\t * @type {any}\n\t */\n\t$$ = undefined;\n\t/**\n\t * ### PRIVATE API\n\t *\n\t * Do not use, may change at any time\n\t *\n\t * @type {any}\n\t */\n\t$$set = undefined;\n\n\t/** @returns {void} */\n\t$destroy() {\n\t\tdestroy_component(this, 1);\n\t\tthis.$destroy = noop;\n\t}\n\n\t/**\n\t * @template {Extract<keyof Events, string>} K\n\t * @param {K} type\n\t * @param {((e: Events[K]) => void) | null | undefined} callback\n\t * @returns {() => void}\n\t */\n\t$on(type, callback) {\n\t\tif (!is_function(callback)) {\n\t\t\treturn noop;\n\t\t}\n\t\tconst callbacks = this.$$.callbacks[type] || (this.$$.callbacks[type] = []);\n\t\tcallbacks.push(callback);\n\t\treturn () => {\n\t\t\tconst index = callbacks.indexOf(callback);\n\t\t\tif (index !== -1) callbacks.splice(index, 1);\n\t\t};\n\t}\n\n\t/**\n\t * @param {Partial<Props>} props\n\t * @returns {void}\n\t */\n\t$set(props) {\n\t\tif (this.$$set && !is_empty(props)) {\n\t\t\tthis.$$.skip_bound = true;\n\t\t\tthis.$$set(props);\n\t\t\tthis.$$.skip_bound = false;\n\t\t}\n\t}\n}\n\n/**\n * @typedef {Object} CustomElementPropDefinition\n * @property {string} [attribute]\n * @property {boolean} [reflect]\n * @property {'String'|'Boolean'|'Number'|'Array'|'Object'} [type]\n */\n","import { ResizeObserverSingleton } from './ResizeObserverSingleton.js';\nimport { contenteditable_truthy_values, has_prop } from './utils.js';\n// Track which nodes are claimed during hydration. Unclaimed nodes can then be removed from the DOM\n// at the end of hydration without touching the remaining nodes.\nlet is_hydrating = false;\n\n/**\n * @returns {void}\n */\nexport function start_hydrating() {\n\tis_hydrating = true;\n}\n\n/**\n * @returns {void}\n */\nexport function end_hydrating() {\n\tis_hydrating = false;\n}\n\n/**\n * @param {number} low\n * @param {number} high\n * @param {(index: number) => number} key\n * @param {number} value\n * @returns {number}\n */\nfunction upper_bound(low, high, key, value) {\n\t// Return first index of value larger than input value in the range [low, high)\n\twhile (low < high) {\n\t\tconst mid = low + ((high - low) >> 1);\n\t\tif (key(mid) <= value) {\n\t\t\tlow = mid + 1;\n\t\t} else {\n\t\t\thigh = mid;\n\t\t}\n\t}\n\treturn low;\n}\n\n/**\n * @param {NodeEx} target\n * @returns {void}\n */\nfunction init_hydrate(target) {\n\tif (target.hydrate_init) return;\n\ttarget.hydrate_init = true;\n\t// We know that all children have claim_order values since the unclaimed have been detached if target is not <head>\n\n\tlet children = /** @type {ArrayLike<NodeEx2>} */ (target.childNodes);\n\t// If target is <head>, there may be children without claim_order\n\tif (target.nodeName === 'HEAD') {\n\t\tconst myChildren = [];\n\t\tfor (let i = 0; i < children.length; i++) {\n\t\t\tconst node = children[i];\n\t\t\tif (node.claim_order !== undefined) {\n\t\t\t\tmyChildren.push(node);\n\t\t\t}\n\t\t}\n\t\tchildren = myChildren;\n\t}\n\t/*\n\t * Reorder claimed children optimally.\n\t * We can reorder claimed children optimally by finding the longest subsequence of\n\t * nodes that are already claimed in order and only moving the rest. The longest\n\t * subsequence of nodes that are claimed in order can be found by\n\t * computing the longest increasing subsequence of .claim_order values.\n\t *\n\t * This algorithm is optimal in generating the least amount of reorder operations\n\t * possible.\n\t *\n\t * Proof:\n\t * We know that, given a set of reordering operations, the nodes that do not move\n\t * always form an increasing subsequence, since they do not move among each other\n\t * meaning that they must be already ordered among each other. Thus, the maximal\n\t * set of nodes that do not move form a longest increasing subsequence.\n\t */\n\t// Compute longest increasing subsequence\n\t// m: subsequence length j => index k of smallest value that ends an increasing subsequence of length j\n\tconst m = new Int32Array(children.length + 1);\n\t// Predecessor indices + 1\n\tconst p = new Int32Array(children.length);\n\tm[0] = -1;\n\tlet longest = 0;\n\tfor (let i = 0; i < children.length; i++) {\n\t\tconst current = children[i].claim_order;\n\t\t// Find the largest subsequence length such that it ends in a value less than our current value\n\t\t// upper_bound returns first greater value, so we subtract one\n\t\t// with fast path for when we are on the current longest subsequence\n\t\tconst seqLen =\n\t\t\t(longest > 0 && children[m[longest]].claim_order <= current\n\t\t\t\t? longest + 1\n\t\t\t\t: upper_bound(1, longest, (idx) => children[m[idx]].claim_order, current)) - 1;\n\t\tp[i] = m[seqLen] + 1;\n\t\tconst newLen = seqLen + 1;\n\t\t// We can guarantee that current is the smallest value. Otherwise, we would have generated a longer sequence.\n\t\tm[newLen] = i;\n\t\tlongest = Math.max(newLen, longest);\n\t}\n\t// The longest increasing subsequence of nodes (initially reversed)\n\n\t/**\n\t * @type {NodeEx2[]}\n\t */\n\tconst lis = [];\n\t// The rest of the nodes, nodes that will be moved\n\n\t/**\n\t * @type {NodeEx2[]}\n\t */\n\tconst toMove = [];\n\tlet last = children.length - 1;\n\tfor (let cur = m[longest] + 1; cur != 0; cur = p[cur - 1]) {\n\t\tlis.push(children[cur - 1]);\n\t\tfor (; last >= cur; last--) {\n\t\t\ttoMove.push(children[last]);\n\t\t}\n\t\tlast--;\n\t}\n\tfor (; last >= 0; last--) {\n\t\ttoMove.push(children[last]);\n\t}\n\tlis.reverse();\n\t// We sort the nodes being moved to guarantee that their insertion order matches the claim order\n\ttoMove.sort((a, b) => a.claim_order - b.claim_order);\n\t// Finally, we move the nodes\n\tfor (let i = 0, j = 0; i < toMove.length; i++) {\n\t\twhile (j < lis.length && toMove[i].claim_order >= lis[j].claim_order) {\n\t\t\tj++;\n\t\t}\n\t\tconst anchor = j < lis.length ? lis[j] : null;\n\t\ttarget.insertBefore(toMove[i], anchor);\n\t}\n}\n\n/**\n * @param {Node} target\n * @param {Node} node\n * @returns {void}\n */\nexport function append(target, node) {\n\ttarget.appendChild(node);\n}\n\n/**\n * @param {Node} target\n * @param {string} style_sheet_id\n * @param {string} styles\n * @returns {void}\n */\nexport function append_styles(target, style_sheet_id, styles) {\n\tconst append_styles_to = get_root_for_style(target);\n\tif (!append_styles_to.getElementById(style_sheet_id)) {\n\t\tconst style = element('style');\n\t\tstyle.id = style_sheet_id;\n\t\tstyle.textContent = styles;\n\t\tappend_stylesheet(append_styles_to, style);\n\t}\n}\n\n/**\n * @param {Node} node\n * @returns {ShadowRoot | Document}\n */\nexport function get_root_for_style(node) {\n\tif (!node) return document;\n\tconst root = node.getRootNode ? node.getRootNode() : node.ownerDocument;\n\tif (root && /** @type {ShadowRoot} */ (root).host) {\n\t\treturn /** @type {ShadowRoot} */ (root);\n\t}\n\treturn node.ownerDocument;\n}\n\n/**\n * @param {Node} node\n * @returns {CSSStyleSheet}\n */\nexport function append_empty_stylesheet(node) {\n\tconst style_element = element('style');\n\t// For transitions to work without 'style-src: unsafe-inline' Content Security Policy,\n\t// these empty tags need to be allowed with a hash as a workaround until we move to the Web Animations API.\n\t// Using the hash for the empty string (for an empty tag) works in all browsers except Safari.\n\t// So as a workaround for the workaround, when we append empty style tags we set their content to /* empty */.\n\t// The hash 'sha256-9OlNO0DNEeaVzHL4RZwCLsBHA8WBQ8toBp/4F5XV2nc=' will then work even in Safari.\n\tstyle_element.textContent = '/* empty */';\n\tappend_stylesheet(get_root_for_style(node), style_element);\n\treturn style_element.sheet;\n}\n\n/**\n * @param {ShadowRoot | Document} node\n * @param {HTMLStyleElement} style\n * @returns {CSSStyleSheet}\n */\nfunction append_stylesheet(node, style) {\n\tappend(/** @type {Document} */ (node).head || node, style);\n\treturn style.sheet;\n}\n\n/**\n * @param {NodeEx} target\n * @param {NodeEx} node\n * @returns {void}\n */\nexport function append_hydration(target, node) {\n\tif (is_hydrating) {\n\t\tinit_hydrate(target);\n\t\tif (\n\t\t\ttarget.actual_end_child === undefined ||\n\t\t\t(target.actual_end_child !== null && target.actual_end_child.parentNode !== target)\n\t\t) {\n\t\t\ttarget.actual_end_child = target.firstChild;\n\t\t}\n\t\t// Skip nodes of undefined ordering\n\t\twhile (target.actual_end_child !== null && target.actual_end_child.claim_order === undefined) {\n\t\t\ttarget.actual_end_child = target.actual_end_child.nextSibling;\n\t\t}\n\t\tif (node !== target.actual_end_child) {\n\t\t\t// We only insert if the ordering of this node should be modified or the parent node is not target\n\t\t\tif (node.claim_order !== undefined || node.parentNode !== target) {\n\t\t\t\ttarget.insertBefore(node, target.actual_end_child);\n\t\t\t}\n\t\t} else {\n\t\t\ttarget.actual_end_child = node.nextSibling;\n\t\t}\n\t} else if (node.parentNode !== target || node.nextSibling !== null) {\n\t\ttarget.appendChild(node);\n\t}\n}\n\n/**\n * @param {Node} target\n * @param {Node} node\n * @param {Node} [anchor]\n * @returns {void}\n */\nexport function insert(target, node, anchor) {\n\ttarget.insertBefore(node, anchor || null);\n}\n\n/**\n * @param {NodeEx} target\n * @param {NodeEx} node\n * @param {NodeEx} [anchor]\n * @returns {void}\n */\nexport function insert_hydration(target, node, anchor) {\n\tif (is_hydrating && !anchor) {\n\t\tappend_hydration(target, node);\n\t} else if (node.parentNode !== target || node.nextSibling != anchor) {\n\t\ttarget.insertBefore(node, anchor || null);\n\t}\n}\n\n/**\n * @param {Node} node\n * @returns {void}\n */\nexport function detach(node) {\n\tif (node.parentNode) {\n\t\tnode.parentNode.removeChild(node);\n\t}\n}\n\n/**\n * @returns {void} */\nexport function destroy_each(iterations, detaching) {\n\tfor (let i = 0; i < iterations.length; i += 1) {\n\t\tif (iterations[i]) iterations[i].d(detaching);\n\t}\n}\n\n/**\n * @template {keyof HTMLElementTagNameMap} K\n * @param {K} name\n * @returns {HTMLElementTagNameMap[K]}\n */\nexport function element(name) {\n\treturn document.createElement(name);\n}\n\n/**\n * @template {keyof HTMLElementTagNameMap} K\n * @param {K} name\n * @param {string} is\n * @returns {HTMLElementTagNameMap[K]}\n */\nexport function element_is(name, is) {\n\treturn document.createElement(name, { is });\n}\n\n/**\n * @template T\n * @template {keyof T} K\n * @param {T} obj\n * @param {K[]} exclude\n * @returns {Pick<T, Exclude<keyof T, K>>}\n */\nexport function object_without_properties(obj, exclude) {\n\tconst target = /** @type {Pick<T, Exclude<keyof T, K>>} */ ({});\n\tfor (const k in obj) {\n\t\tif (\n\t\t\thas_prop(obj, k) &&\n\t\t\t// @ts-ignore\n\t\t\texclude.indexOf(k) === -1\n\t\t) {\n\t\t\t// @ts-ignore\n\t\t\ttarget[k] = obj[k];\n\t\t}\n\t}\n\treturn target;\n}\n\n/**\n * @template {keyof SVGElementTagNameMap} K\n * @param {K} name\n * @returns {SVGElement}\n */\nexport function svg_element(name) {\n\treturn document.createElementNS('http://www.w3.org/2000/svg', name);\n}\n\n/**\n * @param {string} data\n * @returns {Text}\n */\nexport function text(data) {\n\treturn document.createTextNode(data);\n}\n\n/**\n * @returns {Text} */\nexport function space() {\n\treturn text(' ');\n}\n\n/**\n * @returns {Text} */\nexport function empty() {\n\treturn text('');\n}\n\n/**\n * @param {string} content\n * @returns {Comment}\n */\nexport function comment(content) {\n\treturn document.createComment(content);\n}\n\n/**\n * @param {EventTarget} node\n * @param {string} event\n * @param {EventListenerOrEventListenerObject} handler\n * @param {boolean | AddEventListenerOptions | EventListenerOptions} [options]\n * @returns {() => void}\n */\nexport function listen(node, event, handler, options) {\n\tnode.addEventListener(event, handler, options);\n\treturn () => node.removeEventListener(event, handler, options);\n}\n\n/**\n * @returns {(event: any) => any} */\nexport function prevent_default(fn) {\n\treturn function (event) {\n\t\tevent.preventDefault();\n\t\t// @ts-ignore\n\t\treturn fn.call(this, event);\n\t};\n}\n\n/**\n * @returns {(event: any) => any} */\nexport function stop_propagation(fn) {\n\treturn function (event) {\n\t\tevent.stopPropagation();\n\t\t// @ts-ignore\n\t\treturn fn.call(this, event);\n\t};\n}\n\n/**\n * @returns {(event: any) => any} */\nexport function stop_immediate_propagation(fn) {\n\treturn function (event) {\n\t\tevent.stopImmediatePropagation();\n\t\t// @ts-ignore\n\t\treturn fn.call(this, event);\n\t};\n}\n\n/**\n * @returns {(event: any) => void} */\nexport function self(fn) {\n\treturn function (event) {\n\t\t// @ts-ignore\n\t\tif (event.target === this) fn.call(this, event);\n\t};\n}\n\n/**\n * @returns {(event: any) => void} */\nexport function trusted(fn) {\n\treturn function (event) {\n\t\t// @ts-ignore\n\t\tif (event.isTrusted) fn.call(this, event);\n\t};\n}\n\n/**\n * @param {Element} node\n * @param {string} attribute\n * @param {string} [value]\n * @returns {void}\n */\nexport function attr(node, attribute, value) {\n\tif (value == null) node.removeAttribute(attribute);\n\telse if (node.getAttribute(attribute) !== value) node.setAttribute(attribute, value);\n}\n/**\n * List of attributes that should always be set through the attr method,\n * because updating them through the property setter doesn't work reliably.\n * In the example of `width`/`height`, the problem is that the setter only\n * accepts numeric values, but the attribute can also be set to a string like `50%`.\n * If this list becomes too big, rethink this approach.\n */\nconst always_set_through_set_attribute = ['width', 'height'];\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {{ [x: string]: string }} attributes\n * @returns {void}\n */\nexport function set_attributes(node, attributes) {\n\t// @ts-ignore\n\tconst descriptors = Object.getOwnPropertyDescriptors(node.__proto__);\n\tfor (const key in attributes) {\n\t\tif (attributes[key] == null) {\n\t\t\tnode.removeAttribute(key);\n\t\t} else if (key === 'style') {\n\t\t\tnode.style.cssText = attributes[key];\n\t\t} else if (key === '__value') {\n\t\t\t/** @type {any} */ (node).value = node[key] = attributes[key];\n\t\t} else if (\n\t\t\tdescriptors[key] &&\n\t\t\tdescriptors[key].set &&\n\t\t\talways_set_through_set_attribute.indexOf(key) === -1\n\t\t) {\n\t\t\tnode[key] = attributes[key];\n\t\t} else {\n\t\t\tattr(node, key, attributes[key]);\n\t\t}\n\t}\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {{ [x: string]: string }} attributes\n * @returns {void}\n */\nexport function set_svg_attributes(node, attributes) {\n\tfor (const key in attributes) {\n\t\tattr(node, key, attributes[key]);\n\t}\n}\n\n/**\n * @param {Record<string, unknown>} data_map\n * @returns {void}\n */\nexport function set_custom_element_data_map(node, data_map) {\n\tObject.keys(data_map).forEach((key) => {\n\t\tset_custom_element_data(node, key, data_map[key]);\n\t});\n}\n\n/**\n * @returns {void} */\nexport function set_custom_element_data(node, prop, value) {\n\tif (prop in node) {\n\t\tnode[prop] = typeof node[prop] === 'boolean' && value === '' ? true : value;\n\t} else {\n\t\tattr(node, prop, value);\n\t}\n}\n\n/**\n * @param {string} tag\n */\nexport function set_dynamic_element_data(tag) {\n\treturn /-/.test(tag) ? set_custom_element_data_map : set_attributes;\n}\n\n/**\n * @returns {void}\n */\nexport function xlink_attr(node, attribute, value) {\n\tnode.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\n\n/**\n * @param {HTMLElement} node\n * @returns {string}\n */\nexport function get_svelte_dataset(node) {\n\treturn node.dataset.svelteH;\n}\n\n/**\n * @returns {unknown[]} */\nexport function get_binding_group_value(group, __value, checked) {\n\tconst value = new Set();\n\tfor (let i = 0; i < group.length; i += 1) {\n\t\tif (group[i].checked) value.add(group[i].__value);\n\t}\n\tif (!checked) {\n\t\tvalue.delete(__value);\n\t}\n\treturn Array.from(value);\n}\n\n/**\n * @param {HTMLInputElement[]} group\n * @returns {{ p(...inputs: HTMLInputElement[]): void; r(): void; }}\n */\nexport function init_binding_group(group) {\n\t/**\n\t * @type {HTMLInputElement[]} */\n\tlet _inputs;\n\treturn {\n\t\t/* push */ p(...inputs) {\n\t\t\t_inputs = inputs;\n\t\t\t_inputs.forEach((input) => group.push(input));\n\t\t},\n\t\t/* remove */ r() {\n\t\t\t_inputs.forEach((input) => group.splice(group.indexOf(input), 1));\n\t\t}\n\t};\n}\n\n/**\n * @param {number[]} indexes\n * @returns {{ u(new_indexes: number[]): void; p(...inputs: HTMLInputElement[]): void; r: () => void; }}\n */\nexport function init_binding_group_dynamic(group, indexes) {\n\t/**\n\t * @type {HTMLInputElement[]} */\n\tlet _group = get_binding_group(group);\n\n\t/**\n\t * @type {HTMLInputElement[]} */\n\tlet _inputs;\n\n\tfunction get_binding_group(group) {\n\t\tfor (let i = 0; i < indexes.length; i++) {\n\t\t\tgroup = group[indexes[i]] = group[indexes[i]] || [];\n\t\t}\n\t\treturn group;\n\t}\n\n\t/**\n\t * @returns {void} */\n\tfunction push() {\n\t\t_inputs.forEach((input) => _group.push(input));\n\t}\n\n\t/**\n\t * @returns {void} */\n\tfunction remove() {\n\t\t_inputs.forEach((input) => _group.splice(_group.indexOf(input), 1));\n\t}\n\treturn {\n\t\t/* update */ u(new_indexes) {\n\t\t\tindexes = new_indexes;\n\t\t\tconst new_group = get_binding_group(group);\n\t\t\tif (new_group !== _group) {\n\t\t\t\tremove();\n\t\t\t\t_group = new_group;\n\t\t\t\tpush();\n\t\t\t}\n\t\t},\n\t\t/* push */ p(...inputs) {\n\t\t\t_inputs = inputs;\n\t\t\tpush();\n\t\t},\n\t\t/* remove */ r: remove\n\t};\n}\n\n/** @returns {number} */\nexport function to_number(value) {\n\treturn value === '' ? null : +value;\n}\n\n/** @returns {any[]} */\nexport function time_ranges_to_array(ranges) {\n\tconst array = [];\n\tfor (let i = 0; i < ranges.length; i += 1) {\n\t\tarray.push({ start: ranges.start(i), end: ranges.end(i) });\n\t}\n\treturn array;\n}\n\n/**\n * @param {Element} element\n * @returns {ChildNode[]}\n */\nexport function children(element) {\n\treturn Array.from(element.childNodes);\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @returns {void}\n */\nfunction init_claim_info(nodes) {\n\tif (nodes.claim_info === undefined) {\n\t\tnodes.claim_info = { last_index: 0, total_claimed: 0 };\n\t}\n}\n\n/**\n * @template {ChildNodeEx} R\n * @param {ChildNodeArray} nodes\n * @param {(node: ChildNodeEx) => node is R} predicate\n * @param {(node: ChildNodeEx) => ChildNodeEx | undefined} processNode\n * @param {() => R} createNode\n * @param {boolean} dontUpdateLastIndex\n * @returns {R}\n */\nfunction claim_node(nodes, predicate, processNode, createNode, dontUpdateLastIndex = false) {\n\t// Try to find nodes in an order such that we lengthen the longest increasing subsequence\n\tinit_claim_info(nodes);\n\tconst resultNode = (() => {\n\t\t// We first try to find an element after the previous one\n\t\tfor (let i = nodes.claim_info.last_index; i < nodes.length; i++) {\n\t\t\tconst node = nodes[i];\n\t\t\tif (predicate(node)) {\n\t\t\t\tconst replacement = processNode(node);\n\t\t\t\tif (replacement === undefined) {\n\t\t\t\t\tnodes.splice(i, 1);\n\t\t\t\t} else {\n\t\t\t\t\tnodes[i] = replacement;\n\t\t\t\t}\n\t\t\t\tif (!dontUpdateLastIndex) {\n\t\t\t\t\tnodes.claim_info.last_index = i;\n\t\t\t\t}\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t\t// Otherwise, we try to find one before\n\t\t// We iterate in reverse so that we don't go too far back\n\t\tfor (let i = nodes.claim_info.last_index - 1; i >= 0; i--) {\n\t\t\tconst node = nodes[i];\n\t\t\tif (predicate(node)) {\n\t\t\t\tconst replacement = processNode(node);\n\t\t\t\tif (replacement === undefined) {\n\t\t\t\t\tnodes.splice(i, 1);\n\t\t\t\t} else {\n\t\t\t\t\tnodes[i] = replacement;\n\t\t\t\t}\n\t\t\t\tif (!dontUpdateLastIndex) {\n\t\t\t\t\tnodes.claim_info.last_index = i;\n\t\t\t\t} else if (replacement === undefined) {\n\t\t\t\t\t// Since we spliced before the last_index, we decrease it\n\t\t\t\t\tnodes.claim_info.last_index--;\n\t\t\t\t}\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t\t// If we can't find any matching node, we create a new one\n\t\treturn createNode();\n\t})();\n\tresultNode.claim_order = nodes.claim_info.total_claimed;\n\tnodes.claim_info.total_claimed += 1;\n\treturn resultNode;\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @param {string} name\n * @param {{ [key: string]: boolean }} attributes\n * @param {(name: string) => Element | SVGElement} create_element\n * @returns {Element | SVGElement}\n */\nfunction claim_element_base(nodes, name, attributes, create_element) {\n\treturn claim_node(\n\t\tnodes,\n\t\t/** @returns {node is Element | SVGElement} */\n\t\t(node) => node.nodeName === name,\n\t\t/** @param {Element} node */\n\t\t(node) => {\n\t\t\tconst remove = [];\n\t\t\tfor (let j = 0; j < node.attributes.length; j++) {\n\t\t\t\tconst attribute = node.attributes[j];\n\t\t\t\tif (!attributes[attribute.name]) {\n\t\t\t\t\tremove.push(attribute.name);\n\t\t\t\t}\n\t\t\t}\n\t\t\tremove.forEach((v) => node.removeAttribute(v));\n\t\t\treturn undefined;\n\t\t},\n\t\t() => create_element(name)\n\t);\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @param {string} name\n * @param {{ [key: string]: boolean }} attributes\n * @returns {Element | SVGElement}\n */\nexport function claim_element(nodes, name, attributes) {\n\treturn claim_element_base(nodes, name, attributes, element);\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @param {string} name\n * @param {{ [key: string]: boolean }} attributes\n * @returns {Element | SVGElement}\n */\nexport function claim_svg_element(nodes, name, attributes) {\n\treturn claim_element_base(nodes, name, attributes, svg_element);\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @returns {Text}\n */\nexport function claim_text(nodes, data) {\n\treturn claim_node(\n\t\tnodes,\n\t\t/** @returns {node is Text} */\n\t\t(node) => node.nodeType === 3,\n\t\t/** @param {Text} node */\n\t\t(node) => {\n\t\t\tconst dataStr = '' + data;\n\t\t\tif (node.data.startsWith(dataStr)) {\n\t\t\t\tif (node.data.length !== dataStr.length) {\n\t\t\t\t\treturn node.splitText(dataStr.length);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnode.data = dataStr;\n\t\t\t}\n\t\t},\n\t\t() => text(data),\n\t\ttrue // Text nodes should not update last index since it is likely not worth it to eliminate an increasing subsequence of actual elements\n\t);\n}\n\n/**\n * @returns {Text} */\nexport function claim_space(nodes) {\n\treturn claim_text(nodes, ' ');\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @returns {Comment}\n */\nexport function claim_comment(nodes, data) {\n\treturn claim_node(\n\t\tnodes,\n\t\t/** @returns {node is Comment} */\n\t\t(node) => node.nodeType === 8,\n\t\t/** @param {Comment} node */\n\t\t(node) => {\n\t\t\tnode.data = '' + data;\n\t\t\treturn undefined;\n\t\t},\n\t\t() => comment(data),\n\t\ttrue\n\t);\n}\n\nfunction get_comment_idx(nodes, text, start) {\n\tfor (let i = start; i < nodes.length; i += 1) {\n\t\tconst node = nodes[i];\n\t\tif (node.nodeType === 8 /* comment node */ && node.textContent.trim() === text) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n}\n\n/**\n * @param {boolean} is_svg\n * @returns {HtmlTagHydration}\n */\nexport function claim_html_tag(nodes, is_svg) {\n\t// find html opening tag\n\tconst start_index = get_comment_idx(nodes, 'HTML_TAG_START', 0);\n\tconst end_index = get_comment_idx(nodes, 'HTML_TAG_END', start_index + 1);\n\tif (start_index === -1 || end_index === -1) {\n\t\treturn new HtmlTagHydration(is_svg);\n\t}\n\n\tinit_claim_info(nodes);\n\tconst html_tag_nodes = nodes.splice(start_index, end_index - start_index + 1);\n\tdetach(html_tag_nodes[0]);\n\tdetach(html_tag_nodes[html_tag_nodes.length - 1]);\n\tconst claimed_nodes = html_tag_nodes.slice(1, html_tag_nodes.length - 1);\n\tfor (const n of claimed_nodes) {\n\t\tn.claim_order = nodes.claim_info.total_claimed;\n\t\tnodes.claim_info.total_claimed += 1;\n\t}\n\treturn new HtmlTagHydration(is_svg, claimed_nodes);\n}\n\n/**\n * @param {Text} text\n * @param {unknown} data\n * @returns {void}\n */\nexport function set_data(text, data) {\n\tdata = '' + data;\n\tif (text.data === data) return;\n\ttext.data = /** @type {string} */ (data);\n}\n\n/**\n * @param {Text} text\n * @param {unknown} data\n * @returns {void}\n */\nexport function set_data_contenteditable(text, data) {\n\tdata = '' + data;\n\tif (text.wholeText === data) return;\n\ttext.data = /** @type {string} */ (data);\n}\n\n/**\n * @param {Text} text\n * @param {unknown} data\n * @param {string} attr_value\n * @returns {void}\n */\nexport function set_data_maybe_contenteditable(text, data, attr_value) {\n\tif (~contenteditable_truthy_values.indexOf(attr_value)) {\n\t\tset_data_contenteditable(text, data);\n\t} else {\n\t\tset_data(text, data);\n\t}\n}\n\n/**\n * @returns {void} */\nexport function set_input_value(input, value) {\n\tinput.value = value == null ? '' : value;\n}\n\n/**\n * @returns {void} */\nexport function set_input_type(input, type) {\n\ttry {\n\t\tinput.type = type;\n\t} catch (e) {\n\t\t// do nothing\n\t}\n}\n\n/**\n * @returns {void} */\nexport function set_style(node, key, value, important) {\n\tif (value == null) {\n\t\tnode.style.removeProperty(key);\n\t} else {\n\t\tnode.style.setProperty(key, value, important ? 'important' : '');\n\t}\n}\n\n/**\n * @returns {void} */\nexport function select_option(select, value, mounting) {\n\tfor (let i = 0; i < select.options.length; i += 1) {\n\t\tconst option = select.options[i];\n\t\tif (option.__value === value) {\n\t\t\toption.selected = true;\n\t\t\treturn;\n\t\t}\n\t}\n\tif (!mounting || value !== undefined) {\n\t\tselect.selectedIndex = -1; // no option should be selected\n\t}\n}\n\n/**\n * @returns {void} */\nexport function select_options(select, value) {\n\tfor (let i = 0; i < select.options.length; i += 1) {\n\t\tconst option = select.options[i];\n\t\toption.selected = ~value.indexOf(option.__value);\n\t}\n}\n\nexport function select_value(select) {\n\tconst selected_option = select.querySelector(':checked');\n\treturn selected_option && selected_option.__value;\n}\n\nexport function select_multiple_value(select) {\n\treturn [].map.call(select.querySelectorAll(':checked'), (option) => option.__value);\n}\n// unfortunately this can't be a constant as that wouldn't be tree-shakeable\n// so we cache the result instead\n\n/**\n * @type {boolean} */\nlet crossorigin;\n\n/**\n * @returns {boolean} */\nexport function is_crossorigin() {\n\tif (crossorigin === undefined) {\n\t\tcrossorigin = false;\n\t\ttry {\n\t\t\tif (typeof window !== 'undefined' && window.parent) {\n\t\t\t\tvoid window.parent.document;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tcrossorigin = true;\n\t\t}\n\t}\n\treturn crossorigin;\n}\n\n/**\n * @param {HTMLElement} node\n * @param {() => void} fn\n * @returns {() => void}\n */\nexport function add_iframe_resize_listener(node, fn) {\n\tconst computed_style = getComputedStyle(node);\n\tif (computed_style.position === 'static') {\n\t\tnode.style.position = 'relative';\n\t}\n\tconst iframe = element('iframe');\n\tiframe.setAttribute(\n\t\t'style',\n\t\t'display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; ' +\n\t\t\t'overflow: hidden; border: 0; opacity: 0; pointer-events: none; z-index: -1;'\n\t);\n\tiframe.setAttribute('aria-hidden', 'true');\n\tiframe.tabIndex = -1;\n\tconst crossorigin = is_crossorigin();\n\n\t/**\n\t * @type {() => void}\n\t */\n\tlet unsubscribe;\n\tif (crossorigin) {\n\t\tiframe.src = \"data:text/html,<script>onresize=function(){parent.postMessage(0,'*')}</script>\";\n\t\tunsubscribe = listen(\n\t\t\twindow,\n\t\t\t'message',\n\t\t\t/** @param {MessageEvent} event */ (event) => {\n\t\t\t\tif (event.source === iframe.contentWindow) fn();\n\t\t\t}\n\t\t);\n\t} else {\n\t\tiframe.src = 'about:blank';\n\t\tiframe.onload = () => {\n\t\t\tunsubscribe = listen(iframe.contentWindow, 'resize', fn);\n\t\t\t// make sure an initial resize event is fired _after_ the iframe is loaded (which is asynchronous)\n\t\t\t// see https://github.com/sveltejs/svelte/issues/4233\n\t\t\tfn();\n\t\t};\n\t}\n\tappend(node, iframe);\n\treturn () => {\n\t\tif (crossorigin) {\n\t\t\tunsubscribe();\n\t\t} else if (unsubscribe && iframe.contentWindow) {\n\t\t\tunsubscribe();\n\t\t}\n\t\tdetach(iframe);\n\t};\n}\nexport const resize_observer_content_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'content-box'\n});\nexport const resize_observer_border_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'border-box'\n});\nexport const resize_observer_device_pixel_content_box = /* @__PURE__ */ new ResizeObserverSingleton(\n\t{ box: 'device-pixel-content-box' }\n);\nexport { ResizeObserverSingleton };\n\n/**\n * @returns {void} */\nexport function toggle_class(element, name, toggle) {\n\t// The `!!` is required because an `undefined` flag means flipping the current state.\n\telement.classList.toggle(name, !!toggle);\n}\n\n/**\n * @template T\n * @param {string} type\n * @param {T} [detail]\n * @param {{ bubbles?: boolean, cancelable?: boolean }} [options]\n * @returns {CustomEvent<T>}\n */\nexport function custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {\n\treturn new CustomEvent(type, { detail, bubbles, cancelable });\n}\n\n/**\n * @param {string} selector\n * @param {HTMLElement} parent\n * @returns {ChildNodeArray}\n */\nexport function query_selector_all(selector, parent = document.body) {\n\treturn Array.from(parent.querySelectorAll(selector));\n}\n\n/**\n * @param {string} nodeId\n * @param {HTMLElement} head\n * @returns {any[]}\n */\nexport function head_selector(nodeId, head) {\n\tconst result = [];\n\tlet started = 0;\n\tfor (const node of head.childNodes) {\n\t\tif (node.nodeType === 8 /* comment node */) {\n\t\t\tconst comment = node.textContent.trim();\n\t\t\tif (comment === `HEAD_${nodeId}_END`) {\n\t\t\t\tstarted -= 1;\n\t\t\t\tresult.push(node);\n\t\t\t} else if (comment === `HEAD_${nodeId}_START`) {\n\t\t\t\tstarted += 1;\n\t\t\t\tresult.push(node);\n\t\t\t}\n\t\t} else if (started > 0) {\n\t\t\tresult.push(node);\n\t\t}\n\t}\n\treturn result;\n}\n/** */\nexport class HtmlTag {\n\t/**\n\t * @private\n\t * @default false\n\t */\n\tis_svg = false;\n\t/** parent for creating node */\n\te = undefined;\n\t/** html tag nodes */\n\tn = undefined;\n\t/** target */\n\tt = undefined;\n\t/** anchor */\n\ta = undefined;\n\tconstructor(is_svg = false) {\n\t\tthis.is_svg = is_svg;\n\t\tthis.e = this.n = null;\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @returns {void}\n\t */\n\tc(html) {\n\t\tthis.h(html);\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @param {HTMLElement | SVGElement} target\n\t * @param {HTMLElement | SVGElement} anchor\n\t * @returns {void}\n\t */\n\tm(html, target, anchor = null) {\n\t\tif (!this.e) {\n\t\t\tif (this.is_svg)\n\t\t\t\tthis.e = svg_element(/** @type {keyof SVGElementTagNameMap} */ (target.nodeName));\n\t\t\t/** #7364 target for <template> may be provided as #document-fragment(11) */ else\n\t\t\t\tthis.e = element(\n\t\t\t\t\t/** @type {keyof HTMLElementTagNameMap} */ (\n\t\t\t\t\t\ttarget.nodeType === 11 ? 'TEMPLATE' : target.nodeName\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\tthis.t =\n\t\t\t\ttarget.tagName !== 'TEMPLATE'\n\t\t\t\t\t? target\n\t\t\t\t\t: /** @type {HTMLTemplateElement} */ (target).content;\n\t\t\tthis.c(html);\n\t\t}\n\t\tthis.i(anchor);\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @returns {void}\n\t */\n\th(html) {\n\t\tthis.e.innerHTML = html;\n\t\tthis.n = Array.from(\n\t\t\tthis.e.nodeName === 'TEMPLATE' ? this.e.content.childNodes : this.e.childNodes\n\t\t);\n\t}\n\n\t/**\n\t * @returns {void} */\n\ti(anchor) {\n\t\tfor (let i = 0; i < this.n.length; i += 1) {\n\t\t\tinsert(this.t, this.n[i], anchor);\n\t\t}\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @returns {void}\n\t */\n\tp(html) {\n\t\tthis.d();\n\t\tthis.h(html);\n\t\tthis.i(this.a);\n\t}\n\n\t/**\n\t * @returns {void} */\n\td() {\n\t\tthis.n.forEach(detach);\n\t}\n}\n\nexport class HtmlTagHydration extends HtmlTag {\n\t/** @type {Element[]} hydration claimed nodes */\n\tl = undefined;\n\n\tconstructor(is_svg = false, claimed_nodes) {\n\t\tsuper(is_svg);\n\t\tthis.e = this.n = null;\n\t\tthis.l = claimed_nodes;\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @returns {void}\n\t */\n\tc(html) {\n\t\tif (this.l) {\n\t\t\tthis.n = this.l;\n\t\t} else {\n\t\t\tsuper.c(html);\n\t\t}\n\t}\n\n\t/**\n\t * @returns {void} */\n\ti(anchor) {\n\t\tfor (let i = 0; i < this.n.length; i += 1) {\n\t\t\tinsert_hydration(this.t, this.n[i], anchor);\n\t\t}\n\t}\n}\n\n/**\n * @param {NamedNodeMap} attributes\n * @returns {{}}\n */\nexport function attribute_to_object(attributes) {\n\tconst result = {};\n\tfor (const attribute of attributes) {\n\t\tresult[attribute.name] = attribute.value;\n\t}\n\treturn result;\n}\n\n/**\n * @param {HTMLElement} element\n * @returns {{}}\n */\nexport function get_custom_elements_slots(element) {\n\tconst result = {};\n\telement.childNodes.forEach(\n\t\t/** @param {Element} node */ (node) => {\n\t\t\tresult[node.slot || 'default'] = true;\n\t\t}\n\t);\n\treturn result;\n}\n\nexport function construct_svelte_component(component, props) {\n\treturn new component(props);\n}\n\n/**\n * @typedef {Node & {\n * \tclaim_order?: number;\n * \thydrate_init?: true;\n * \tactual_end_child?: NodeEx;\n * \tchildNodes: NodeListOf<NodeEx>;\n * }} NodeEx\n */\n\n/** @typedef {ChildNode & NodeEx} ChildNodeEx */\n\n/** @typedef {NodeEx & { claim_order: number }} NodeEx2 */\n\n/**\n * @typedef {ChildNodeEx[] & {\n * \tclaim_info?: {\n * \t\tlast_index: number;\n * \t\ttotal_claimed: number;\n * \t};\n * }} ChildNodeArray\n */\n","import {\n\trun_all,\n\tsubscribe,\n\tnoop,\n\tsafe_not_equal,\n\tis_function,\n\tget_store_value\n} from '../internal/index.js';\n\nconst subscriber_queue = [];\n\n/**\n * Creates a `Readable` store that allows reading by subscription.\n *\n * https://svelte.dev/docs/svelte-store#readable\n * @template T\n * @param {T} [value] initial value\n * @param {import('./public.js').StartStopNotifier<T>} [start]\n * @returns {import('./public.js').Readable<T>}\n */\nexport function readable(value, start) {\n\treturn {\n\t\tsubscribe: writable(value, start).subscribe\n\t};\n}\n\n/**\n * Create a `Writable` store that allows both updating and reading by subscription.\n *\n * https://svelte.dev/docs/svelte-store#writable\n * @template T\n * @param {T} [value] initial value\n * @param {import('./public.js').StartStopNotifier<T>} [start]\n * @returns {import('./public.js').Writable<T>}\n */\nexport function writable(value, start = noop) {\n\t/** @type {import('./public.js').Unsubscriber} */\n\tlet stop;\n\t/** @type {Set<import('./private.js').SubscribeInvalidateTuple<T>>} */\n\tconst subscribers = new Set();\n\t/** @param {T} new_value\n\t * @returns {void}\n\t */\n\tfunction set(new_value) {\n\t\tif (safe_not_equal(value, new_value)) {\n\t\t\tvalue = new_value;\n\t\t\tif (stop) {\n\t\t\t\t// store is ready\n\t\t\t\tconst run_queue = !subscriber_queue.length;\n\t\t\t\tfor (const subscriber of subscribers) {\n\t\t\t\t\tsubscriber[1]();\n\t\t\t\t\tsubscriber_queue.push(subscriber, value);\n\t\t\t\t}\n\t\t\t\tif (run_queue) {\n\t\t\t\t\tfor (let i = 0; i < subscriber_queue.length; i += 2) {\n\t\t\t\t\t\tsubscriber_queue[i][0](subscriber_queue[i + 1]);\n\t\t\t\t\t}\n\t\t\t\t\tsubscriber_queue.length = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {import('./public.js').Updater<T>} fn\n\t * @returns {void}\n\t */\n\tfunction update(fn) {\n\t\tset(fn(value));\n\t}\n\n\t/**\n\t * @param {import('./public.js').Subscriber<T>} run\n\t * @param {import('./private.js').Invalidator<T>} [invalidate]\n\t * @returns {import('./public.js').Unsubscriber}\n\t */\n\tfunction subscribe(run, invalidate = noop) {\n\t\t/** @type {import('./private.js').SubscribeInvalidateTuple<T>} */\n\t\tconst subscriber = [run, invalidate];\n\t\tsubscribers.add(subscriber);\n\t\tif (subscribers.size === 1) {\n\t\t\tstop = start(set, update) || noop;\n\t\t}\n\t\trun(value);\n\t\treturn () => {\n\t\t\tsubscribers.delete(subscriber);\n\t\t\tif (subscribers.size === 0 && stop) {\n\t\t\t\tstop();\n\t\t\t\tstop = null;\n\t\t\t}\n\t\t};\n\t}\n\treturn { set, update, subscribe };\n}\n\n/**\n * Derived value store by synchronizing one or more readable stores and\n * applying an aggregation function over its input values.\n *\n * https://svelte.dev/docs/svelte-store#derived\n * @template {import('./private.js').Stores} S\n * @template T\n * @overload\n * @param {S} stores - input stores\n * @param {(values: import('./private.js').StoresValues<S>, set: (value: T) => void, update: (fn: import('./public.js').Updater<T>) => void) => import('./public.js').Unsubscriber | void} fn - function callback that aggregates the values\n * @param {T} [initial_value] - initial value\n * @returns {import('./public.js').Readable<T>}\n */\n\n/**\n * Derived value store by synchronizing one or more readable stores and\n * applying an aggregation function over its input values.\n *\n * https://svelte.dev/docs/svelte-store#derived\n * @template {import('./private.js').Stores} S\n * @template T\n * @overload\n * @param {S} stores - input stores\n * @param {(values: import('./private.js').StoresValues<S>) => T} fn - function callback that aggregates the values\n * @param {T} [initial_value] - initial value\n * @returns {import('./public.js').Readable<T>}\n */\n\n/**\n * @template {import('./private.js').Stores} S\n * @template T\n * @param {S} stores\n * @param {Function} fn\n * @param {T} [initial_value]\n * @returns {import('./public.js').Readable<T>}\n */\nexport function derived(stores, fn, initial_value) {\n\tconst single = !Array.isArray(stores);\n\t/** @type {Array<import('./public.js').Readable<any>>} */\n\tconst stores_array = single ? [stores] : stores;\n\tif (!stores_array.every(Boolean)) {\n\t\tthrow new Error('derived() expects stores as input, got a falsy value');\n\t}\n\tconst auto = fn.length < 2;\n\treturn readable(initial_value, (set, update) => {\n\t\tlet started = false;\n\t\tconst values = [];\n\t\tlet pending = 0;\n\t\tlet cleanup = noop;\n\t\tconst sync = () => {\n\t\t\tif (pending) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcleanup();\n\t\t\tconst result = fn(single ? values[0] : values, set, update);\n\t\t\tif (auto) {\n\t\t\t\tset(result);\n\t\t\t} else {\n\t\t\t\tcleanup = is_function(result) ? result : noop;\n\t\t\t}\n\t\t};\n\t\tconst unsubscribers = stores_array.map((store, i) =>\n\t\t\tsubscribe(\n\t\t\t\tstore,\n\t\t\t\t(value) => {\n\t\t\t\t\tvalues[i] = value;\n\t\t\t\t\tpending &= ~(1 << i);\n\t\t\t\t\tif (started) {\n\t\t\t\t\t\tsync();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tpending |= 1 << i;\n\t\t\t\t}\n\t\t\t)\n\t\t);\n\t\tstarted = true;\n\t\tsync();\n\t\treturn function stop() {\n\t\t\trun_all(unsubscribers);\n\t\t\tcleanup();\n\t\t\t// We need to set this to false because callbacks can still happen despite having unsubscribed:\n\t\t\t// Callbacks might already be placed in the queue which doesn't know it should no longer\n\t\t\t// invoke this derived store.\n\t\t\tstarted = false;\n\t\t};\n\t});\n}\n\n/**\n * Takes a store and returns a new one derived from the old one that is readable.\n *\n * https://svelte.dev/docs/svelte-store#readonly\n * @template T\n * @param {import('./public.js').Readable<T>} store - store to make readonly\n * @returns {import('./public.js').Readable<T>}\n */\nexport function readonly(store) {\n\treturn {\n\t\tsubscribe: store.subscribe.bind(store)\n\t};\n}\n\nexport { get_store_value as get };\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"divkit-b023c\",\"root__clickable\":\"divkit-bd259\",\"root__clickable-no-transition\":\"divkit-d9099\",\"root__unselectable\":\"divkit-c016b\",\"root_platform_desktop\":\"divkit-ee112\",\"root__only-desktop\":\"divkit-fef1e\",\"root_restrict-scroll\":\"divkit-aa145\",\"root_disabled-context-menu\":\"divkit-f0cba\"};","import type { Readable, Writable } from 'svelte/store';\nimport type { WrappedError } from '../utils/wrapError';\nimport type { Action, DisappearAction, DivBase, DivExtension, DivExtensionContext, TemplateContext, TypefaceProvider, VisibilityAction } from '../../typings/common';\nimport type { DivBaseData, Tooltip } from '../types/base';\nimport type { MaybeMissing } from '../expressions/json';\nimport type { Variable, VariableType } from '../expressions/variable';\nimport type { TintMode } from '../types/image';\nimport type { Customization } from '../../typings/common';\n\nexport const ROOT_CTX = Symbol('root');\n\nexport type Running = 'stateChange';\n\nexport interface ParentMethods {\n replaceWith: (id: string, items?: DivBase[]) => void;\n}\n\nexport interface RootCtxValue {\n logError(error: WrappedError): void;\n logStat(type: string, action: MaybeMissing<Action | VisibilityAction | DisappearAction>): void;\n hasTemplate(templateName: string): boolean;\n processTemplate(json: DivBaseData, templateContext: TemplateContext): {\n json: DivBaseData;\n templateContext: TemplateContext;\n };\n genId(key: string): string;\n genClass(key: string): string;\n execAction(action: MaybeMissing<Action | VisibilityAction | DisappearAction>): void;\n execAnyActions(actions: MaybeMissing<Action[]> | undefined, processUrls?: boolean): Promise<void>;\n execCustomAction(action: (Action | VisibilityAction | DisappearAction) & { url: string }): void;\n isRunning(type: Running): boolean;\n setRunning(type: Running, val: boolean): void;\n registerInstance<T>(id: string, block: T): void;\n unregisterInstance(id: string): void;\n registerParentOf(id: string, methods: ParentMethods): void;\n unregisterParentOf(id: string): void;\n registerTooltip(node: HTMLElement, tooltip: Tooltip): void;\n unregisterTooltip(tooltip: Tooltip): void;\n onTooltipClose(internalId: number): void;\n tooltipRoot: HTMLElement | undefined;\n addSvgFilter(color: string, mode: TintMode): string;\n removeSvgFilter(color: string | undefined, mode: TintMode): void;\n getDerivedFromVars<T>(jsonProp: T): Readable<MaybeMissing<T>>;\n getJsonWithVars<T>(jsonProp: T): MaybeMissing<T>;\n getStore<T>(id: string): Writable<T>;\n getVariable(varName: string, type: VariableType): Variable | undefined;\n getCustomization<K extends keyof Customization>(prop: K): Customization[K] | undefined;\n getBuiltinProtocols(): Set<string>;\n getExtension(id: string, params: object | undefined): DivExtension | undefined;\n getExtensionContext(): DivExtensionContext;\n isPointerFocus: Readable<boolean>;\n typefaceProvider: TypefaceProvider;\n isDesktop: Readable<boolean>;\n\n // Devtool\n registerComponent?({\n node,\n json,\n origJson,\n templateContext\n }: {\n node: HTMLElement;\n json: Partial<DivBaseData>;\n origJson: DivBase | undefined;\n templateContext: TemplateContext;\n }): void;\n unregisterComponent?({\n node\n }: {\n node: HTMLElement;\n }): void;\n}\n","export interface WrappedError extends Error {\n level: 'error' | 'warn';\n additional?: Record<string, unknown>;\n}\n\nexport type LogError = (error: WrappedError) => void;\n\nexport function wrapError(error: Error, params: {\n level?: 'error' | 'warn';\n additional?: Record<string, unknown>;\n} = {}): WrappedError {\n const wrapped = error as WrappedError;\n\n wrapped.level = params.level || 'error';\n\n if (params.additional) {\n wrapped.additional = params.additional;\n }\n\n return wrapped;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"text-range\":\"divkit-faf07\",\"text\":\"divkit-d9b0e\",\"text_halign_left\":\"divkit-a4cb7\",\"text_halign_center\":\"divkit-e1659\",\"text_halign_right\":\"divkit-ea280\",\"text_valign_top\":\"divkit-d8ce0\",\"text_valign_center\":\"divkit-ef58e\",\"text_valign_bottom\":\"divkit-fe8ed\",\"text_valign_baseline\":\"divkit-e0c6c\",\"text__inner\":\"divkit-b8528\",\"text_singleline\":\"divkit-ef11c\",\"text_truncate_none\":\"divkit-c6ea1\",\"text_multiline\":\"divkit-ee8e3\",\"text__inner_gradient\":\"divkit-cb8e0\",\"text__image\":\"divkit-bf6e2\",\"text__image_hidden\":\"divkit-f1002\"};","// extracted by mini-css-extract-plugin\nexport default {\"outer\":\"divkit-d65a7\",\"outer_hide-on-transition-in\":\"divkit-a6d12\",\"outer_halign-self_start\":\"divkit-cc452\",\"outer_halign-self_center\":\"divkit-b8331\",\"outer_halign-self_end\":\"divkit-c573c\",\"outer_halign-self_stretch\":\"divkit-dcc74\",\"outer_valign-self_start\":\"divkit-e8077\",\"outer_valign-self_center\":\"divkit-d40a7\",\"outer_valign-self_end\":\"divkit-e9f84\",\"outer_valign-self_stretch\":\"divkit-b7aa3\",\"outer_parent-flex_vertical\":\"divkit-c143f\",\"outer_parent-flex_horizontal\":\"divkit-ef302\",\"outer_valign-self_baseline\":\"divkit-e72b5\",\"outer_width_content\":\"divkit-b8f4d\",\"outer_height_content\":\"divkit-faa66\",\"outer_width-constrained\":\"divkit-d3211\",\"outer_parent-grid\":\"divkit-ff439\",\"outer_height-constrained\":\"divkit-a5256\",\"outer_parent-overlap\":\"divkit-dab2d\",\"outer_parent-overlap-absolute\":\"divkit-d43fb\",\"outer_scroll-snap_center\":\"divkit-d9e38\",\"outer_scroll-snap_start\":\"divkit-efd1e\",\"outer__border\":\"divkit-d4056\",\"outer_visibility_invisible\":\"divkit-f018b\",\"outer_visibility_gone\":\"divkit-e784b\",\"outer_has-action-animation\":\"divkit-f4980\",\"outer_has-custom-focus\":\"divkit-c7f14\"};","/**\n * Merges rules from object into css string\n * @param styles\n * @returns\n */\nexport function makeStyle(styles?: Record<string, string | number | undefined>): string | undefined {\n if (!styles) {\n return undefined;\n }\n\n let res = '';\n for (const key in styles) {\n if (styles.hasOwnProperty(key)) {\n if (!styles[key] && styles[key] !== 0) {\n continue;\n }\n if (res) {\n res += ';';\n }\n res += key + ':' + String(styles[key]);\n }\n }\n return res || undefined;\n}\n","/**\n * Converts px to em with rounding\n * @param value\n * @returns\n */\nexport function pxToEm(value: number): string {\n if (typeof value !== 'number' && typeof value !== 'string' || !value) {\n return '0';\n }\n\n const casted = Number(value);\n\n if (isNaN(casted)) {\n return '0';\n }\n\n return (Math.ceil(casted * 1000) / 10000) + 'em';\n}\n\nexport function pxToEmWithUnits(value: number): string {\n let res = pxToEm(value);\n\n if (res === '0') {\n res += 'em';\n }\n\n return res;\n}\n","export function padLeft(val: string, count: number): string {\n while (val.length < count) {\n val = '0' + val;\n }\n return val;\n}\n","import { padLeft } from './padLeft';\n\n/**\n * Converts color from app format (ARGB) to css format (RGBA)\n * @param color Color with format #RGB, #ARGB, #RRGGBB, #AARRGGBB\n * @param alpha Color additional opacity\n * @param defaultColor Default color value, used if input color is incorrect\n * @returns Color with opacity if it has correct format, or defaultColor elsewhere\n */\nexport function correctColor(color: string | undefined, alpha = 1, defaultColor = 'transparent'): string {\n color = (typeof color === 'string' && color || '').toLowerCase();\n\n if (color.charAt(0) !== '#') {\n return defaultColor;\n }\n\n const parsedColor = parseColor(color);\n if (parsedColor) {\n parsedColor.a *= alpha;\n return stringifyColorToCss(parsedColor);\n }\n\n return defaultColor;\n}\n\nexport interface ParsedColor {\n a: number;\n r: number;\n g: number;\n b: number;\n}\n\nfunction stringifyColorToCss(color: ParsedColor): string {\n if (color.a === 255) {\n return `#${[color.r, color.g, color.b].map(it => {\n return padLeft(Math.round(it).toString(16), 2);\n }).join('')}`;\n }\n\n return `rgba(${color.r},${color.g},${color.b},${(color.a / 255).toFixed(2)})`;\n}\n\nexport function parseColor(color: string): ParsedColor | null {\n const colorMatch = (\n // #AARRGGBB\n color.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i) ||\n // #ARGB\n color.match(/^#([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])$/i) ||\n // #RRGGBB\n color.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i) ||\n // #RGB\n color.match(/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i)\n );\n\n if (colorMatch) {\n // with alpha part in color\n if (colorMatch.length === 5) {\n const [_, a, r, g, b] = colorMatch;\n const redPart = r.length === 2 ? r : r + r;\n const greenPart = g.length === 2 ? g : g + g;\n const bluePart = b.length === 2 ? b : b + b;\n const alphaPart = a.length === 2 ? a : a + a;\n\n return {\n a: parseInt(alphaPart, 16),\n r: parseInt(redPart, 16),\n g: parseInt(greenPart, 16),\n b: parseInt(bluePart, 16)\n };\n }\n\n const [_, r, g, b] = colorMatch;\n const redPart = r.length === 2 ? r : r + r;\n const greenPart = g.length === 2 ? g : g + g;\n const bluePart = b.length === 2 ? b : b + b;\n\n return {\n a: 255,\n r: parseInt(redPart, 16),\n g: parseInt(greenPart, 16),\n b: parseInt(bluePart, 16)\n };\n }\n\n return null;\n}\n","/**\n * Escapes html\n * @param str\n * @returns\n */\nexport function htmlFilter(str: string): string {\n let str2 = String(str);\n\n if (str2.indexOf('&') > -1) {\n str2 = str2.replace(/&/g, '&');\n }\n if (str2.indexOf('<') > -1) {\n str2 = str2.replace(/</g, '<');\n }\n if (str2.indexOf('>') > -1) {\n str2 = str2.replace(/>/g, '>');\n }\n if (str2.indexOf('\"') > -1) {\n str2 = str2.replace(/\"/g, '"');\n }\n\n return str2;\n}\n","export const Truthy = Boolean as unknown as <T>(x: T | null | 0 | '' | false | undefined) => x is T;\n","import type { AlignmentHorizontal, AlignmentVertical } from '../types/alignment';\nimport type {\n Background,\n GradientBackground,\n ImageBackground,\n SolidBackground,\n RadialBackground,\n RadialGradientCenter\n} from '../types/background';\nimport type { ImageScale } from '../types/imageScale';\nimport type { MaybeMissing } from '../expressions/json';\nimport { correctColor } from './correctColor';\nimport { htmlFilter } from './htmlFilter';\nimport { Truthy } from './truthy';\nimport { pxToEmWithUnits } from './pxToEm';\n\nexport function getBackground(bgs: MaybeMissing<Background>[]): {\n color?: string;\n image?: string;\n size?: string;\n position?: string;\n} {\n if (bgs.length === 1 && bgs[0].type === 'solid') {\n return solidUnique({\n bg: bgs[0]\n });\n }\n\n const res = bgs\n .map(bg => {\n if (bg.type === 'solid') {\n return solid({\n bg\n });\n } else if (bg.type === 'gradient') {\n return gradient({\n bg\n });\n } else if (bg.type === 'image') {\n return image({\n bg\n });\n } else if (bg.type === 'radial_gradient') {\n return radial({\n bg\n });\n }\n })\n .filter(Truthy)\n .reverse()\n .reduce(function(acc, item) {\n acc.image.push(item.image);\n acc.size.push(item.size || 'auto');\n acc.position.push(item.pos || '50% 50%');\n\n return acc;\n }, {\n image: [] as string[],\n size: [] as string[],\n position: [] as string[]\n });\n\n return {\n image: res.image.join(','),\n size: res.size.join(','),\n position: res.position.join(',')\n };\n}\n\nfunction solid(opts: {\n bg: MaybeMissing<SolidBackground>;\n}): {\n size: string | undefined;\n pos: string | undefined;\n image: string;\n} {\n const color = correctColor(opts.bg.color || 'transparent');\n\n return {\n size: undefined,\n pos: undefined,\n image: `linear-gradient(to bottom,${color},${color})`\n };\n}\n\nfunction solidUnique(opts: {\n bg: MaybeMissing<SolidBackground>;\n}): {\n color: string;\n size: string;\n position: string;\n} {\n const color = correctColor(opts.bg.color || 'transparent');\n\n return {\n color,\n size: 'auto',\n position: '50% 50%'\n };\n}\n\nfunction gradient(opts: {\n bg: MaybeMissing<GradientBackground>;\n}): {\n size: string | undefined;\n pos: string | undefined;\n image: string;\n} | undefined {\n if (!Array.isArray(opts.bg?.colors)) {\n return;\n }\n\n const colors = opts.bg.colors.filter(Truthy) as string[];\n if (!colors.length) {\n return;\n }\n\n return {\n size: undefined,\n pos: undefined,\n image:\n 'linear-gradient(' +\n (90 - Number(opts.bg.angle || 0) + 'deg') +\n ',' +\n colors\n .map(color => correctColor(color))\n .join(',') +\n ')'\n };\n}\n\nconst RELATIVE_SIZE_MAP = {\n nearest_corner: 'closest-corner',\n farthest_corner: 'farthest-corner',\n nearest_side: 'closest-side',\n farthest_side: 'farthest-side'\n};\n\nfunction radialCenterToCss(center: MaybeMissing<RadialGradientCenter> | undefined): string {\n if (center && typeof center === 'object' && 'type' in center && center.value !== undefined) {\n if (center.type === 'fixed') {\n return pxToEmWithUnits(center.value);\n } else if (center.type === 'relative') {\n return `${Number(center.value) * 100}%`;\n }\n }\n\n return '50%';\n}\n\nfunction radial(opts: {\n bg: MaybeMissing<RadialBackground>;\n}): {\n size: string | undefined;\n pos: string | undefined;\n image: string;\n} | undefined {\n if (!Array.isArray(opts.bg?.colors)) {\n return;\n }\n\n const colors = opts.bg.colors.filter(Truthy) as string[];\n if (!colors.length) {\n return;\n }\n\n const sizeVal = opts.bg.radius;\n let size;\n if (sizeVal && typeof sizeVal === 'object' && 'type' in sizeVal && sizeVal.value !== undefined) {\n if (sizeVal.type === 'fixed') {\n size = pxToEmWithUnits(sizeVal.value);\n } else if (sizeVal.type === 'relative') {\n size = RELATIVE_SIZE_MAP[sizeVal.value];\n }\n }\n\n const centerX = radialCenterToCss(opts.bg.center_x);\n const centerY = radialCenterToCss(opts.bg.center_y);\n\n return {\n size: undefined,\n pos: undefined,\n image:\n 'radial-gradient(' +\n `circle ${size || 'farthest-corner'} at ${centerX} ${centerY}` +\n ',' +\n colors\n .map(color => correctColor(color))\n .join(',') +\n ')'\n };\n}\n\nfunction image(opts: {\n bg: MaybeMissing<ImageBackground>;\n}): {\n size: string | undefined;\n pos: string | undefined;\n image: string;\n} | undefined {\n const image = opts.bg?.image_url;\n\n if (!image) {\n return;\n }\n\n return {\n size: imageSize(opts.bg.scale),\n pos: imagePos(opts.bg),\n image: 'url(\"' + htmlFilter(image) + '\")'\n };\n}\n\nexport function imageSize(scale?: ImageScale): string {\n if (scale === 'fit') {\n return 'contain';\n } else if (scale === 'stretch') {\n return 'fill';\n } else if (scale === 'no_scale') {\n return 'none';\n }\n\n // 'fill' and default\n return 'cover';\n}\n\nexport function imagePos(obj: {\n content_alignment_horizontal?: AlignmentHorizontal;\n content_alignment_vertical?: AlignmentVertical;\n}): string {\n let hpos: string;\n let vpos: string;\n\n if (obj.content_alignment_horizontal === 'left') {\n hpos = '0%';\n } else if (obj.content_alignment_horizontal === 'right') {\n hpos = '100%';\n } else {\n hpos = '50%';\n }\n\n if (obj.content_alignment_vertical === 'top') {\n vpos = '0%';\n } else if (obj.content_alignment_vertical === 'bottom') {\n vpos = '100%';\n } else {\n vpos = '50%';\n }\n\n return hpos + ' ' + vpos;\n}\n","export function getUrlSchema(url: string): string {\n const match = /^([^/]+):\\/\\//.exec(url);\n\n return match && match[1] || '';\n}\n\nexport function isBuiltinSchema(schema: string, builtinSchemas: Set<string>): boolean {\n return builtinSchemas.has(schema);\n}\n","import type { DisappearAction, VisibilityAction } from '../../typings/common';\nimport type { RootCtxValue } from '../context/root';\nimport { getUrlSchema, isBuiltinSchema } from '../utils/url';\n\nfunction checkPercentage(isVisibility: boolean, val: number | undefined, defaultVal: number): number {\n if (typeof val === 'number') {\n if (\n isVisibility && val > 0 && val <= 100 ||\n !isVisibility && val >= 0 && val < 100\n ) {\n return val;\n }\n }\n return defaultVal;\n}\n\nexport function visibilityAction(node: HTMLElement, {\n visibilityActions,\n disappearActions,\n rootCtx\n}: {\n visibilityActions?: VisibilityAction[];\n disappearActions?: DisappearAction[];\n rootCtx: RootCtxValue;\n}) {\n const visibilityStatus: {\n type: 'visibility' | 'disappear';\n index: number;\n action: VisibilityAction | DisappearAction;\n visible: boolean;\n count: number;\n finished: boolean;\n timer?: ReturnType<typeof setTimeout>;\n }[] = [];\n\n if (visibilityActions) {\n visibilityActions.forEach(it => {\n visibilityStatus.push({\n type: 'visibility',\n index: visibilityStatus.length,\n action: it,\n visible: false,\n count: 0,\n finished: false\n });\n });\n }\n\n if (disappearActions) {\n disappearActions.forEach(it => {\n visibilityStatus.push({\n type: 'disappear',\n index: visibilityStatus.length,\n action: it,\n visible: false,\n count: 0,\n // false, so disappear only works after the element becomes visible\n finished: false\n });\n });\n }\n\n const calcedList: {\n visibility_percentage: number;\n visibility_duration: number | undefined;\n log_limit: number | undefined;\n }[] = visibilityStatus.map(it => {\n const isVisibility = it.type === 'visibility';\n const calced = rootCtx.getJsonWithVars({\n visibility_percentage: it.action.visibility_percentage,\n visibility_duration: isVisibility ?\n (it.action as VisibilityAction).visibility_duration :\n (it.action as DisappearAction).disappear_duration,\n log_limit: it.action.log_limit\n });\n\n return {\n ...calced,\n visibility_percentage: checkPercentage(\n isVisibility,\n calced.visibility_percentage,\n isVisibility ? 50 : 0\n )\n };\n });\n\n const thresholds = [...new Set(calcedList.map(it =>\n it.visibility_percentage / 100\n ))];\n\n const observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n visibilityStatus.forEach(status => {\n const calcedParams = calcedList[status.index];\n const isVisibility = status.type === 'visibility';\n let nowVisible;\n if (calcedParams.visibility_percentage === 0) {\n nowVisible = entry.intersectionRatio >= 1e-12;\n } else {\n nowVisible = entry.intersectionRatio >= (calcedParams.visibility_percentage / 100);\n }\n const shouldProc = isVisibility ?\n !status.visible && nowVisible :\n status.visible && !nowVisible;\n const shouldClear = isVisibility ?\n !nowVisible :\n nowVisible;\n\n if (shouldProc) {\n if (!status.finished) {\n status.timer = setTimeout(() => {\n ++status.count;\n\n const limit = calcedParams.log_limit === 0 ? Infinity : (calcedParams.log_limit || 1);\n if (++status.count >= limit) {\n status.finished = true;\n }\n\n const calcedAction = rootCtx.getJsonWithVars(status.action);\n const actionUrl = calcedAction.url;\n if (actionUrl) {\n const schema = getUrlSchema(actionUrl);\n if (schema && !isBuiltinSchema(schema, rootCtx.getBuiltinProtocols())) {\n if (schema === 'div-action') {\n rootCtx.execAction(calcedAction);\n } else if (calcedAction.log_id) {\n rootCtx.execCustomAction(calcedAction as VisibilityAction & { url: string });\n }\n }\n }\n\n rootCtx.logStat(isVisibility ? 'visible' : 'disappear', calcedAction);\n }, calcedList[status.index].visibility_duration || 800);\n }\n } else if (shouldClear) {\n if (status.timer) {\n clearTimeout(status.timer);\n }\n }\n status.visible = nowVisible;\n });\n });\n }, {\n threshold: thresholds\n });\n\n observer.observe(node);\n\n return {\n destroy() {\n observer.disconnect();\n\n visibilityStatus.forEach(status => {\n if (status.timer) {\n clearTimeout(status.timer);\n }\n });\n }\n };\n}\n","import type { Mods } from '../types/general';\n\nfunction push(list: string[], val: string | undefined): void {\n if (val) {\n list.push(val);\n }\n}\n\nexport function genClassName(\n component: string,\n css: Record<string, string>,\n mods: Mods\n): string {\n const res: string[] = [];\n\n push(res, css[component]);\n\n for (const key in mods) {\n if (mods.hasOwnProperty(key)) {\n const val = mods[key];\n if (val) {\n const cssKey = `${component}_${key}` + (typeof val === 'string' ? `_${val}` : '');\n\n push(res, css[cssKey]);\n }\n }\n }\n\n return res.join(' ');\n}\n","import type { RootCtxValue } from '../context/root';\nimport type { DivBase, TemplateContext } from '../../typings/common';\nimport type { DivBaseData } from '../types/base';\n\nexport interface DevtoolResult {\n destroy(): void;\n}\n\nfunction devtoolReal(node: HTMLElement, {\n json,\n origJson,\n templateContext,\n rootCtx\n}: {\n json: Partial<DivBaseData>;\n origJson?: DivBase | undefined;\n templateContext: TemplateContext;\n rootCtx: RootCtxValue;\n}): DevtoolResult {\n rootCtx.registerComponent?.({\n node,\n json,\n origJson,\n templateContext\n });\n\n return {\n destroy() {\n rootCtx.unregisterComponent?.({ node });\n }\n };\n}\n\nexport const devtool = process.env.DEVTOOL ? devtoolReal : undefined;\n","import type { AppearanceTransition, DivBaseData } from '../types/base';\nimport type { TemplateContext } from '../../typings/common';\nimport type { TransitionChange } from '../types/base';\n\nexport const STATE_CTX = Symbol('state');\n\nexport interface StateInterface {\n getChild(id: string): StateInterface | undefined;\n setState(stateId: string): void;\n}\n\nexport interface StateCtxValue {\n registerInstance(id: string, block: StateInterface): void;\n\n unregisterInstance(id: string): void;\n\n registerChildWithTransitionIn(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: AppearanceTransition,\n node: HTMLElement\n ): Promise<void>;\n\n registerChildWithTransitionOut(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: AppearanceTransition,\n node: HTMLElement\n ): Promise<void>;\n\n registerChildWithTransitionChange(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: TransitionChange,\n node: HTMLElement\n ): Promise<void>;\n\n hasTransitionChange(id?: string): boolean;\n\n runVisibilityTransition(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: AppearanceTransition,\n node: HTMLElement,\n direction: 'in' | 'out'\n ): Promise<void>;\n\n registerChild(id: string): void;\n unregisterChild(id: string): void;\n}\n","import type { EdgeInsets } from '../types/edgeInserts';\nimport { pxToEm } from './pxToEm';\n\nexport function edgeInsertsToCss(edgeInsets: EdgeInsets): string {\n return pxToEm(edgeInsets.top || 0) +\n ' ' +\n pxToEm(edgeInsets.right || 0) +\n ' ' +\n pxToEm(edgeInsets.bottom || 0) +\n ' ' +\n pxToEm(edgeInsets.left || 0);\n}\n","export function isNumber(val: number | undefined): val is number {\n if (typeof val !== 'number' && typeof val !== 'string') {\n return false;\n }\n\n const num = Number(val);\n\n return !isNaN(num);\n}\n","import { isNumber } from './isNumber';\n\nexport function isNonNegativeNumber(val: number | undefined): val is number {\n return isNumber(val) && val >= 0;\n}\n","import type { EdgeInsets } from '../types/edgeInserts';\nimport { edgeInsertsToCss } from './edgeInsertsToCss';\nimport { isNonNegativeNumber } from './isNonNegativeNumber';\n\nexport function correctEdgeInserts(edgeInsets: EdgeInsets | undefined, defaultVal: string): string {\n if (!edgeInsets) {\n return defaultVal;\n }\n\n const list = [\n edgeInsets.top,\n edgeInsets.right,\n edgeInsets.bottom,\n edgeInsets.left\n ];\n\n for (let i = 0; i < list.length; ++i) {\n if (list[i] && !isNonNegativeNumber(list[i])) {\n return defaultVal;\n }\n }\n\n return edgeInsertsToCss(edgeInsets);\n}\n","export function correctNonNegativeNumber(val: number | undefined, defaultVal: number): number {\n const num = Number(val);\n if (isNaN(num) || num < 0) {\n return defaultVal;\n }\n return num;\n}\n","const hasOwnProperty = Object.prototype.hasOwnProperty;\n\nexport function isDeepEqual<A, B>(a: A, b: B): boolean {\n if (Object.is(a, b)) {\n return true;\n }\n\n if (\n typeof a !== 'object' ||\n a === null ||\n typeof b !== 'object' ||\n b === null\n ) {\n return Object.is(a, b);\n }\n\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n for (let i = 0; i < keysA.length; i++) {\n const key = keysA[i];\n\n if (!hasOwnProperty.call(b, key) || !isDeepEqual(a[key as keyof A], b[key as keyof B])) {\n return false;\n }\n }\n\n return true;\n}\n","import { isDeepEqual } from './isDeepEqual';\n\nexport function assignIfDifferent<A, B>(newVal: A, defaultVal: B): A | B {\n if (isDeepEqual(newVal, defaultVal)) {\n return defaultVal;\n }\n return newVal;\n}\n","import type { Interpolation } from '../types/base';\n\nexport function correctCSSInterpolator(\n interpolator: string | undefined,\n defaultVal: Interpolation\n): Interpolation {\n if (\n interpolator === 'linear' ||\n interpolator === 'ease' ||\n interpolator === 'ease_in_out' ||\n interpolator === 'ease_in' ||\n interpolator === 'ease_out'\n ) {\n return interpolator;\n }\n\n return defaultVal;\n}\n","export function correctNumber(val: number | undefined, defaultVal: number): number {\n const num = Number(val);\n if (isNaN(num)) {\n return defaultVal;\n }\n return num;\n}\n","import type { MaybeMissing } from '../expressions/json';\nimport type { Animation, AnyAnimation } from '../types/animation';\n\nexport function flattenAnimation(animation: MaybeMissing<Animation>): MaybeMissing<AnyAnimation>[] {\n const res: MaybeMissing<AnyAnimation>[] = [];\n\n if (animation.name === 'set') {\n (animation.items || []).forEach(item => {\n res.push(...flattenAnimation(item));\n });\n } else {\n res.push(animation as MaybeMissing<AnyAnimation>);\n }\n\n return res;\n}\n","import type { EdgeInsets } from '../types/edgeInserts';\nimport { isNonNegativeNumber } from './isNonNegativeNumber';\n\nexport function correctEdgeInsertsObject(\n edgeInsets: EdgeInsets | undefined,\n defaultVal: EdgeInsets | null\n): EdgeInsets | null {\n if (!edgeInsets || typeof edgeInsets !== 'object') {\n return defaultVal;\n }\n\n const list = [\n 'top',\n 'right',\n 'bottom',\n 'left'\n ] as const;\n\n for (let i = 0; i < list.length; ++i) {\n if (edgeInsets[list[i]] && !isNonNegativeNumber(edgeInsets[list[i]])) {\n return defaultVal;\n }\n }\n\n return edgeInsets;\n}\n","import type { CornersRadius } from '../types/border';\nimport { pxToEm } from './pxToEm';\n\nexport function borderRadius(cornersRadius: CornersRadius, defaultRadius = 0, fontSize = 10): string {\n return [\n cornersRadius['top-left'],\n cornersRadius['top-right'],\n cornersRadius['bottom-right'],\n cornersRadius['bottom-left']\n ]\n .map(it => pxToEm((it || defaultRadius) / fontSize * 10))\n .join(' ');\n}\n","// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport function doNothing(): void {}\n","export const ACTION_CTX = Symbol('action');\n\nexport interface ActionCtxValue {\n hasAction(): boolean;\n}\n","<script lang=\"ts\">\n import { getContext, setContext } from 'svelte';\n\n import rootCss from '../Root.module.css';\n\n import type { Action } from '../../../typings/common';\n import type { MaybeMissing } from '../../expressions/json';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { doNothing } from '../../utils/doNothing';\n import { ACTION_CTX, ActionCtxValue } from '../../context/action';\n import { wrapError } from '../../utils/wrapError';\n import { getUrlSchema, isBuiltinSchema } from '../../utils/url';\n import { Coords, getTouchCoords } from '../../utils/getTouchCoords';\n\n export let actions: MaybeMissing<Action[]> | undefined = undefined;\n export let doubleTapActions: MaybeMissing<Action[]> | undefined = undefined;\n export let longTapActions: MaybeMissing<Action[]> | undefined = undefined;\n export let cls = '';\n export let style: string | null = null;\n export let attrs: Record<string, string | undefined> | undefined = undefined;\n export let use: ((element: HTMLElement, opts?: any) => void) = doNothing;\n export let customAction: ((event: Event) => boolean) | null = null;\n export let isNativeActionAnimation = true;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n const actionCtx = getContext<ActionCtxValue>(ACTION_CTX);\n\n setContext<ActionCtxValue>(ACTION_CTX, {\n hasAction(): boolean {\n return Boolean(actionCtx.hasAction() || actions?.length);\n }\n });\n\n const MIN_SWIPE_PX = 8;\n const MIN_LONG_TAP_DURATION = 400;\n\n let node: HTMLElement;\n let href = '';\n let target: string | undefined = undefined;\n let startTs = -1;\n let startCoords: Coords | null = null;\n let isChanged = false;\n let hasJSAction = false;\n\n $: {\n if (Array.isArray(actions) && actions?.length) {\n for (let i = 0; i < actions.length; ++i) {\n const url = actions[i].url;\n\n if (url) {\n href = url;\n target = actions[i].target || undefined;\n break;\n }\n }\n }\n\n if (Array.isArray(actions) && actions?.length && actionCtx.hasAction()) {\n href = '';\n rootCtx.logError(wrapError(new Error('Actionable element is forbidden inside other actionable element'), {\n level: 'warn',\n additional: {\n actions\n }\n }));\n }\n\n hasJSAction = Boolean(customAction);\n if (href && !isBuiltinSchema(getUrlSchema(href), rootCtx.getBuiltinProtocols())) {\n href = '';\n hasJSAction = true;\n } else if (!href && Array.isArray(actions) && actions?.length) {\n hasJSAction = true;\n rootCtx.logError(wrapError(new Error('The component has a list of actions, but does not have a real action'), {\n level: 'warn',\n additional: {\n actions\n }\n }));\n }\n }\n\n $: if (node) {\n if (href || hasJSAction) {\n node.addEventListener('click', onClick);\n } else {\n node.removeEventListener('click', onClick);\n }\n\n if (doubleTapActions?.length) {\n node.addEventListener('dblclick', onDoubleClick);\n } else {\n node.removeEventListener('dblclick', onDoubleClick);\n }\n\n if (longTapActions?.length) {\n node.addEventListener('touchstart', onTouchStart, {\n passive: true\n });\n node.addEventListener('touchmove', onTouchMove, {\n passive: true\n });\n node.addEventListener('touchend', onTouchEnd, {\n passive: true\n });\n node.addEventListener('touchcancel', onTouchEnd, {\n passive: true\n });\n } else {\n node.removeEventListener('touchstart', onTouchStart);\n node.removeEventListener('touchmove', onTouchMove);\n node.removeEventListener('touchend', onTouchEnd);\n node.removeEventListener('touchcancel', onTouchEnd);\n }\n }\n\n async function onClick(event: MouseEvent): Promise<void> {\n if (actionCtx.hasAction()) {\n return;\n }\n\n if (event.button !== undefined && event.button !== 0) {\n return;\n }\n\n const cancelled = customAction?.(event) === false;\n\n if (cancelled) {\n event.preventDefault();\n } else if (actions) {\n const hasCustomAction = actions.some(action => {\n const url = action?.url;\n if (!url) {\n return false;\n }\n\n const schema = getUrlSchema(url);\n\n return schema && !isBuiltinSchema(schema, rootCtx.getBuiltinProtocols());\n });\n if (hasCustomAction) {\n event.preventDefault();\n }\n rootCtx.execAnyActions(actions);\n }\n }\n\n function onDoubleClick(event: MouseEvent): void {\n if (actionCtx.hasAction()) {\n return;\n }\n\n if (event.button !== undefined && event.button !== 0) {\n return;\n }\n\n rootCtx.execAnyActions(doubleTapActions, true);\n }\n\n function onTouchStart(event: TouchEvent): void {\n if (event.touches.length > 1) {\n return;\n }\n\n startCoords = getTouchCoords(event);\n isChanged = false;\n startTs = Date.now();\n }\n\n function onTouchMove(event: TouchEvent): void {\n if (!startCoords) {\n return;\n }\n\n const coords = getTouchCoords(event);\n\n if (Math.abs(startCoords.x - coords.x) > MIN_SWIPE_PX || Math.abs(startCoords.y - coords.y) > MIN_SWIPE_PX) {\n isChanged = true;\n }\n }\n\n function onTouchEnd(): void {\n if (!startCoords || startTs < 0) {\n return;\n }\n\n if (!isChanged && (Date.now() - startTs) >= MIN_LONG_TAP_DURATION) {\n rootCtx.execAnyActions(longTapActions, true);\n }\n\n startCoords = null;\n startTs = -1;\n }\n\n function onKeydown(event: KeyboardEvent): void {\n // todo check event.target is not inside current element\n\n const target = event.target;\n if (target instanceof HTMLElement) {\n if (target.tagName === 'INPUT' || target.contentEditable === 'true') {\n return;\n }\n }\n\n if (event.ctrlKey || event.metaKey || event.altKey || event.shiftKey) {\n return;\n }\n\n if (event.key === 'Enter' && Array.isArray(actions) && actions.length) {\n rootCtx.execAnyActions(actions);\n event.preventDefault();\n }\n }\n</script>\n\n{#if href}\n <a\n bind:this={node}\n use:use\n {href}\n {target}\n {style}\n class=\"{cls} {isNativeActionAnimation ? rootCss.root__clickable : rootCss['root__clickable-no-transition']} {longTapActions?.length ? rootCss['root_disabled-context-menu'] : ''}\"\n on:click\n on:keydown={onKeydown}\n on:focus\n on:blur\n {...attrs}\n >\n <slot />\n </a>\n{:else}\n <!-- svelte-ignore a11y-no-noninteractive-tabindex -->\n <span\n bind:this={node}\n use:use\n class=\"{cls}{hasJSAction ? ` ${isNativeActionAnimation ? rootCss.root__clickable : rootCss['root__clickable-no-transition']} ${rootCss.root__unselectable}` : ''} {longTapActions?.length ? rootCss['root_disabled-context-menu'] : ''}\"\n {style}\n role={hasJSAction ? 'button' : null}\n tabindex={hasJSAction ? 0 : null}\n on:click\n on:keydown={onKeydown}\n on:focus\n on:blur\n {...attrs}\n >\n <slot />\n </span>\n{/if}\n","// extracted by mini-css-extract-plugin\nexport default {\"outer-background\":\"divkit-bf253\",\"outer-background_clip\":\"divkit-dcad7\",\"outer-background__item\":\"divkit-b921d\",\"outer-background__item_hidden\":\"divkit-cd613\"};","import { isNumber } from './isNumber';\n\nexport function isPositiveNumber(val: number | undefined): val is number {\n return isNumber(val) && val > 0;\n}\n","import type { Filter } from '../types/filter';\nimport type { MaybeMissing } from '../expressions/json';\nimport { LogError, wrapError } from './wrapError';\nimport { isPositiveNumber } from './isPositiveNumber';\nimport { pxToEmWithUnits } from './pxToEm';\n\nexport function getCssFilter(filters: MaybeMissing<Filter>[], logError: LogError): string {\n return filters.map(filter => {\n if (filter?.type === 'blur') {\n if (isPositiveNumber(filter.radius)) {\n return `blur(${pxToEmWithUnits(filter.radius / 2)})`;\n }\n } else {\n logError(wrapError(new Error('Unknown filter'), {\n level: 'warn',\n additional: {\n filter: filter?.type\n }\n }));\n }\n }).filter(Boolean).join(' ');\n}\n","<script lang=\"ts\">\n import { getContext } from 'svelte';\n\n import css from './OuterBackground.module.css';\n\n import type { Style } from '../../types/general';\n import type { Background } from '../../types/background';\n import type { MaybeMissing } from '../../expressions/json';\n import { getBackground } from '../../utils/background';\n import { makeStyle } from '../../utils/makeStyle';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { getCssFilter } from '../../utils/filters';\n\n export let background: MaybeMissing<Background[]> = [];\n export let radius = '';\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n $: styles = background.map(bg => {\n const stl: Style = {};\n const obj: {\n image_url?: string;\n style: Style;\n } = {\n style: stl\n };\n\n if (bg.type === 'nine_patch_image' && bg.insets) {\n stl['border-image'] = `url(\"${bg.image_url}\") ${bg.insets.top || 0} ${bg.insets.right || 0} ${bg.insets.bottom || 0} ${bg.insets.left || 0} fill`;\n stl['border-image-width'] = 'auto';\n } else {\n const res = getBackground([bg]);\n\n if (bg.type === 'solid') {\n stl['background-color'] = res.color;\n }\n if (bg.type === 'gradient') {\n stl['background-image'] = res.image;\n }\n if (bg.type === 'image') {\n stl.opacity = Number(bg.alpha);\n obj.image_url = bg.image_url;\n stl['object-fit'] = res.size;\n stl['object-position'] = res.position;\n\n if (Array.isArray(bg.filters) && bg.filters.length) {\n stl.filter = getCssFilter(bg.filters, rootCtx.logError);\n }\n }\n }\n\n return obj;\n });\n\n function onImgError(event: Event): void {\n if (event.target && 'classList' in event.target) {\n (event.target as HTMLElement).classList.add(css['outer-background__item_hidden']);\n }\n }\n</script>\n\n<span\n class={css['outer-background'] + (radius ? ' ' + css['outer-background_clip'] : '')}\n style:border-radius={radius}\n>\n {#each styles as item}\n {#if item.image_url}\n <img\n src={item.image_url}\n alt=\"\"\n aria-hidden=\"true\"\n loading=\"lazy\"\n decoding=\"async\"\n class={css['outer-background__item']}\n style={makeStyle(item.style)}\n on:error={onImgError}\n >{:else}<span class={css['outer-background__item']} style={makeStyle(item.style)}></span>\n {/if}\n {/each}\n</span>\n","<script lang=\"ts\">\n import { getContext, onDestroy, tick } from 'svelte';\n\n import css from './Outer.module.css';\n\n import type { DivBaseData } from '../../types/base';\n import type { Mods, Style } from '../../types/general';\n import type { DivActionableData } from '../../types/actionable';\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivBase, DivExtension, TemplateContext } from '../../../typings/common';\n import type { Visibility } from '../../types/base';\n import type { Action } from '../../../typings/common';\n import type { MaybeMissing } from '../../expressions/json';\n import type { EdgeInsets } from '../../types/edgeInserts';\n import type { CornersRadius } from '../../types/border';\n import type { WrapContentSize } from '../../types/sizes';\n import type { Background } from '../../types/background';\n import type { Animation, AnyAnimation } from '../../types/animation';\n import { makeStyle } from '../../utils/makeStyle';\n import { pxToEm, pxToEmWithUnits } from '../../utils/pxToEm';\n import { getBackground } from '../../utils/background';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { visibilityAction } from '../../use/visibilityAction';\n import { genClassName } from '../../utils/genClassName';\n import { devtool, DevtoolResult } from '../../use/devtool';\n import { STATE_CTX, StateCtxValue } from '../../context/state';\n import { correctEdgeInserts } from '../../utils/correctEdgeInserts';\n import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n import { correctAlpha } from '../../utils/correctAlpha';\n import { assignIfDifferent } from '../../utils/assignIfDifferent';\n import { correctColor } from '../../utils/correctColor';\n import { correctVisibility } from '../../utils/correctVisibility';\n import { wrapError } from '../../utils/wrapError';\n import { correctCSSInterpolator } from '../../utils/correctCSSInterpolator';\n import { correctNumber } from '../../utils/correctNumber';\n import { flattenAnimation } from '../../utils/flattenAnimation';\n import { correctEdgeInsertsObject } from '../../utils/correctEdgeInsertsObject';\n import { edgeInsertsToCss } from '../../utils/edgeInsertsToCss';\n import { sumEdgeInsets } from '../../utils/sumEdgeInsets';\n import { correctBorderRadiusObject } from '../../utils/correctBorderRadiusObject';\n import { borderRadius } from '../../utils/borderRadius';\n import { isNonNegativeNumber } from '../../utils/isNonNegativeNumber';\n import Actionable from './Actionable.svelte';\n import OuterBackground from './OuterBackground.svelte';\n import { Truthy } from '../../utils/truthy';\n\n export let json: Partial<DivBaseData & DivActionableData> = {};\n export let origJson: DivBase | undefined = undefined;\n export let templateContext: TemplateContext;\n export let cls = '';\n export let style: Style | undefined = undefined;\n export let layoutParams: LayoutParams = {};\n export let customDescription = false;\n export let customPaddings = false;\n export let customActions = '';\n export let additionalPaddings: EdgeInsets | null = null;\n export let heightByAspect = false;\n export let parentOf: DivBaseData[] | undefined = undefined;\n export let replaceItems: ((items: DivBaseData[]) => void) | undefined = undefined;\n\n const HORIZONTAL_ALIGN_TO_GENERAL = {\n left: 'start',\n center: 'center',\n right: 'end'\n };\n\n const VERTICAL_ALIGN_TO_GENERAL = {\n top: 'start',\n center: 'center',\n bottom: 'end',\n baseline: 'baseline'\n };\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n const stateCtx = getContext<StateCtxValue>(STATE_CTX);\n\n let currentNode: HTMLElement;\n let attrs: Record<string, string> | undefined;\n let extensions: DivExtension[] | null = null;\n\n let prevChilds: string[] = [];\n $: {\n prevChilds.forEach(id => {\n rootCtx.unregisterParentOf(id);\n });\n prevChilds = [];\n if (parentOf) {\n parentOf.forEach(item => {\n if (item.id) {\n prevChilds.push(item.id);\n rootCtx.registerParentOf(item.id, {\n replaceWith\n });\n }\n });\n }\n }\n\n function replaceWith(id: string, items?: DivBase[]): void {\n if (!Array.isArray(parentOf) || !replaceItems) {\n return;\n }\n\n const index = parentOf.findIndex(json => json?.id === id);\n const newItems = parentOf.slice();\n newItems.splice(index, 1, ...(items || []));\n\n parentOf = newItems;\n\n replaceItems(newItems);\n }\n\n $: jsonFocus = rootCtx.getDerivedFromVars(json.focus);\n\n $: jsonBorder = rootCtx.getDerivedFromVars(json.border);\n let borderStyle: Style = {};\n let borderElemStyle: Style = {};\n let hasBorder = false;\n let strokeWidth = 1;\n let strokeColor = 'transparent';\n let cornerRadius = 0;\n let cornersRadius: CornersRadius = {\n 'top-left': 0,\n 'top-right': 0,\n 'bottom-right': 0,\n 'bottom-left': 0\n };\n let backgroundRadius = '';\n $: {\n const border = hasCustomFocus && $jsonFocus?.border ? $jsonFocus.border : $jsonBorder;\n let newBorderStyle: Style = {};\n let newBorderElemStyle: Style = {};\n let newHasBorder = false;\n let newBackgroundRadius = '';\n\n if (border) {\n if (border.has_shadow) {\n const shadow = border.shadow;\n if (shadow) {\n newBorderStyle['box-shadow'] =\n pxToEm(shadow.offset?.x?.value || 0) + ' ' +\n pxToEm(shadow.offset?.y?.value || 0) + ' ' +\n pxToEm(shadow.blur ?? 2) + ' ' +\n correctColor(shadow.color || '#000000', shadow.alpha ?? 0.19);\n } else {\n newBorderStyle['box-shadow'] = '0 1px 2px 0 rgba(0,0,0,.18), 0 0 0 1px rgba(0,0,0,.07)';\n }\n }\n if (border.stroke) {\n newHasBorder = true;\n strokeWidth = correctNonNegativeNumber(border.stroke.width, strokeWidth);\n strokeColor = correctColor(border.stroke.color, 1, strokeColor);\n newBorderElemStyle.border = `${pxToEm(strokeWidth)} solid ${strokeColor}`;\n }\n if (border.corners_radius) {\n cornersRadius = correctBorderRadiusObject(border.corners_radius, cornersRadius);\n newBorderElemStyle['border-radius'] = newBorderStyle['border-radius'] = borderRadius(cornersRadius);\n } else if (border.corner_radius) {\n cornerRadius = correctNonNegativeNumber(border.corner_radius, cornerRadius);\n cornersRadius = {\n 'top-left': cornerRadius,\n 'top-right': cornerRadius,\n 'bottom-right': cornerRadius,\n 'bottom-left': cornerRadius\n };\n newBorderElemStyle['border-radius'] = newBorderStyle['border-radius'] = pxToEm(cornerRadius);\n }\n\n // Clip browser rendering artifacts by border-radius + border-width/2\n if (newHasBorder && strokeWidth && (border.corners_radius || border.corner_radius)) {\n let radius: CornersRadius = { ...cornersRadius };\n\n ([\n 'top-left',\n 'top-right',\n 'bottom-right',\n 'bottom-left'\n ] as const).forEach(corner => {\n radius[corner] = (radius[corner] || 0) + strokeWidth / 2;\n });\n\n newBackgroundRadius = borderRadius(radius);\n }\n }\n borderStyle = assignIfDifferent(newBorderStyle, borderStyle);\n borderElemStyle = assignIfDifferent(newBorderElemStyle, borderElemStyle);\n hasBorder = newHasBorder;\n backgroundRadius = newBackgroundRadius;\n }\n\n $: jsonPaddings = rootCtx.getDerivedFromVars(json.paddings);\n let selfPadding: EdgeInsets | null = null;\n $: {\n selfPadding = correctEdgeInsertsObject(\n ($jsonPaddings && !customPaddings) ?\n $jsonPaddings :\n undefined,\n selfPadding\n );\n }\n\n $: padding = edgeInsertsToCss(sumEdgeInsets(selfPadding, additionalPaddings));\n\n $: jsonMargins = rootCtx.getDerivedFromVars(json.margins);\n let margin = '';\n $: {\n margin = correctEdgeInserts($jsonMargins, margin);\n }\n\n $: jsonWidth = rootCtx.getDerivedFromVars(json.width);\n $: jsonAlignmentHorizontal = rootCtx.getDerivedFromVars(json.alignment_horizontal);\n let widthMods: Mods = {};\n let width: string | undefined;\n let widthMin: string | undefined;\n let widthMax: string | undefined;\n let widthNum = 0;\n let widthFlexGrow = 0;\n let widthFlexShrink = 0;\n let widthFill = false;\n let hasWidthError = false;\n $: {\n let widthType: 'parent' | 'content' | undefined = undefined;\n let newWidth: string | undefined = undefined;\n let newWidthMin: string | undefined = undefined;\n let newWidthMax: string | undefined = undefined;\n let newWidthMods: Mods = {};\n let newFlexGrow = 0;\n let newFlexShrink = 0;\n let newWidthFill = false;\n let newWidthError = false;\n\n const type = $jsonWidth?.type;\n\n if (type === 'fixed') {\n widthNum = correctNonNegativeNumber($jsonWidth?.value, widthNum);\n newWidth = pxToEm(widthNum);\n } else if (\n type === 'wrap_content' ||\n !layoutParams.overlapParent && (type === 'match_parent' || !type) && layoutParams.parentHorizontalWrapContent\n ) {\n widthType = 'content';\n if (\n type === 'wrap_content' && $jsonWidth?.constrained ||\n (type === 'match_parent' || !type) && layoutParams.parentHorizontalWrapContent\n ) {\n newWidthMods['width-constrained'] = true;\n if (layoutParams.parentContainerOrientation === 'horizontal') {\n newFlexShrink = 1;\n }\n }\n\n if (type === 'wrap_content') {\n const width = $jsonWidth as WrapContentSize;\n if (width.min_size && isNonNegativeNumber(width.min_size.value)) {\n newWidthMin = pxToEm(width.min_size.value);\n }\n if (width.max_size && isNonNegativeNumber(width.max_size.value)) {\n newWidthMax = pxToEm(width.max_size.value);\n }\n }\n\n if (type === 'match_parent' || !type) {\n rootCtx.logError(wrapError(new Error('Cannot place child with match_parent size inside wrap_content'), {\n level: 'warn'\n }));\n }\n } else {\n widthType = 'parent';\n if (layoutParams.parentContainerOrientation === 'vertical' && layoutParams.parentContainerWrap) {\n newWidthError = true;\n rootCtx.logError(wrapError(new Error('Cannot place a match_parent items on the cross-axis of wrap'), {\n level: 'error'\n }));\n }\n if (layoutParams.parentLayoutOrientation === 'vertical') {\n newWidth = `calc(100% - ${pxToEmWithUnits(($jsonMargins?.left || 0) + ($jsonMargins?.right || 0))})`;\n } else if (layoutParams.parentContainerOrientation === 'horizontal') {\n newFlexGrow = $jsonWidth && 'weight' in $jsonWidth && $jsonWidth.weight || 1;\n if (layoutParams.parentContainerWrap) {\n newWidthFill = true;\n }\n }\n }\n\n if (widthType === 'parent') {\n newWidthMods['halign-self'] = 'stretch';\n } else {\n const align = $jsonAlignmentHorizontal;\n if (align === 'left' || align === 'center' || align === 'right') {\n newWidthMods['halign-self'] = HORIZONTAL_ALIGN_TO_GENERAL[align as keyof typeof HORIZONTAL_ALIGN_TO_GENERAL];\n } else {\n newWidthMods['halign-self'] = layoutParams.parentHAlign || 'start';\n }\n }\n\n if (widthType) {\n newWidthMods.width = widthType;\n }\n\n width = newWidth;\n widthMin = newWidthMin;\n widthMax = newWidthMax;\n widthFlexGrow = newFlexGrow;\n widthFlexShrink = newFlexShrink;\n widthMods = assignIfDifferent(newWidthMods, widthMods);\n widthFill = newWidthFill;\n hasWidthError = newWidthError;\n }\n\n $: jsonHeight = rootCtx.getDerivedFromVars(json.height);\n $: jsonAlignmentVertical = rootCtx.getDerivedFromVars(json.alignment_vertical);\n let heightMods: Mods = {};\n let height: string | undefined;\n let heightMin: string | undefined;\n let heightMax: string | undefined;\n let heightNum = 0;\n let heightFlexGrow = 0;\n let heightFlexShrink = 0;\n let heightFill = false;\n let hasHeightError = false;\n $: {\n let heightType: 'parent' | 'content' | undefined = undefined;\n let newHeight: string | undefined = undefined;\n let newHeightMin: string | undefined = undefined;\n let newHeightMax: string | undefined = undefined;\n let newHeightMods: Mods = {};\n let newFlexGrow = 0;\n let newFlexShrink = 0;\n let newHeightFill = false;\n let newHeightError = false;\n\n const type = $jsonHeight?.type;\n\n if (heightByAspect) {\n // auto height\n // no special css needed, so no special heightType\n } else if (type === 'fixed') {\n heightNum = correctNonNegativeNumber($jsonHeight?.value, heightNum);\n newHeight = pxToEm(heightNum);\n } else if (type === 'match_parent' && (layoutParams.overlapParent || !layoutParams.parentVerticalWrapContent)) {\n heightType = 'parent';\n if (layoutParams.parentContainerOrientation === 'horizontal' && layoutParams.parentContainerWrap) {\n newHeightError = true;\n rootCtx.logError(wrapError(new Error('Cannot place a match_parent items on the cross-axis of wrap'), {\n level: 'error'\n }));\n }\n if (layoutParams.parentLayoutOrientation === 'horizontal') {\n newHeight = `calc(100% - ${pxToEmWithUnits(($jsonMargins?.top || 0) + ($jsonMargins?.bottom || 0))})`;\n } else if (layoutParams.parentContainerOrientation === 'vertical') {\n newFlexGrow = $jsonHeight?.weight || 1;\n if (layoutParams.parentContainerWrap) {\n newHeightFill = true;\n }\n }\n } else {\n heightType = 'content';\n if (\n type === 'wrap_content' && $jsonHeight?.constrained ||\n type === 'match_parent' && layoutParams.parentVerticalWrapContent\n ) {\n newHeightMods['height-constrained'] = true;\n if (layoutParams.parentContainerOrientation === 'vertical') {\n newFlexShrink = 1;\n }\n }\n\n if (type === 'wrap_content') {\n const height = $jsonHeight as WrapContentSize;\n if (height?.min_size && isNonNegativeNumber(height.min_size.value)) {\n newHeightMin = pxToEm(height.min_size.value);\n }\n if (height?.max_size && isNonNegativeNumber(height.max_size.value)) {\n newHeightMax = pxToEm(height.max_size.value);\n }\n }\n\n if (type === 'match_parent') {\n rootCtx.logError(wrapError(new Error('Cannot place child with match_parent size inside wrap_content'), {\n level: 'warn'\n }));\n }\n }\n\n if (heightType === 'parent') {\n newHeightMods['valign-self'] = 'stretch';\n } else {\n const align = $jsonAlignmentVertical;\n if (\n align === 'top' ||\n align === 'center' ||\n align === 'bottom' ||\n align === 'baseline' && layoutParams.parentContainerOrientation === 'horizontal'\n ) {\n newHeightMods['valign-self'] = VERTICAL_ALIGN_TO_GENERAL[align];\n } else {\n newHeightMods['valign-self'] = layoutParams.parentVAlign || 'start';\n }\n }\n\n if (heightType) {\n newHeightMods.height = heightType;\n }\n\n height = newHeight;\n heightMin = newHeightMin;\n heightMax = newHeightMax;\n heightFlexGrow = newFlexGrow;\n heightFlexShrink = newFlexShrink;\n heightMods = assignIfDifferent(newHeightMods, heightMods);\n heightFill = newHeightFill;\n hasHeightError = newHeightError;\n }\n\n $: parentOverlapMod = layoutParams.overlapParent ? true : undefined;\n\n $: parentOverlapAbsoluteMod = layoutParams.overlapParent &&\n (!$jsonWidth || $jsonWidth.type === 'match_parent') &&\n $jsonHeight?.type === 'match_parent';\n\n $: gridArea = layoutParams.gridArea ?\n `${layoutParams.gridArea.y + 1}/${layoutParams.gridArea.x + 1}/span ${layoutParams.gridArea.rowSpan}/span ${layoutParams.gridArea.colSpan}` :\n undefined;\n\n $: jsonAlpha = rootCtx.getDerivedFromVars(json.alpha);\n let alpha = 1;\n let opacity: number | undefined;\n $: {\n alpha = correctAlpha($jsonAlpha, alpha);\n opacity = alpha === 1 ? undefined : alpha;\n }\n\n $: jsonAccessibility = rootCtx.getDerivedFromVars(json.accessibility);\n $: {\n attrs = undefined;\n if ($jsonAccessibility && !customDescription && $jsonAccessibility.description) {\n attrs = {};\n attrs['aria-label'] = $jsonAccessibility.description;\n }\n }\n\n $: jsonBackground = rootCtx.getDerivedFromVars(json.background);\n let background: MaybeMissing<Background[]> | undefined;\n let backgroundStyle: Style;\n let hasSeparateBg: boolean;\n $: {\n background = hasCustomFocus && $jsonFocus?.background ? $jsonFocus.background : $jsonBackground;\n backgroundStyle = {};\n hasSeparateBg = false;\n if (Array.isArray(background)) {\n hasSeparateBg =\n background.some(it => it.type === 'image' || it.type === 'nine_patch_image') ||\n Boolean(backgroundRadius);\n\n if (!hasSeparateBg) {\n const res = getBackground(background);\n backgroundStyle['background-color'] = res.color;\n backgroundStyle['background-image'] = res.image;\n backgroundStyle['background-size'] = res.size;\n backgroundStyle['background-position'] = res.position;\n backgroundStyle['background-repeat'] = 'no-repeat';\n }\n }\n }\n\n const jsonTransitionTriggers = layoutParams.fakeElement ?\n [] :\n (json.transition_triggers || ['state_change', 'visibility_change']);\n const hasStateChangeTrigger = jsonTransitionTriggers.indexOf('state_change') !== -1 && json.id;\n const hasVisibilityChangeTrigger = jsonTransitionTriggers.indexOf('visibility_change') !== -1 && json.id;\n\n let stateChangingInProgress: boolean | undefined;\n let visibilityChangingInProgress: boolean | undefined;\n let transitionChangeInProgress: boolean | undefined;\n $: {\n stateChangingInProgress = undefined;\n if (hasStateChangeTrigger && json.transition_in && rootCtx.isRunning('stateChange')) {\n stateChangingInProgress = true;\n }\n }\n $: {\n transitionChangeInProgress = undefined;\n if (\n hasStateChangeTrigger && json.transition_change &&\n rootCtx.isRunning('stateChange') && stateCtx.hasTransitionChange(json.id)\n ) {\n transitionChangeInProgress = true;\n }\n }\n\n $: jsonAction = rootCtx.getDerivedFromVars(json.action);\n $: jsonActions = rootCtx.getDerivedFromVars(json.actions);\n $: jsonDoubleTapActions = rootCtx.getDerivedFromVars(json.doubletap_actions);\n $: jsonLongTapActions = rootCtx.getDerivedFromVars(json.longtap_actions);\n let actions: MaybeMissing<Action>[] = [];\n let doubleTapActions: MaybeMissing<Action>[] = [];\n let longTapActions: MaybeMissing<Action>[] = [];\n let focusActions: MaybeMissing<Action>[] = [];\n let blurActions: MaybeMissing<Action>[] = [];\n $: {\n let newActions = $jsonActions || $jsonAction && [$jsonAction] || [];\n let newDoubleTapActions = $jsonDoubleTapActions || [];\n let newLongTapActions = $jsonLongTapActions || [];\n let newFocusActions = $jsonFocus?.on_focus || [];\n let newBlurActions = $jsonFocus?.on_blur || [];\n\n if (layoutParams.fakeElement) {\n newActions = [];\n newDoubleTapActions = [];\n newLongTapActions = [];\n newFocusActions = [];\n newBlurActions = [];\n } else {\n if (!Array.isArray(newActions)) {\n newActions = [];\n rootCtx.logError(wrapError(new Error('Actions should be array')));\n }\n if (!Array.isArray(newDoubleTapActions)) {\n newDoubleTapActions = [];\n rootCtx.logError(wrapError(new Error('DoubleTapActions should be array')));\n }\n if (!Array.isArray(newLongTapActions)) {\n newLongTapActions = [];\n rootCtx.logError(wrapError(new Error('LongTapActions should be array')));\n }\n if (!Array.isArray(newFocusActions)) {\n newFocusActions = [];\n rootCtx.logError(wrapError(new Error('FocusActions should be array')));\n }\n if (!Array.isArray(newBlurActions)) {\n newBlurActions = [];\n rootCtx.logError(wrapError(new Error('BlurActions should be array')));\n }\n }\n\n if ((newActions.length || newDoubleTapActions.length || newLongTapActions.length) && customActions) {\n newActions = [];\n newDoubleTapActions = [];\n newLongTapActions = [];\n rootCtx.logError(wrapError(new Error(`Cannot use action on component \"${customActions}\"`)));\n }\n\n // todo check parent actions with customActions\n actions = newActions;\n doubleTapActions = newDoubleTapActions;\n longTapActions = newLongTapActions;\n focusActions = newFocusActions;\n blurActions = newBlurActions;\n }\n\n $: jsonActionAnimation = rootCtx.getDerivedFromVars(json.action_animation);\n let actionAnimationList: MaybeMissing<AnyAnimation>[] = [];\n let actionAnimationTransition = '';\n let animationOpacityStart: number | undefined = undefined;\n let animationOpacityEnd: number | undefined = undefined;\n let animationScaleStart: number | undefined = undefined;\n let animationScaleEnd: number | undefined = undefined;\n $: {\n if ($jsonActionAnimation) {\n actionAnimationList = flattenAnimation($jsonActionAnimation as Animation);\n actionAnimationTransition = actionAnimationList.map(parseActionAnimation).filter(Boolean).join(', ');\n }\n }\n\n function hasNativeAnimation(list: MaybeMissing<AnyAnimation>[]) {\n return list.some(it => it.name === 'native');\n }\n\n function parseActionAnimation(animation: MaybeMissing<AnyAnimation>): string {\n const startValue = correctNumber(animation.start_value, 1);\n const endValue = correctNumber(animation.end_value, 1);\n const delay = correctNonNegativeNumber(animation.start_delay, 0);\n const duration = correctNonNegativeNumber(animation.duration, 300);\n const interpolator = correctCSSInterpolator(animation.interpolator, 'ease_in_out').replace(/_/g, '-');\n\n switch (animation.name) {\n case 'fade':\n animationOpacityStart = startValue;\n animationOpacityEnd = endValue;\n return `opacity ${duration}ms ${interpolator} ${delay}ms`;\n case 'scale':\n animationScaleStart = startValue;\n animationScaleEnd = endValue;\n return `transform ${duration}ms ${interpolator} ${delay}ms`;\n case 'native':\n case 'no_animation':\n return '';\n default:\n rootCtx.logError(wrapError(new Error('Unknown action_animation name'), {\n additional: {\n animation: animation.name\n }\n }));\n return '';\n }\n }\n\n let isVisibilityInited = false;\n let visibility: Visibility = 'visible';\n $: jsonVisibility = rootCtx.getDerivedFromVars(json.visibility);\n $: {\n const prevVisibility = visibility;\n const nextVisibility = correctVisibility($jsonVisibility, visibility);\n\n if (prevVisibility !== nextVisibility) {\n if (isVisibilityInited && (visibility === 'visible' || nextVisibility === 'visible')) {\n onVisibilityChange(nextVisibility);\n } else {\n visibility = nextVisibility;\n }\n }\n\n if (!isVisibilityInited) {\n isVisibilityInited = true;\n }\n }\n\n async function onVisibilityChange(nextVisibility: Visibility) {\n visibility = nextVisibility;\n\n const direction = nextVisibility === 'visible' ? 'in' : 'out';\n const transition = direction === 'in' ? json.transition_in : json.transition_out;\n\n if (\n hasVisibilityChangeTrigger &&\n transition\n ) {\n await tick();\n\n if (direction === 'in') {\n visibilityChangingInProgress = true;\n }\n stateCtx.runVisibilityTransition(\n {\n ...json,\n visibility: 'visible'\n } as DivBaseData,\n templateContext,\n transition,\n currentNode,\n direction\n ).then(() => {\n if (direction === 'in') {\n visibilityChangingInProgress = false;\n }\n }).catch(e => {\n if (direction === 'in') {\n visibilityChangingInProgress = false;\n }\n throw e;\n });\n }\n }\n\n $: mods = {\n ...widthMods,\n ...heightMods,\n 'parent-overlap': parentOverlapMod,\n 'parent-overlap-absolute': parentOverlapAbsoluteMod,\n 'scroll-snap': layoutParams.scrollSnap,\n 'hide-on-transition-in': stateChangingInProgress ||\n visibilityChangingInProgress ||\n transitionChangeInProgress,\n visibility,\n 'has-action-animation': Boolean(actionAnimationTransition),\n 'parent-flex': layoutParams.parentContainerOrientation || undefined,\n 'parent-grid': Boolean(layoutParams.gridArea) || undefined,\n 'has-custom-focus': Boolean(hasCustomFocus && json.focus)\n };\n\n $: jsonTransform = rootCtx.getDerivedFromVars(json.transform);\n let pivotXNum = 0;\n let pivotYNum = 0;\n let transformOrigin: string | undefined;\n let transform: string | undefined;\n $: {\n if ($jsonTransform && $jsonTransform.rotation !== undefined) {\n const pivotX = $jsonTransform.pivot_x || {\n type: 'pivot-percentage',\n value: 50\n };\n pivotXNum = correctNumber(pivotX.value, pivotXNum);\n const pivotXCSSValue = pivotX.type === 'pivot-fixed' ? pxToEm(pivotXNum) : `${pivotXNum}%`;\n const pivotY = $jsonTransform.pivot_y || {\n type: 'pivot-percentage',\n value: 50\n };\n pivotYNum = correctNumber(pivotY.value, pivotYNum);\n const pivotYCSSValue = pivotY.type === 'pivot-fixed' ? pxToEm(pivotYNum) : `${pivotYNum}%`;\n transformOrigin = `${pivotXCSSValue} ${pivotYCSSValue}`;\n transform = `rotate(${$jsonTransform.rotation}deg)`;\n }\n }\n\n // eslint-disable-next-line no-nested-ternary\n $: flexBasis = (widthFill || heightFill) ?\n '100%' :\n ((widthFlexGrow || heightFlexGrow) ? 0 : undefined);\n\n $: stl = {\n ...style,\n ...backgroundStyle,\n ...borderStyle,\n width,\n 'min-width': widthMin,\n 'max-width': widthMax,\n height,\n 'min-height': heightMin,\n // input max-height\n 'max-height': heightMax || style?.['max-height'],\n 'grid-area': gridArea,\n padding,\n margin,\n opacity,\n transition: actionAnimationTransition,\n 'transform-origin': transformOrigin,\n transform,\n 'flex-grow': widthFlexGrow || heightFlexGrow || undefined,\n 'flex-shrink': (widthFlexShrink || heightFlexShrink) ? 1 : undefined,\n 'flex-basis': flexBasis,\n '--divkit-animation-opacity-start': animationOpacityStart,\n '--divkit-animation-opacity-end': animationOpacityEnd,\n '--divkit-animation-scale-start': animationScaleStart,\n '--divkit-animation-scale-end': animationScaleEnd\n };\n\n function useAction(node: HTMLElement) {\n currentNode = node;\n if (hasStateChangeTrigger && json.transition_in) {\n stateCtx.registerChildWithTransitionIn(\n json as DivBaseData,\n templateContext,\n json.transition_in,\n node\n ).then(() => {\n stateChangingInProgress = false;\n }).catch(e => {\n stateChangingInProgress = false;\n throw e;\n });\n }\n if (hasStateChangeTrigger && json.transition_out) {\n stateCtx.registerChildWithTransitionOut(\n json as DivBaseData,\n templateContext,\n json.transition_out,\n node\n );\n }\n if (hasStateChangeTrigger && json.transition_change) {\n stateCtx.registerChildWithTransitionChange(\n json as DivBaseData,\n templateContext,\n json.transition_change,\n node\n ).then(() => {\n transitionChangeInProgress = false;\n }).catch(e => {\n transitionChangeInProgress = false;\n throw e;\n });\n }\n\n const visibilityActions = layoutParams.fakeElement ?\n [] :\n (\n json.visibility_actions ||\n json.visibility_action && [json.visibility_action]\n );\n\n const disappearActions = layoutParams.fakeElement ? [] : json.disappear_actions;\n\n if (\n Array.isArray(visibilityActions) && visibilityActions.length ||\n Array.isArray(disappearActions) && disappearActions.length\n ) {\n visibilityAction(node, {\n visibilityActions,\n disappearActions,\n rootCtx\n });\n }\n\n const id = json.id;\n if (id) {\n stateCtx.registerChild(id);\n }\n\n json.tooltips?.forEach(tooltip => {\n rootCtx.registerTooltip(node, tooltip);\n });\n\n let dev: DevtoolResult | null = null;\n\n if (devtool && !layoutParams.fakeElement) {\n dev = devtool(node, {\n json,\n origJson,\n rootCtx,\n templateContext\n });\n }\n\n if (Array.isArray(json.extensions)) {\n const ctx = rootCtx.getExtensionContext();\n extensions = json.extensions.map(it => {\n const instance = rootCtx.getExtension(it.id, it.params);\n\n if (instance) {\n instance.mountView?.(node, ctx);\n }\n\n return instance;\n }).filter(Truthy);\n }\n\n return {\n destroy() {\n if (id) {\n stateCtx.unregisterChild(id);\n }\n if (extensions) {\n const ctx = rootCtx.getExtensionContext();\n extensions.forEach(it => {\n it.unmountView?.(node, ctx);\n });\n extensions = null;\n }\n if (dev) {\n dev.destroy();\n }\n }\n };\n }\n\n let hasCustomFocus: boolean;\n $: isPointerFocus = rootCtx.isPointerFocus;\n\n function focusHandler() {\n if (!json.focus) {\n return;\n }\n\n if (!$isPointerFocus) {\n hasCustomFocus = true;\n }\n\n rootCtx.execAnyActions(focusActions);\n }\n\n function blurHandler() {\n if (!json.focus) {\n return;\n }\n\n hasCustomFocus = false;\n rootCtx.execAnyActions(blurActions);\n }\n\n onDestroy(() => {\n prevChilds.forEach(id => {\n rootCtx.unregisterParentOf(id);\n });\n prevChilds = [];\n\n json.tooltips?.forEach(tooltip => {\n rootCtx.unregisterTooltip(tooltip);\n });\n });\n</script>\n\n{#if !hasWidthError && !hasHeightError}\n <Actionable\n use={useAction}\n cls=\"{cls} {genClassName('outer', css, mods)}\"\n style={makeStyle(stl)}\n {actions}\n {doubleTapActions}\n {longTapActions}\n {attrs}\n isNativeActionAnimation={!actionAnimationList.length || hasNativeAnimation(actionAnimationList)}\n on:focus={focusHandler}\n on:blur={blurHandler}\n >\n <!-- eslint-disable-next-line max-len -->\n {#if hasSeparateBg}<OuterBackground background={background} radius={backgroundRadius} />{/if}<slot {focusHandler} {blurHandler} {hasCustomFocus} />{#if hasBorder}<span class={css.outer__border} style={makeStyle(borderElemStyle)}></span>{/if}\n </Actionable>\n{/if}\n","import type { CornersRadius } from '../types/border';\nimport { isNonNegativeNumber } from './isNonNegativeNumber';\n\nexport function correctBorderRadiusObject(\n cornersRadius: CornersRadius,\n defaultVal: CornersRadius\n): CornersRadius {\n const list = [\n cornersRadius['top-left'],\n cornersRadius['top-right'],\n cornersRadius['bottom-right'],\n cornersRadius['bottom-left']\n ];\n\n for (let i = 0; i < list.length; ++i) {\n if (list[i] && !isNonNegativeNumber(list[i])) {\n return defaultVal;\n }\n }\n\n return cornersRadius;\n}\n","import type { EdgeInsets } from '../types/edgeInserts';\n\nexport function sumEdgeInsets(a: EdgeInsets | null, b: EdgeInsets | null): EdgeInsets {\n if (!a && !b) {\n return {};\n }\n\n if (!b) {\n return a as EdgeInsets;\n }\n\n if (!a) {\n return b;\n }\n\n const res: EdgeInsets = {};\n\n ([\n 'top',\n 'right',\n 'bottom',\n 'left'\n ] as const).forEach(side => {\n const aVal = a[side];\n if (aVal) {\n res[side] = aVal;\n }\n const bVal = b[side];\n if (bVal) {\n res[side] = (res[side] || 0) + bVal;\n }\n });\n\n return res;\n}\n","import { isNonNegativeNumber } from './isNonNegativeNumber';\n\nexport function correctAlpha(val: number | undefined, defaultVal: number): number {\n if (!isNonNegativeNumber(val) || val === undefined || val > 1) {\n return defaultVal;\n }\n return Number(val);\n}\n","import { Visibility } from '../types/base';\n\nexport function correctVisibility(visibility: string | undefined, defaultVal: Visibility): Visibility {\n if (\n visibility === 'visible' ||\n visibility === 'invisible' ||\n visibility === 'gone'\n ) {\n return visibility;\n }\n\n return defaultVal;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"text-range\":\"divkit-faf07\",\"text-range_singleline\":\"divkit-ccb64\",\"text-range__top-offset\":\"divkit-d9237\",\"text-range_decoration_both\":\"divkit-d7e07\",\"text-range_decoration_underline\":\"divkit-f3dde\",\"text-range_decoration_strike\":\"divkit-d27b7\",\"text-range_decoration_none\":\"divkit-c6b0f\"};","export function correctPositiveNumber(val: number | undefined, defaultVal: number): number {\n const num = Number(val);\n if (isNaN(num) || num <= 0) {\n return defaultVal;\n }\n return num;\n}\n","import type { FontWeight } from '../types/text';\n\nexport function fontWeightToCss(fontWeight?: FontWeight | undefined): number | undefined {\n if (\n fontWeight === 'light' ||\n fontWeight === 'medium' ||\n fontWeight === 'bold' ||\n fontWeight === 'regular'\n ) {\n if (fontWeight === 'medium') {\n return 500;\n } else if (fontWeight === 'bold') {\n return 700;\n } else if (fontWeight === 'light') {\n return 300;\n }\n\n return 400;\n }\n}\n","import type { FontWeight } from '../types/text';\nimport { fontWeightToCss } from './fontWeightToCss';\n\nexport function correctFontWeight(\n fontWeight: FontWeight | undefined,\n defaultVal: number | undefined\n): number | undefined {\n return fontWeightToCss(fontWeight) || defaultVal;\n}\n","<script lang=\"ts\">\n import { getContext } from 'svelte';\n import css from './TextRange.module.css';\n\n import type { TextRange } from '../../types/text';\n import type { Action } from '../../../typings/common';\n import type { MaybeMissing } from '../../expressions/json';\n import Actionable from '../utilities/Actionable.svelte';\n import { pxToEm } from '../../utils/pxToEm';\n import { makeStyle } from '../../utils/makeStyle';\n import { genClassName } from '../../utils/genClassName';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { isPositiveNumber } from '../../utils/isPositiveNumber';\n import { correctFontWeight } from '../../utils/correctFontWeight';\n import { correctColor } from '../../utils/correctColor';\n import { isNonNegativeNumber } from '../../utils/isNonNegativeNumber';\n import { getBackground } from '../../utils/background';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n\n export let text: string;\n export let rootFontSize: number;\n export let textStyles: Partial<TextRange> = {};\n export let singleline = false;\n export let actions: MaybeMissing<Action[]> | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n let decoration = 'none';\n $: {\n let newDecoration = 'none';\n\n if (textStyles.underline || textStyles.strike) {\n if (textStyles.underline === 'single' && textStyles.strike === 'single') {\n newDecoration = 'both';\n } else if (textStyles.underline === 'single') {\n newDecoration = 'underline';\n } else if (textStyles.strike === 'single') {\n newDecoration = 'strike';\n }\n }\n\n decoration = newDecoration;\n }\n\n let fontSize = 12;\n $: {\n fontSize = correctPositiveNumber(textStyles.font_size, fontSize);\n }\n\n let lineHeight = 1.25;\n $: {\n if (isPositiveNumber(textStyles.line_height)) {\n lineHeight = Number(textStyles.line_height) / fontSize;\n }\n }\n\n let letterSpacing = '';\n $: {\n if (isNonNegativeNumber(textStyles.letter_spacing)) {\n letterSpacing = pxToEm(textStyles.letter_spacing);\n }\n }\n\n let fontWeight: number | undefined = undefined;\n let fontFamily = '';\n $: {\n fontWeight = correctFontWeight(textStyles.font_weight, fontWeight);\n if (typeof textStyles.font_family === 'string' && textStyles.font_family) {\n fontFamily = rootCtx.typefaceProvider(textStyles.font_family, {\n fontWeight: fontWeight || 400\n });\n } else {\n fontFamily = '';\n }\n }\n\n let color = '';\n $: {\n color = correctColor(textStyles.text_color, 1, color);\n }\n\n $: topOffset = textStyles.top_offset ? pxToEm(textStyles.top_offset) : '';\n\n $: bg = textStyles.background ? getBackground([textStyles.background]) : null;\n\n let border: {\n color: string;\n width: number;\n } | null = null;\n $: if (textStyles.border?.stroke && correctColor(textStyles.border.stroke.color) !== 'transparent' && isPositiveNumber(textStyles.border.stroke.width)) {\n border = {\n color: textStyles.border.stroke.color,\n width: textStyles.border.stroke.width\n };\n } else {\n border = null;\n }\n\n $: borderRadius = correctPositiveNumber(textStyles.border?.corner_radius, 0);\n\n $: mods = {\n singleline,\n decoration\n };\n\n $: style = {\n 'font-size': pxToEm((fontSize * 10) / rootFontSize),\n 'line-height': lineHeight,\n 'letter-spacing': letterSpacing,\n 'font-weight': fontWeight,\n 'font-family': fontFamily,\n color,\n background: bg?.color || undefined,\n /**\n * box-shadow instead of border because:\n * 1) Doesn't take space as border does\n * 2) There should not be a border-radius on line breaks, but there should be a border\n */\n 'box-shadow': border ? `inset 0 0 0 ${pxToEm(border.width)} ${border.color}` : undefined,\n 'border-radius': borderRadius ? pxToEm(borderRadius) : undefined\n };\n</script>\n\n{#if topOffset}<span class={css['text-range__top-offset']} style:margin-top={topOffset}></span>{/if}<Actionable\n cls={genClassName('text-range', css, mods)}\n {actions}\n style={makeStyle(style)}\n>\n {text}\n</Actionable>\n","import type { AlignmentHorizontal } from '../types/alignment';\n\nexport function correctAlignmentHorizontal(\n orientation: string | undefined,\n defaultVal: AlignmentHorizontal\n): AlignmentHorizontal {\n if (\n orientation === 'left' ||\n orientation === 'center' ||\n orientation === 'right'\n ) {\n return orientation;\n }\n\n return defaultVal;\n}\n","import type { AlignmentVertical } from '../types/alignment';\n\nexport function correctAlignmentVertical(\n orientation: string | undefined,\n defaultVal: AlignmentVertical\n): AlignmentVertical {\n if (\n orientation === 'top' ||\n orientation === 'center' ||\n orientation === 'bottom' ||\n orientation === 'baseline'\n ) {\n return orientation;\n }\n\n return defaultVal;\n}\n","export function correctBooleanInt(val: number | boolean | undefined, defaultVal: boolean): boolean {\n if (val === 1 || val === 0 || val === false || val === true) {\n return Boolean(val);\n }\n return defaultVal;\n}\n","import type { TintMode } from '../types/image';\n\nexport function correctTintMode(tintMode: TintMode | undefined, defaultVal: TintMode): TintMode {\n if (\n tintMode === 'source_in' ||\n tintMode === 'source_atop' ||\n tintMode === 'darken' ||\n tintMode === 'lighten' ||\n tintMode === 'multiply' ||\n tintMode === 'screen'\n ) {\n return tintMode;\n }\n\n return defaultVal;\n}\n","<script lang=\"ts\">\n import { getContext, onDestroy } from 'svelte';\n\n import css from './Text.module.css';\n import rootCss from '../Root.module.css';\n\n import type { DivTextData, TextImage, TextRange, TextStyles } from '../../types/text';\n import type { Style } from '../../types/general';\n import type { LayoutParams } from '../../types/layoutParams';\n import type { Action, DivBase, TemplateContext } from '../../../typings/common';\n import type { AlignmentHorizontal, AlignmentVertical } from '../../types/alignment';\n import type { TintMode } from '../../types/image';\n import type { MaybeMissing } from '../../expressions/json';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import Outer from '../utilities/Outer.svelte';\n import TextRangeView from './TextRange.svelte';\n import { makeStyle } from '../../utils/makeStyle';\n import { pxToEm } from '../../utils/pxToEm';\n import { wrapError } from '../../utils/wrapError';\n import { genClassName } from '../../utils/genClassName';\n import { getBackground } from '../../utils/background';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { isPositiveNumber } from '../../utils/isPositiveNumber';\n import { correctAlignmentHorizontal } from '../../utils/correctAlignmentHorizontal';\n import { correctAlignmentVertical } from '../../utils/correctAlignmentVertical';\n import { correctColor } from '../../utils/correctColor';\n import { correctBooleanInt } from '../../utils/correctBooleanInt';\n import { propToString } from '../../utils/propToString';\n import { correctTintMode } from '../../utils/correctTintMode';\n\n export let json: Partial<DivTextData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n let hasError = false;\n $: jsonText = rootCtx.getDerivedFromVars(json.text);\n let text = '';\n $: {\n text = propToString($jsonText, text);\n if (!text) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Missing \"text\" prop for div \"text\"')));\n } else {\n hasError = false;\n }\n }\n $: jsonRanges = rootCtx.getDerivedFromVars(json.ranges);\n $: jsonImages = rootCtx.getDerivedFromVars(json.images);\n\n $: jsonRootTextStyles = rootCtx.getDerivedFromVars({\n font_size: json.font_size,\n letter_spacing: json.letter_spacing,\n font_weight: json.font_weight,\n font_family: json.font_family,\n text_color: json.text_color,\n underline: json.underline,\n strike: json.strike,\n line_height: json.line_height\n });\n\n $: jsonTextSize = rootCtx.getDerivedFromVars(json.font_size);\n let fontSize = 12;\n $: {\n fontSize = correctPositiveNumber($jsonTextSize, fontSize);\n }\n\n $: jsonLineHeight = rootCtx.getDerivedFromVars(json.line_height);\n let lineHeight = 1.25;\n let customLineHeight = false;\n $: {\n const newLineHeight = $jsonLineHeight;\n if (isPositiveNumber(newLineHeight)) {\n lineHeight = Number(newLineHeight) / fontSize;\n customLineHeight = true;\n } else {\n customLineHeight = false;\n }\n }\n\n $: jsonMaxLines = rootCtx.getDerivedFromVars(json.max_lines);\n $: singleline = $jsonMaxLines === 1;\n let maxHeight = '';\n let lineClamp: string | number = '';\n let multiline = false;\n $: {\n let newMaxHeight = '';\n let newLineClamp: string | number = '';\n let newMultiline = false;\n\n if ($jsonMaxLines && $jsonMaxLines > 1) {\n let lines = Number($jsonMaxLines);\n\n newMaxHeight = lines * lineHeight + 'em';\n\n // multiline overflow enabled only if there is no images and ranges\n if (!$jsonRanges && !$jsonImages) {\n newLineClamp = lines;\n newMultiline = true;\n }\n }\n\n maxHeight = newMaxHeight;\n lineClamp = newLineClamp;\n multiline = newMultiline;\n }\n\n let halign: AlignmentHorizontal = 'left';\n $: jsonHAlign = rootCtx.getDerivedFromVars(json.text_alignment_horizontal);\n $: {\n halign = correctAlignmentHorizontal($jsonHAlign, halign);\n }\n\n let valign: AlignmentVertical = 'top';\n $: jsonVAlign = rootCtx.getDerivedFromVars(json.text_alignment_vertical);\n $: {\n valign = correctAlignmentVertical($jsonVAlign, valign);\n }\n\n $: isAllTextSameColor =\n !$jsonRanges ||\n (\n text && $jsonRanges.length === 1 && $jsonRanges[0] &&\n $jsonRanges[0].start === 0 && typeof $jsonRanges[0].end === 'number' && $jsonRanges[0].end >= text.length\n );\n\n $: jsonTextColor = rootCtx.getDerivedFromVars(json.text_color);\n\n $: isOnlyOneColorDefined = Boolean($jsonTextColor) !==\n Boolean($jsonRanges && $jsonRanges[0] && $jsonRanges[0].text_color);\n\n let rootTextColor = '';\n $: {\n let newRootTextColor = '';\n\n if ($jsonMaxLines && isAllTextSameColor && isOnlyOneColorDefined) {\n // Recolor the ellipsis only if the entire text have the same color\n newRootTextColor = correctColor(\n ($jsonTextColor || ($jsonRanges && $jsonRanges[0] && $jsonRanges[0].text_color)) as string,\n 1,\n rootTextColor\n );\n }\n\n rootTextColor = newRootTextColor;\n }\n\n let focusTextColor = '';\n $: jsonFocusTextColor = rootCtx.getDerivedFromVars(json.focused_text_color);\n $: {\n focusTextColor = correctColor($jsonFocusTextColor, 1, focusTextColor);\n }\n\n $: jsonTruncate = rootCtx.getDerivedFromVars(json.truncate);\n $: truncate = $jsonTruncate === 'none' ? 'none' : '';\n\n $: jsonTextGradient = rootCtx.getDerivedFromVars(json.text_gradient);\n let gradient = '';\n $: {\n let newGradient = '';\n\n if ($jsonTextGradient) {\n const bg = getBackground([$jsonTextGradient]);\n if (bg.image) {\n newGradient = bg.image;\n }\n }\n\n gradient = newGradient;\n }\n\n $: jsonSelectable = rootCtx.getDerivedFromVars(json.selectable);\n let selectable = false;\n $: {\n selectable = correctBooleanInt($jsonSelectable, selectable);\n }\n\n let renderList: ({\n text: string;\n textStyles: TextStyles;\n actions?: MaybeMissing<Action[]>;\n } | {\n image: {\n url: string;\n width: string;\n height: string;\n wrapperStyle: Style;\n svgFilterId: string;\n };\n })[] = [];\n let usedTintColors: [string, TintMode][] = [];\n\n function updateRenderList(\n text: string,\n textRanges: MaybeMissing<TextRange[]> | undefined,\n textImages: MaybeMissing<TextImage[]> | undefined\n ) {\n let newRenderList: typeof renderList = [];\n\n usedTintColors.forEach(([color, mode]) => {\n rootCtx.removeSvgFilter(color, mode);\n });\n usedTintColors = [];\n\n if (!(\n Array.isArray(textRanges) && textRanges.length ||\n Array.isArray(textImages) && textImages.length && text\n )) {\n renderList = [];\n return;\n }\n\n const content = text;\n let ranges = textRanges || [\n {\n start: 0,\n end: content.length\n }\n ];\n let images = textImages || [];\n let prevIndex = 0;\n let activeRanges: TextStyles[] = [];\n let list: ({\n index: number;\n range: MaybeMissing<TextRange> & {\n start: number;\n end: number;\n };\n type: 'rangeStart' | 'rangeEnd';\n isStart?: boolean;\n } | {\n index: number;\n type: 'image';\n arrayIndex: number;\n image: MaybeMissing<TextImage> & {\n start: number;\n url: string;\n };\n })[] = [];\n\n ranges.forEach(range => {\n if (range.start !== undefined && range.end !== undefined) {\n list.push({\n index: range.start,\n range: range as typeof range & {\n start: number;\n end: number;\n },\n type: 'rangeStart',\n isStart: true\n });\n list.push({\n index: range.end,\n range: range as typeof range & {\n start: number;\n end: number;\n },\n type: 'rangeEnd'\n });\n }\n });\n images.forEach((image, index) => {\n if (image.start !== undefined && image.url && image.start <= content.length) {\n list.push({\n index: image.start,\n image: image as typeof image & {\n start: number;\n url: string;\n },\n type: 'image',\n arrayIndex: index\n });\n }\n });\n list.sort((a, b) => {\n if (a.index === b.index) {\n if (a.type !== b.type) {\n if (a.type === 'image') {\n return -1;\n } else if (b.type === 'image') {\n return 1;\n }\n\n return a.type < b.type ? -1 : 1;\n } else if (a.type === 'image' && b.type === 'image') {\n return b.arrayIndex - a.arrayIndex;\n } else if (a.type === 'rangeStart' && b.type === 'rangeStart') {\n return a.range.end - b.range.end;\n } else if (a.type === 'rangeStart') {\n return 1;\n } else if (b.type === 'rangeStart') {\n return -1;\n }\n if (a.type !== 'image' && b.type !== 'image') {\n return a.range.start - b.range.start;\n }\n return 0;\n }\n\n return a.index - b.index;\n });\n list.forEach(item => {\n let range = item.type === 'image' ? null : item.range;\n let index = item.index;\n\n if (index > prevIndex) {\n let textStyles = Object.assign({ ...$jsonRootTextStyles }, ...activeRanges as any[]) as TextStyles;\n newRenderList.push({\n text: content.substring(prevIndex, index),\n textStyles,\n actions: item.type === 'rangeEnd' && item.range?.actions || undefined\n });\n }\n\n if (item.type === 'rangeStart' && range) {\n activeRanges.push(range);\n } else if (item.type === 'rangeEnd') {\n activeRanges = activeRanges.filter(range => range !== item.range);\n } else if (item.type === 'image') {\n let textStyles2 = Object.assign({ ...$jsonRootTextStyles }, ...activeRanges as any[]) as TextStyles;\n let imageWidth = pxToEm(\n (((item.image.width && item.image.width.value) || 20) * 10) / (textStyles2.font_size || 12)\n );\n let imageHeight = pxToEm(\n (((item.image.height && item.image.height.value) || 20) * 10) / (textStyles2.font_size || 12)\n );\n const wrapperStyle: Style = {\n 'font-size': pxToEm(((Number(textStyles2.font_size) || 12) * 10) / fontSize)\n };\n\n let svgFilterId = '';\n const tintColor = item.image.tint_color;\n const tintMode = correctTintMode(item.image.tint_mode, 'source_in');\n if (tintColor) {\n const color = correctColor(item.image.tint_color);\n svgFilterId = rootCtx.addSvgFilter(color, tintMode);\n usedTintColors.push([color, tintMode]);\n }\n\n newRenderList.push({\n image: {\n url: item.image.url,\n width: imageWidth,\n height: imageHeight,\n wrapperStyle,\n svgFilterId\n }\n });\n }\n\n prevIndex = index;\n });\n\n if (prevIndex < content.length) {\n newRenderList.push({\n text: content.substring(prevIndex),\n textStyles: { ...$jsonRootTextStyles } as TextStyles\n });\n }\n\n renderList = newRenderList;\n }\n\n $: updateRenderList(text, $jsonRanges, $jsonImages);\n\n $: mods = {\n singleline,\n multiline,\n halign,\n valign,\n truncate\n };\n\n $: innerMods = {\n gradient: Boolean(gradient)\n };\n\n $: style = {\n 'font-size': pxToEm(fontSize),\n 'line-height': lineHeight,\n 'max-height': maxHeight,\n '-webkit-line-clamp': lineClamp,\n color: rootTextColor,\n 'background-image': gradient,\n '--divkit-text-focus-color': focusTextColor\n };\n\n function onImgError(event: Event): void {\n if (event.target && 'classList' in event.target) {\n (event.target as HTMLElement).classList.add(css.text__image_hidden);\n }\n }\n\n onDestroy(() => {\n usedTintColors.forEach(([color, mode]) => {\n rootCtx.removeSvgFilter(color, mode);\n });\n });\n</script>\n\n{#if !hasError}\n <Outer\n cls=\"{genClassName('text', css, mods)} {selectable ? '' : rootCss.root__unselectable}\"\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n >\n <span class={genClassName('text__inner', css, innerMods)} style={makeStyle(style)}>\n {#if renderList.length}\n {#each renderList as item, index}\n {#if 'text' in item}\n {#if item.text}\n <TextRangeView\n text={item.text}\n rootFontSize={fontSize}\n textStyles={item.textStyles}\n {singleline}\n actions={item.actions}\n />\n {/if}\n {:else if item.image}\n <span style={makeStyle(item.image.wrapperStyle)}><img\n class={css.text__image}\n src={item.image.url}\n loading=\"lazy\"\n decoding=\"async\"\n aria-hidden=\"true\"\n alt=\"\"\n style={makeStyle({\n width: item.image.width,\n height: item.image.height,\n // Normalizes line-height for the containing text line\n 'margin-top': customLineHeight ? `-${item.image.height}` : undefined,\n 'margin-bottom': customLineHeight ? `-${item.image.height}` : undefined,\n filter: item.image.svgFilterId ? `url(#${item.image.svgFilterId})` : undefined\n })}\n on:error={onImgError}\n ></span>\n {/if}\n {/each}\n {:else}\n <TextRangeView\n {text}\n rootFontSize={fontSize}\n textStyles={$jsonRootTextStyles}\n {singleline}\n />\n {/if}\n </span>\n </Outer>\n{/if}\n","import { VariableValue } from '../expressions/variable';\n\nexport function propToString(val: VariableValue | undefined, defaultVal: string): string {\n const valToString = String(val ?? '');\n\n return valToString || defaultVal;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"divkit-d37d6\",\"container_wrap\":\"divkit-c8551\",\"container_orientation_vertical\":\"divkit-ddc33\",\"container_valign_top\":\"divkit-a331a\",\"container_valign_center\":\"divkit-aae61\",\"container_valign_bottom\":\"divkit-c2226\",\"container_valign_space-between\":\"divkit-ce053\",\"container_valign_space-around\":\"divkit-cf29b\",\"container_valign_space-evenly\":\"divkit-b4b04\",\"container_halign_left\":\"divkit-a3091\",\"container_halign_center\":\"divkit-bac9d\",\"container_halign_right\":\"divkit-f4230\",\"container_halign_space-between\":\"divkit-e5c38\",\"container_halign_space-around\":\"divkit-feff2\",\"container_halign_space-evenly\":\"divkit-e5e05\",\"container_orientation_horizontal\":\"divkit-fe458\",\"container_orientation_overlap\":\"divkit-a644d\"};","import type { BooleanInt } from '../../typings/common';\nimport type { DrawableStyle } from './correctDrawableStyles';\nimport type { EdgeInsets } from '../types/edgeInserts';\nimport type { ContainerOrientation } from '../types/container';\nimport { pxToEm } from './pxToEm';\n\nexport interface SeparatorStyle {\n show_at_start?: BooleanInt;\n show_at_end?: BooleanInt;\n show_between?: BooleanInt;\n style: DrawableStyle;\n margins: PreparedMargins;\n}\n\nexport interface PreparedMargins {\n top: number;\n right: number;\n bottom: number;\n left: number;\n}\n\nexport function prepareMargins(margins?: EdgeInsets): PreparedMargins {\n return {\n top: Number(margins?.top) || 0,\n right: Number(margins?.right) || 0,\n bottom: Number(margins?.bottom) || 0,\n left: Number(margins?.left) || 0\n };\n}\n\nfunction setAdditionalPadding(\n insets: EdgeInsets,\n separator: SeparatorStyle | null,\n crossAxis: boolean\n): void {\n const hMargin = (separator?.margins.left || 0) + (separator?.margins.right || 0);\n const vMargin = (separator?.margins.top || 0) + (separator?.margins.bottom || 0);\n\n if (separator?.show_at_start) {\n if (crossAxis) {\n insets.top = separator.style.height + vMargin;\n } else {\n insets.left = separator.style.width + hMargin;\n }\n }\n\n if (separator?.show_at_end) {\n if (crossAxis) {\n insets.bottom = separator.style.height + vMargin;\n } else {\n insets.right = separator.style.width + hMargin;\n }\n }\n}\n\nexport function calcAdditionalPaddings(\n orientation: ContainerOrientation,\n separator: SeparatorStyle | null,\n lineSeparator: SeparatorStyle | null\n) {\n const res: EdgeInsets = {};\n\n setAdditionalPadding(res, separator, orientation === 'vertical');\n setAdditionalPadding(res, lineSeparator, orientation === 'horizontal');\n\n return res;\n}\n\nexport function calcItemsGap(\n orientation: ContainerOrientation,\n separator: SeparatorStyle | null,\n lineSeparator: SeparatorStyle | null\n): string {\n let vals: number[];\n const separatorHMargins = (separator?.margins.left || 0) + (separator?.margins.right || 0);\n const separatorVMargins = (separator?.margins.top || 0) + (separator?.margins.bottom || 0);\n const lineSeparatorHMargins = (lineSeparator?.margins.left || 0) + (lineSeparator?.margins.right || 0);\n const lineSeparatorVMargins = (lineSeparator?.margins.top || 0) + (lineSeparator?.margins.bottom || 0);\n\n if (orientation === 'horizontal') {\n vals = [\n lineSeparator?.show_between ? (lineSeparator.style.height + lineSeparatorVMargins) : 0,\n separator?.show_between ? (separator.style.width + separatorHMargins) : 0\n ];\n } else {\n vals = [\n separator?.show_between ? (separator.style.height + separatorVMargins) : 0,\n lineSeparator?.show_between ? (lineSeparator.style.width + lineSeparatorHMargins) : 0\n ];\n }\n\n return vals.map(pxToEm).join(' ');\n}\n","import type { Drawable } from '../types/drawable';\nimport type { Style } from '../types/general';\nimport type { MaybeMissing } from '../expressions/json';\nimport type { Circle, RoundedRectangle } from '../types/shape';\nimport type { Stroke } from '../types/border';\nimport { correctColor } from './correctColor';\nimport { pxToEm } from './pxToEm';\n\nexport interface DrawableStyle extends Style {\n width: number;\n height: number;\n borderRadius: number;\n background: string;\n boxShadow?: string;\n}\n\ninterface DrawableSize {\n width: number;\n height: number;\n radius: number;\n}\n\nfunction calcRoundedRectangleSize(shape: MaybeMissing<RoundedRectangle>): DrawableSize {\n return {\n width: Number(shape.item_width?.value || 10),\n height: Number(shape.item_height?.value || 10),\n radius: Number(shape.corner_radius?.value ?? 5)\n };\n}\n\nfunction calcCircleSize(shape: MaybeMissing<Circle>): DrawableSize {\n const size = Number(shape.radius?.value || 10) * 2;\n\n return {\n width: size,\n height: size,\n radius: size\n };\n}\n\nfunction calcDrawableStyle(\n size: DrawableSize,\n shape: MaybeMissing<RoundedRectangle | Circle>,\n old?: {\n stroke?: MaybeMissing<Stroke>;\n color?: string;\n }\n): DrawableStyle {\n const stl: Partial<DrawableStyle> = {};\n\n const stroke = shape.stroke || old?.stroke;\n const borderColor = stroke?.color ? correctColor(stroke.color) : '';\n const borderWidth = stroke?.width ? Number(stroke.width ?? 1) : '';\n\n stl.width = size.width;\n stl.height = size.height;\n stl.borderRadius = size.radius;\n\n const bgColor = shape.background_color || old?.color;\n stl.background = correctColor(bgColor);\n\n if (borderColor && borderWidth) {\n stl.boxShadow = `inset 0 0 0 ${pxToEm(borderWidth)} ${borderColor}`;\n }\n\n return stl as DrawableStyle;\n}\n\nexport function correctDrawableStyle<D = DrawableStyle>(\n drawable: MaybeMissing<Drawable> | undefined,\n availShapes: string[],\n defaultValue: D\n): D {\n if (\n !drawable || !drawable.shape ||\n !drawable.shape.type || !availShapes.includes(drawable.shape.type) ||\n drawable.type !== 'shape_drawable'\n ) {\n return defaultValue;\n }\n let size: DrawableSize;\n if (drawable.shape.type === 'rounded_rectangle') {\n size = calcRoundedRectangleSize(drawable.shape);\n } else if (drawable.shape.type === 'circle') {\n size = calcCircleSize(drawable.shape);\n } else {\n return defaultValue;\n }\n\n return calcDrawableStyle(size, drawable.shape, {\n color: drawable.color,\n stroke: drawable.stroke\n }) as unknown as D;\n}\n","let res: boolean;\n\n/**\n * Based on the Chris Smith work in Modernizr\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/css/flexgap.js\n * MIT License\n */\nexport function hasGapSupport(): boolean {\n if (res !== undefined) {\n return res;\n }\n\n const flex = document.createElement('div');\n flex.style.position = 'absolute';\n flex.style.display = 'flex';\n flex.style.flexDirection = 'column';\n flex.style.gap = '1px';\n\n flex.appendChild(document.createElement('div'));\n flex.appendChild(document.createElement('div'));\n\n document.body.appendChild(flex);\n res = flex.scrollHeight === 1;\n document.body.removeChild(flex);\n\n return res;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"container-separator\":\"divkit-a7719\",\"container-separator__item\":\"divkit-c770e\",\"container-separator__shape\":\"divkit-f6e9a\"};","<script lang=\"ts\">\n import { onDestroy, onMount } from 'svelte';\n\n import css from './ContainerSeparator.module.css';\n import outerCss from '../utilities/Outer.module.css';\n\n import type { ContainerOrientation } from '../../types/container';\n import type { SeparatorStyle } from '../../utils/container';\n import type { DrawableStyle } from '../../utils/correctDrawableStyles';\n import { simpleThrottle } from '../../utils/simpleThrottle';\n import { Box, getMarginBox } from '../../utils/getMarginBox';\n\n export let orientation: ContainerOrientation;\n export let separator: SeparatorStyle | null;\n export let lineSeparator: SeparatorStyle | null;\n\n const THROTTLE_TIMEOUT = 10;\n const throttledUpdated = simpleThrottle(updateSeparators, THROTTLE_TIMEOUT);\n\n interface SeparatorItem {\n left: number;\n top: number;\n width: number;\n height: number;\n style: DrawableStyle;\n }\n let separators: SeparatorItem[] = [];\n let node: HTMLElement;\n $: parentElement = node?.parentElement || null;\n let mounted = false;\n let mutationObserver: MutationObserver | null = null;\n let resizeObserver: ResizeObserver | null = null;\n\n $: if (mounted && parentElement || mutationObserver || resizeObserver) {\n if (mutationObserver) {\n mutationObserver.disconnect();\n mutationObserver = null;\n }\n if (resizeObserver) {\n resizeObserver.disconnect();\n resizeObserver = null;\n }\n if (mounted && parentElement) {\n if (typeof MutationObserver !== 'undefined') {\n mutationObserver = new MutationObserver(mutationObserverCallback);\n mutationObserver.observe(parentElement, {\n childList: true,\n attributes: true,\n characterData: true,\n subtree: true\n });\n }\n if (typeof ResizeObserver !== 'undefined') {\n resizeObserver = new ResizeObserver(throttledUpdated);\n resizeObserver.observe(parentElement);\n }\n }\n }\n\n $: if (mounted && parentElement) {\n throttledUpdated();\n }\n\n function mutationObserverCallback(records: MutationRecord[]): void {\n if (records.some(record => {\n const classList = (record.target as HTMLElement)?.classList;\n\n return !classList?.contains(css['container-separator__shape']) &&\n !classList?.contains(css['container-separator']);\n })) {\n throttledUpdated();\n }\n }\n\n // eslint-disable-next-line max-params\n function appendSeparator(\n separators: SeparatorItem[],\n separatorStyle: SeparatorStyle,\n box0: Box,\n box1: Box,\n containingBox: Box,\n crossAxis: boolean\n ) {\n const leftMargin = separatorStyle.margins.left;\n const rightMargin = separatorStyle.margins.right;\n const topMargin = separatorStyle.margins.top;\n const bottomMargin = separatorStyle.margins.bottom;\n\n if (crossAxis) {\n separators.push({\n top: box0.bottom + topMargin,\n left: containingBox.left + leftMargin,\n width: Math.max(0, containingBox.right - containingBox.left - leftMargin - rightMargin),\n height: box1.top - box0.bottom - topMargin - bottomMargin,\n style: separatorStyle.style\n });\n } else {\n separators.push({\n top: containingBox.top + topMargin,\n left: box0.right + leftMargin,\n width: box1.left - box0.right - leftMargin - rightMargin,\n height: Math.max(0, containingBox.bottom - containingBox.top - topMargin - bottomMargin),\n style: separatorStyle.style\n });\n }\n }\n\n function appendSeparators(\n separators: SeparatorItem[],\n separator: SeparatorStyle,\n boxes: Box[],\n crossAxis: boolean\n ): void {\n const containingBox = {\n top: Math.min(...boxes.map(it => it.top)),\n right: Math.max(...boxes.map(it => it.right)),\n bottom: Math.max(...boxes.map(it => it.bottom)),\n left: Math.min(...boxes.map(it => it.left))\n };\n\n if (separator?.show_at_start) {\n appendSeparator(\n separators,\n separator,\n // only right and bottom is used\n {\n top: 0,\n right: boxes[0].left - separator.style.width - separator.margins.left - separator.margins.right,\n bottom: boxes[0].top - separator.style.height - separator.margins.top - separator.margins.bottom,\n left: 0\n },\n boxes[0],\n containingBox,\n crossAxis\n );\n }\n if (separator?.show_between) {\n for (let i = 0; i < boxes.length - 1; ++i) {\n appendSeparator(\n separators,\n separator,\n boxes[i],\n boxes[i + 1],\n containingBox,\n crossAxis\n );\n }\n }\n if (separator?.show_at_end) {\n const lastBox = boxes[boxes.length - 1];\n\n appendSeparator(\n separators,\n separator,\n lastBox,\n // only top and left is used\n {\n top: lastBox.bottom + separator.style.height + separator.margins.top + separator.margins.bottom,\n right: 0,\n bottom: 0,\n left: lastBox.right + separator.style.width + separator.margins.left + separator.margins.right\n },\n containingBox,\n crossAxis\n );\n }\n }\n\n function updateSeparators(): void {\n if (!parentElement) {\n return;\n }\n\n const parentBbox = parentElement.getBoundingClientRect();\n\n separators = [];\n\n let children = [...parentElement.children]\n .filter(it => it !== node && !it.classList.contains(outerCss.outer__border)) as HTMLElement[];\n let rows: HTMLElement[][] = [];\n\n while (children.length) {\n const row: HTMLElement[] = [];\n const firstChild = children.shift() as HTMLElement;\n row.push(firstChild);\n\n let bbox = firstChild.getBoundingClientRect();\n let right = bbox.right;\n let bottom = bbox.bottom;\n\n while (children.length) {\n let first = children[0];\n let bbox = first.getBoundingClientRect();\n\n if (orientation === 'vertical') {\n if (bbox.top < bottom) {\n break;\n }\n } else if (bbox.left < right) {\n break;\n }\n\n right = Math.max(right, bbox.right);\n bottom = Math.max(bottom, bbox.bottom);\n row.push(first);\n children.shift();\n }\n\n rows.push(row);\n }\n\n const rowBoxes: Box[] = [];\n rows.forEach(row => {\n const boxes = row.map(it => getMarginBox(it));\n\n if (separator) {\n appendSeparators(separators, separator as SeparatorStyle, boxes, orientation === 'vertical');\n }\n\n const rowBox = {\n top: Math.min(...boxes.map(it => it.top)),\n right: Math.max(...boxes.map(it => it.right)),\n bottom: Math.max(...boxes.map(it => it.bottom)),\n left: Math.min(...boxes.map(it => it.left))\n };\n rowBoxes.push(rowBox);\n });\n if (lineSeparator) {\n appendSeparators(separators, lineSeparator, rowBoxes, orientation === 'horizontal');\n }\n\n separators.forEach(separator => {\n separator.top -= parentBbox.top;\n separator.left -= parentBbox.left;\n });\n }\n\n onMount(() => {\n mounted = true;\n });\n\n onDestroy(() => {\n mounted = false;\n });\n</script>\n\n<svelte:window on:resize={throttledUpdated} />\n\n<div bind:this={node} class={css['container-separator']}>\n {#each separators as item}\n <div\n class={css['container-separator__item']}\n style:left=\"{item.left}px\"\n style:top=\"{item.top}px\"\n style:width=\"{item.width}px\"\n style:height=\"{item.height}px\"\n >\n <div\n class={css['container-separator__shape']}\n style:width=\"{item.style.width}px\"\n style:height=\"{item.style.height}px\"\n style:border-radius=\"{item.style.borderRadius}px\"\n style:background=\"{item.style.background}\"\n style:box-shadow=\"{item.style.boxShadow}\"\n ></div>\n </div>\n {/each}\n</div>\n","export function simpleThrottle<F extends(...args: any[]) => any>(fn: F, timeout: number): F {\n let runTs = 0;\n let prevRes: unknown;\n let awaits = false;\n\n return function(this: any) {\n const now = Date.now();\n\n if (!runTs || Math.abs(now - runTs) > timeout) {\n runTs = now;\n\n // eslint-disable-next-line prefer-rest-params\n return (prevRes = fn.apply(this, arguments as unknown as any[]));\n }\n\n if (!awaits) {\n awaits = true;\n setTimeout(() => {\n awaits = false;\n // eslint-disable-next-line prefer-rest-params\n prevRes = fn.apply(this, arguments as unknown as any[]);\n }, timeout);\n }\n\n return prevRes;\n } as unknown as F;\n}\n","export interface Box {\n top: number;\n right: number;\n bottom: number;\n left: number;\n}\n\nexport function getMarginBox(elem: HTMLElement): Box {\n const bbox = elem.getBoundingClientRect();\n const computed = getComputedStyle(elem);\n\n return {\n top: bbox.top - parseFloat(computed.marginTop),\n right: bbox.right + parseFloat(computed.marginRight),\n bottom: bbox.bottom + parseFloat(computed.marginBottom),\n left: bbox.left - parseFloat(computed.marginLeft)\n };\n}\n","<script lang=\"ts\">\n import { getContext } from 'svelte';\n\n import css from './Container.module.css';\n\n import type { ContainerOrientation, DivContainerData } from '../../types/container';\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivBaseData } from '../../types/base';\n import type {\n ContentAlignmentHorizontal,\n ContentAlignmentVertical\n } from '../../types/alignment';\n import type { SeparatorStyle } from '../../utils/container';\n import { prepareMargins } from '../../utils/container';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { wrapError } from '../../utils/wrapError';\n import { genClassName } from '../../utils/genClassName';\n import { correctContainerOrientation } from '../../utils/correctContainerOrientation';\n import { assignIfDifferent } from '../../utils/assignIfDifferent';\n import { correctDrawableStyle, DrawableStyle } from '../../utils/correctDrawableStyles';\n import { calcAdditionalPaddings, calcItemsGap } from '../../utils/container';\n import { hasGapSupport } from '../../utils/hasGapSupport';\n import { isPositiveNumber } from '../../utils/isPositiveNumber';\n import ContainerSeparators from './ContainerSeparators.svelte';\n import Unknown from '../utilities/Unknown.svelte';\n import Outer from '../utilities/Outer.svelte';\n import { correctContentAlignmentVertical } from '../../utils/correctContentAlignmentVertical';\n import { correctContentAlignmentHorizontal } from '../../utils/correctContentAlignmentHorizontal';\n\n export let json: Partial<DivContainerData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const HALIGN_MAP = {\n left: 'start',\n center: 'center',\n right: 'end',\n // 'space-*' values doesn't supported for cross-axis in wrap-container\n 'space-between': 'start',\n 'space-around': 'start',\n 'space-evenly': 'start'\n } as const;\n\n const VALIGN_MAP = {\n top: 'start',\n center: 'center',\n bottom: 'end',\n baseline: 'baseline',\n // 'space-*' doesn't supported for cross-axis in wrap-container\n 'space-between': 'start',\n 'space-around': 'start',\n 'space-evenly': 'start'\n } as const;\n\n const AVAIL_SEPARATOR_SHAPES = ['rounded_rectangle', 'circle'];\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n let hasItemsError = false;\n $: jsonItems = json.items;\n $: {\n if (!jsonItems?.length || !Array.isArray(jsonItems)) {\n hasItemsError = true;\n rootCtx.logError(wrapError(new Error('Incorrect or empty \"items\" prop for div \"container\"')));\n } else {\n hasItemsError = false;\n }\n }\n\n function replaceItems(items: DivBaseData[]): void {\n json = {\n ...json,\n items\n };\n }\n\n $: items = (!hasItemsError && jsonItems || []).map(item => {\n let childJson: DivBaseData = item as DivBaseData;\n let childContext: TemplateContext = templateContext;\n\n ({\n templateContext: childContext,\n json: childJson\n } = rootCtx.processTemplate(childJson, childContext));\n\n return {\n json: childJson,\n templateContext: childContext,\n origJson: item\n };\n });\n\n let orientation: ContainerOrientation = 'vertical';\n $: jsonOrientation = rootCtx.getDerivedFromVars(json.orientation);\n $: {\n orientation = correctContainerOrientation($jsonOrientation, orientation);\n }\n\n let contentVAlign: ContentAlignmentVertical = 'top';\n $: jsonContentVAlign = rootCtx.getDerivedFromVars(json.content_alignment_vertical);\n $: {\n contentVAlign = correctContentAlignmentVertical($jsonContentVAlign, contentVAlign);\n }\n\n let contentHAlign: ContentAlignmentHorizontal = 'left';\n $: jsonContentHAlign = rootCtx.getDerivedFromVars(json.content_alignment_horizontal);\n $: {\n contentHAlign = correctContentAlignmentHorizontal($jsonContentHAlign, contentHAlign);\n }\n\n $: jsonLayoutMode = rootCtx.getDerivedFromVars(json.layout_mode);\n $: wrap = $jsonLayoutMode === 'wrap';\n\n $: jsonSeparator = rootCtx.getDerivedFromVars(json.separator);\n let separator: SeparatorStyle | null = null;\n $: {\n if ($jsonSeparator?.style && orientation !== 'overlap' && hasGapSupport()) {\n const style = correctDrawableStyle<DrawableStyle | null>(\n $jsonSeparator.style,\n AVAIL_SEPARATOR_SHAPES,\n separator?.style || null\n );\n\n if (style) {\n separator = {\n show_at_start: Boolean($jsonSeparator.show_at_start ?? false),\n show_at_end: Boolean($jsonSeparator.show_at_end ?? false),\n show_between: Boolean($jsonSeparator.show_between ?? true),\n style,\n margins: prepareMargins($jsonSeparator.margins)\n };\n } else {\n separator = null;\n }\n } else {\n separator = null;\n }\n }\n\n $: jsonLineSeparator = rootCtx.getDerivedFromVars(json.line_separator);\n let lineSeparator: SeparatorStyle | null = null;\n $: {\n if ($jsonLineSeparator?.style && orientation !== 'overlap' && hasGapSupport()) {\n const style = correctDrawableStyle<DrawableStyle | null>(\n $jsonLineSeparator.style,\n AVAIL_SEPARATOR_SHAPES,\n lineSeparator?.style || null\n );\n\n if (style) {\n lineSeparator = {\n show_at_start: Boolean($jsonLineSeparator.show_at_start ?? false),\n show_at_end: Boolean($jsonLineSeparator.show_at_end ?? false),\n show_between: Boolean($jsonLineSeparator.show_between ?? true),\n style,\n margins: prepareMargins($jsonLineSeparator.margins)\n };\n } else {\n lineSeparator = null;\n }\n } else {\n lineSeparator = null;\n }\n }\n\n $: additionalPaddings = (separator || lineSeparator) ?\n calcAdditionalPaddings(orientation, separator, lineSeparator) :\n null;\n\n $: jsonAspect = rootCtx.getDerivedFromVars(json.aspect);\n let aspect: number | undefined = undefined;\n $: {\n const newRatio = $jsonAspect?.ratio;\n if (newRatio && isPositiveNumber(newRatio)) {\n aspect = newRatio;\n } else {\n aspect = undefined;\n }\n }\n\n $: jsonWidth = rootCtx.getDerivedFromVars(json.width);\n $: jsonHeight = rootCtx.getDerivedFromVars(json.height);\n\n let childLayoutParams: LayoutParams = {};\n $: {\n let newChildLayoutParams: LayoutParams = {};\n\n if (layoutParams?.fakeElement) {\n newChildLayoutParams.fakeElement = true;\n }\n if (orientation === 'overlap') {\n newChildLayoutParams.overlapParent = true;\n }\n if (orientation !== 'horizontal') {\n newChildLayoutParams.parentHAlign = wrap ? 'start' : HALIGN_MAP[contentHAlign];\n if (\n !aspect && (\n !$jsonHeight ||\n $jsonHeight.type === 'wrap_content' ||\n $jsonHeight.type === 'match_parent' && layoutParams?.parentVerticalWrapContent\n )\n ) {\n newChildLayoutParams.parentVerticalWrapContent = true;\n }\n }\n if (orientation !== 'vertical') {\n newChildLayoutParams.parentVAlign = wrap ? 'start' : VALIGN_MAP[contentVAlign];\n if (\n $jsonWidth?.type === 'wrap_content' ||\n $jsonWidth?.type === 'match_parent' && layoutParams?.parentHorizontalWrapContent\n ) {\n newChildLayoutParams.parentHorizontalWrapContent = true;\n }\n }\n if (orientation === 'horizontal') {\n newChildLayoutParams.parentContainerOrientation = 'horizontal';\n }\n if (orientation === 'vertical') {\n newChildLayoutParams.parentContainerOrientation = 'vertical';\n }\n if (wrap) {\n newChildLayoutParams.parentContainerWrap = true;\n }\n\n childLayoutParams = assignIfDifferent(newChildLayoutParams, childLayoutParams);\n }\n\n $: mods = {\n orientation,\n valign: contentVAlign,\n halign: contentHAlign,\n wrap\n };\n\n $: style = {\n gap: (separator || lineSeparator) ?\n calcItemsGap(orientation, separator, lineSeparator) :\n undefined,\n 'aspect-ratio': aspect\n };\n</script>\n\n{#if !hasItemsError}\n <Outer\n cls={genClassName('container', css, mods)}\n {style}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n {additionalPaddings}\n heightByAspect={Boolean(aspect)}\n parentOf={jsonItems}\n {replaceItems}\n >\n {#key jsonItems}\n {#each items as item}\n <Unknown\n layoutParams={childLayoutParams}\n div={item.json}\n templateContext={item.templateContext}\n origJson={item.origJson}\n />\n {/each}\n {/key}\n\n {#if separator || lineSeparator}\n <ContainerSeparators\n {separator}\n {lineSeparator}\n {orientation}\n />\n {/if}\n </Outer>\n{/if}\n","import type { ContainerOrientation } from '../types/container';\n\nexport function correctContainerOrientation(\n orientation: string | undefined,\n defaultVal: ContainerOrientation\n): ContainerOrientation {\n if (\n orientation === 'vertical' ||\n orientation === 'horizontal' ||\n orientation === 'overlap'\n ) {\n return orientation;\n }\n\n return defaultVal;\n}\n","import type { ContentAlignmentVertical } from '../types/alignment';\n\nexport function correctContentAlignmentVertical(\n orientation: string | undefined,\n defaultVal: ContentAlignmentVertical\n): ContentAlignmentVertical {\n if (\n orientation === 'top' ||\n orientation === 'center' ||\n orientation === 'bottom' ||\n orientation === 'baseline' ||\n orientation === 'space-between' ||\n orientation === 'space-around' ||\n orientation === 'space-evenly'\n ) {\n return orientation;\n }\n\n return defaultVal;\n}\n","import type { ContentAlignmentHorizontal } from '../types/alignment';\n\nexport function correctContentAlignmentHorizontal(\n orientation: string | undefined,\n defaultVal: ContentAlignmentHorizontal\n): ContentAlignmentHorizontal {\n if (\n orientation === 'left' ||\n orientation === 'center' ||\n orientation === 'right' ||\n orientation === 'space-between' ||\n orientation === 'space-around' ||\n orientation === 'space-evenly'\n ) {\n return orientation;\n }\n\n return defaultVal;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"separator\":\"divkit-a30bb\",\"separator_orientation_horizontal\":\"divkit-f529e\",\"separator_orientation_vertical\":\"divkit-e9e27\",\"separator__inner\":\"divkit-db7d8\"};","import type { Orientation } from '../types/orientation';\n\nexport function correctGeneralOrientation(\n orientation: string | undefined,\n defaultVal: Orientation\n): Orientation {\n if (\n orientation === 'vertical' ||\n orientation === 'horizontal'\n ) {\n return orientation;\n }\n\n return defaultVal;\n}\n","<script lang=\"ts\">\n import { getContext } from 'svelte';\n\n import css from './Separator.module.css';\n\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivSeparatorData } from '../../types/separator';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { Orientation } from '../../types/orientation';\n import Outer from '../utilities/Outer.svelte';\n import { makeStyle } from '../../utils/makeStyle';\n import { pxToEm } from '../../utils/pxToEm';\n import { genClassName } from '../../utils/genClassName';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { correctGeneralOrientation } from '../../utils/correctGeneralOrientation';\n import { correctColor } from '../../utils/correctColor';\n\n export let json: Partial<DivSeparatorData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n $: jsonDelimiterStyle = rootCtx.getDerivedFromVars(json.delimiter_style);\n let orientation: Orientation = 'horizontal';\n $: {\n orientation = correctGeneralOrientation($jsonDelimiterStyle?.orientation, orientation);\n }\n\n // Avoid transparent separator creation\n $: hasContent = !(\n $jsonDelimiterStyle?.color &&\n (\n $jsonDelimiterStyle.color === 'transparent' ||\n (\n $jsonDelimiterStyle.color.length === 9 &&\n $jsonDelimiterStyle.color.indexOf('#00') === 0\n )\n )\n );\n\n // let background = correctColor('#14000000');\n let background = 'rgba(0,0,0,0.08)';\n $: {\n background = correctColor($jsonDelimiterStyle?.color, 1, background);\n }\n\n $: width = orientation === 'horizontal' ? '100%' : pxToEm(1);\n $: height = orientation === 'horizontal' ? pxToEm(1) : '100%';\n\n $: style = {\n background,\n width,\n height\n };\n\n $: mods = {\n orientation\n };\n</script>\n\n<Outer\n cls={genClassName('separator', css, mods)}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n>\n {#if hasContent}\n <span class={css.separator__inner} style={makeStyle(style)}></span>\n {/if}\n</Outer>\n","// extracted by mini-css-extract-plugin\nexport default {\"image\":\"divkit-a448f\",\"image_is-width-content\":\"divkit-fe14a\",\"image_is-height-content\":\"divkit-f4d92\",\"image__image\":\"divkit-ce046\",\"image_error\":\"divkit-f10d9\",\"image__aspect-wrapper\":\"divkit-dc808\",\"image_aspect\":\"divkit-ae784\",\"image_loaded\":\"divkit-cf4e0\",\"divkit-image-appearance\":\"divkit-e555f\",\"image_before-appearance\":\"divkit-ffe8a\"};","import { htmlFilter } from './htmlFilter';\n\nexport function prepareBase64(data: string): string {\n if (data.startsWith('data:')) {\n return htmlFilter(data);\n }\n return `data:image/jpg;base64,${htmlFilter(data)}`;\n}\n","<script lang=\"ts\">\n import { getContext, onDestroy } from 'svelte';\n\n import css from './Image.module.css';\n\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivImageData, TintMode } from '../../types/image';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { AlignmentHorizontal, AlignmentVertical } from '../../types/alignment';\n import Outer from '../utilities/Outer.svelte';\n import { makeStyle } from '../../utils/makeStyle';\n import { genClassName } from '../../utils/genClassName';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { wrapError } from '../../utils/wrapError';\n import { htmlFilter } from '../../utils/htmlFilter';\n import { imageSize } from '../../utils/background';\n import { correctImagePosition } from '../../utils/correctImagePosition';\n import { isPositiveNumber } from '../../utils/isPositiveNumber';\n import { correctColor } from '../../utils/correctColor';\n import { correctCSSInterpolator } from '../../utils/correctCSSInterpolator';\n import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n import { correctTintMode } from '../../utils/correctTintMode';\n import { getCssFilter } from '../../utils/filters';\n import { prepareBase64 } from '../../utils/prepareBase64';\n\n export let json: Partial<DivImageData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const FALLBACK_IMAGE = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n // const DEFAULT_PLACEHOLDER_COLOR = correctColor('#14000000');\n const DEFAULT_PLACEHOLDER_COLOR = 'rgba(0,0,0,0.08)';\n\n const STATE_LOADING = 0;\n const STATE_LOADED = 1;\n const STATE_ERROR = 2;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n $: jsonImageUrl = rootCtx.getDerivedFromVars(json.image_url);\n\n $: jsonGifUrl = rootCtx.getDerivedFromVars(json.gif_url);\n $: imageUrl = $jsonImageUrl || $jsonGifUrl;\n\n let state = STATE_LOADING;\n let placeholderColor = DEFAULT_PLACEHOLDER_COLOR;\n\n function updateImageUrl(_url: string | undefined): void {\n state = STATE_LOADING;\n }\n $: updateImageUrl(imageUrl);\n\n let hasError = false;\n $: {\n if (!imageUrl) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Missing \"image_url\" for \"image\"')));\n } else {\n hasError = false;\n }\n }\n\n $: jsonWidth = rootCtx.getDerivedFromVars(json.width);\n $: isWidthContent = $jsonWidth?.type === 'wrap_content';\n\n $: jsonHeight = rootCtx.getDerivedFromVars(json.height);\n $: isHeightContent = $jsonHeight?.type === 'wrap_content';\n\n $: jsonPreview = rootCtx.getDerivedFromVars(json.preview);\n let backgroundImage = '';\n $: {\n const preview = $jsonPreview;\n\n if ((state === STATE_LOADING || state === STATE_ERROR) && preview) {\n backgroundImage = `url(\"${prepareBase64(preview)}\")`;\n } else {\n backgroundImage = '';\n }\n }\n\n $: jsonPlaceholderColor = rootCtx.getDerivedFromVars(json.placeholder_color);\n function updatePlaceholderColor(state: number, color: string | undefined): void {\n if (state === STATE_LOADING || state === STATE_ERROR) {\n placeholderColor = correctColor(color, 1, placeholderColor);\n } else {\n placeholderColor = '';\n }\n }\n $: updatePlaceholderColor(state, $jsonPlaceholderColor);\n\n $: jsonScale = rootCtx.getDerivedFromVars(json.scale);\n // Exactly \"none\", \"scale-down\" would not match android\n let scale = 'none';\n $: {\n scale = imageSize($jsonScale) || scale;\n }\n\n $: jsonPosition = rootCtx.getDerivedFromVars({\n content_alignment_horizontal: json.content_alignment_horizontal,\n content_alignment_vertical: json.content_alignment_vertical\n });\n let position = '50% 50%';\n function updatePosition(pos: {\n content_alignment_horizontal?: AlignmentHorizontal;\n content_alignment_vertical?: AlignmentVertical;\n }): void {\n position = correctImagePosition(pos, position);\n }\n $: updatePosition($jsonPosition);\n\n $: jsonA11y = rootCtx.getDerivedFromVars(json.accessibility);\n $: alt = $jsonA11y?.description || '';\n\n $: jsonAspect = rootCtx.getDerivedFromVars(json.aspect);\n let aspectPaddingBottom = '0';\n $: {\n const newRatio = $jsonAspect?.ratio;\n if (newRatio && isPositiveNumber(newRatio)) {\n aspectPaddingBottom = (100 / Number(newRatio)).toFixed(2);\n } else {\n aspectPaddingBottom = '0';\n }\n }\n\n $: jsonTintColor = rootCtx.getDerivedFromVars(json.tint_color);\n let tintColor: string | undefined = undefined;\n $: jsonTintMode = rootCtx.getDerivedFromVars(json.tint_mode);\n let tintMode: TintMode = 'source_in';\n let svgFilterId = '';\n $: {\n const val = $jsonTintColor;\n const newTintColor = val ? correctColor(val) : undefined;\n const newTintMode = correctTintMode($jsonTintMode, tintMode);\n if (newTintColor !== tintColor || newTintMode !== tintMode) {\n rootCtx.removeSvgFilter(tintColor, tintMode);\n svgFilterId = newTintColor ? rootCtx.addSvgFilter(newTintColor, newTintMode) : '';\n tintColor = newTintColor;\n tintMode = newTintMode;\n }\n }\n\n $: jsonAppearanceAnimation = rootCtx.getDerivedFromVars(json.appearance_animation);\n let animationInterpolator = '';\n let animationFadeStart = 0;\n let animationDelay = 0;\n let animationDuration = 0;\n\n $: if ($jsonAppearanceAnimation && $jsonAppearanceAnimation.type === 'fade') {\n const animation = $jsonAppearanceAnimation;\n\n animationInterpolator = correctCSSInterpolator(animation.interpolator, 'ease_in_out').replace(/_/g, '-');\n animationDuration = correctNonNegativeNumber(animation.duration, 300);\n animationDelay = correctNonNegativeNumber(animation.start_delay, 0);\n animationFadeStart = correctNonNegativeNumber(animation.alpha, 0);\n }\n\n $: jsonFilters = rootCtx.getDerivedFromVars(json.filters);\n let filter = '';\n let filterClipPath = '';\n $: {\n let newFilter = '';\n let newClipPath = '';\n if (Array.isArray($jsonFilters) && $jsonFilters.length) {\n newFilter = getCssFilter($jsonFilters, rootCtx.logError);\n }\n if (newFilter) {\n newClipPath = 'polygon(0% 0%, 0% 100%, 100% 100%, 100% 0%)';\n }\n filter = newFilter;\n filterClipPath = newClipPath;\n }\n\n $: mods = {\n aspect: aspectPaddingBottom !== '0',\n 'is-width-content': isWidthContent,\n 'is-height-content': isHeightContent,\n loaded: state === STATE_LOADED,\n 'before-appearance': Boolean(animationInterpolator) && state === STATE_LOADING\n };\n\n $: style = {\n // Image preview shows, if loading of original image is failed\n 'background-image': backgroundImage,\n 'background-color': backgroundImage ? undefined : placeholderColor,\n 'background-size': scale,\n 'clip-path': filterClipPath || undefined,\n 'object-fit': scale,\n 'object-position': position,\n filter: [\n state === STATE_LOADED && svgFilterId ? `url(#${svgFilterId})` : '',\n filter\n ].filter(Boolean).join(' '),\n '--divkit-appearance-interpolator': animationInterpolator || undefined,\n '--divkit-appearance-fade-start': animationInterpolator ? animationFadeStart : undefined,\n '--divkit-appearance-delay': animationInterpolator ? `${animationDelay}ms` : undefined,\n '--divkit-appearance-duration': animationInterpolator ? `${animationDuration}ms` : undefined\n };\n\n function onLoad(): void {\n if (state === STATE_LOADING) {\n state = STATE_LOADED;\n }\n }\n\n function onError(): void {\n if (state === STATE_LOADING) {\n state = STATE_ERROR;\n }\n }\n\n onDestroy(() => {\n rootCtx.removeSvgFilter(tintColor, tintMode);\n });\n\n // Recreate image on svg filter change for the Safari\n</script>\n\n{#if !hasError}\n <Outer\n cls={genClassName('image', css, mods)}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n customDescription={true}\n >\n {#key svgFilterId}\n {#if mods.aspect}\n <span class={css['image__aspect-wrapper']} style:padding-bottom=\"{aspectPaddingBottom}%\">\n <img\n class={css.image__image}\n src={state === STATE_ERROR ? FALLBACK_IMAGE : imageUrl}\n loading=\"lazy\"\n decoding=\"async\"\n style={makeStyle(style)}\n {alt}\n aria-hidden={alt ? null : 'true'}\n on:load={onLoad}\n on:error={onError}\n >\n </span>\n {:else}\n <img\n class={css.image__image}\n src={state === STATE_ERROR ? FALLBACK_IMAGE : imageUrl}\n loading=\"lazy\"\n decoding=\"async\"\n style={makeStyle(style)}\n {alt}\n aria-hidden={alt ? null : 'true'}\n on:load={onLoad}\n on:error={onError}\n >\n {/if}\n {/key}\n </Outer>\n{/if}\n","import type { AlignmentHorizontal, AlignmentVertical } from '../types/alignment';\nimport { imagePos } from './background';\n\nexport function correctImagePosition(obj: {\n content_alignment_horizontal?: AlignmentHorizontal;\n content_alignment_vertical?: AlignmentVertical;\n}, defaultVal: string): string {\n const halign = obj.content_alignment_horizontal;\n const valign = obj.content_alignment_vertical;\n\n if (\n halign && halign !== 'left' && halign !== 'center' && halign !== 'right' ||\n valign && valign !== 'top' && valign !== 'center' && valign !== 'bottom'\n ) {\n return defaultVal;\n }\n\n return imagePos(obj);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"grid\":\"divkit-d9080\",\"grid_halign_left\":\"divkit-f63b3\",\"grid_halign_center\":\"divkit-a14a6\",\"grid_halign_right\":\"divkit-b0717\",\"grid_valign_top\":\"divkit-fbca8\",\"grid_valign_center\":\"divkit-d4310\",\"grid_valign_bottom\":\"divkit-e4205\"};","import { pxToEm } from './pxToEm';\n\n/**\n * Filter weights, that would result in < 1fr\n * @param weight\n */\nfunction isSpannedWeight(weight: number): boolean {\n return weight > 0 && weight < 1;\n}\n\nfunction formatWeight(weight: number): string {\n return String(Math.ceil(weight * 1000) / 1000);\n}\n\nexport function gridCalcTemplates(weights: number[], minSizes: number[], length: number): string {\n // If result weight is lesser than 1, multiply all weights so all of them would exceed 1\n if (weights.some(isSpannedWeight)) {\n const multiply = Math.max(...weights.filter(isSpannedWeight).map(weight => 1 / weight));\n weights = weights.map(weight => weight * multiply);\n }\n\n const allTracksHasWeight = weights.every(Boolean);\n let minSize = 0;\n let totalWeight = 0;\n const template: string[] = [];\n\n if (allTracksHasWeight) {\n totalWeight = weights.reduce((acc, item) => {\n return acc + item;\n }, 0);\n\n for (let i = 0; i < length; ++i) {\n if (!minSizes[i]) {\n continue;\n }\n\n const minTrackSize = (minSizes[i] / weights[i]) * totalWeight;\n\n if (minTrackSize > minSize) {\n minSize = minTrackSize;\n }\n }\n }\n\n for (let i = 0; i < length; ++i) {\n if (minSize) {\n template[i] =\n `minmax(${pxToEm((minSize * weights[i]) / totalWeight)},${formatWeight(weights[i])}fr)`;\n } else if (weights[i]) {\n template[i] = `${formatWeight(weights[i])}fr`;\n } else {\n template[i] = 'auto';\n }\n }\n\n return template.join(' ');\n}\n","<script lang=\"ts\">\n import { getContext } from 'svelte';\n import { derived, Readable } from 'svelte/store';\n\n import css from './Grid.module.css';\n\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivGridData } from '../../types/grid';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivBaseData } from '../../types/base';\n import type { Size } from '../../types/sizes';\n import type { AlignmentHorizontal, AlignmentVertical } from '../../types/alignment';\n import type { MaybeMissing } from '../../expressions/json';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import Outer from '../utilities/Outer.svelte';\n import Unknown from '../utilities/Unknown.svelte';\n import { wrapError } from '../../utils/wrapError';\n import { genClassName } from '../../utils/genClassName';\n import { gridCalcTemplates } from '../../utils/gridCalcTemplates';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { correctAlignmentVertical } from '../../utils/correctAlignmentVertical';\n import { correctAlignmentHorizontal } from '../../utils/correctAlignmentHorizontal';\n\n export let json: Partial<DivGridData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n let hasItemsError = false;\n $: jsonItems = json.items;\n $: {\n if (!jsonItems?.length || !Array.isArray(jsonItems)) {\n hasItemsError = true;\n rootCtx.logError(wrapError(new Error('Incorrect or empty \"items\" prop for div \"grid\"')));\n } else {\n hasItemsError = false;\n }\n }\n\n\n let columnCount = 1;\n $: jsonColumnCount = rootCtx.getDerivedFromVars(json.column_count);\n $: {\n columnCount = correctPositiveNumber($jsonColumnCount, columnCount);\n }\n\n $: items = (!hasItemsError && jsonItems || []).map(item => {\n let childJson: DivBaseData = item as DivBaseData;\n let childContext: TemplateContext = templateContext;\n\n ({\n templateContext: childContext,\n json: childJson\n } = rootCtx.processTemplate(childJson, childContext));\n\n return {\n json: childJson,\n templateContext: childContext,\n origJson: item\n };\n });\n\n function replaceItems(items: DivBaseData[]): void {\n json = {\n ...json,\n items\n };\n }\n\n interface ChildInfo {\n rowSpan: number | undefined;\n columnSpan: number | undefined;\n width: MaybeMissing<Size> | undefined;\n height: MaybeMissing<Size> | undefined;\n }\n let childStore: Readable<ChildInfo[]>;\n $: {\n let children: Readable<ChildInfo>[] = [];\n\n items.forEach(item => {\n children.push(\n rootCtx.getDerivedFromVars({\n rowSpan: item.json.row_span,\n columnSpan: item.json.column_span,\n width: item.json.width,\n height: item.json.height\n })\n );\n });\n\n // Create a new array every time so that it is not equal to the previous one\n childStore = derived(children, val => [...val]);\n }\n\n let resultItems: {\n json: DivBaseData;\n templateContext: TemplateContext;\n origJson: DivBaseData;\n layoutParams: LayoutParams;\n }[];\n let columnsWeight: number[] = [];\n let rowsWeight: number[] = [];\n let columnsMinWidth: number[] = [];\n let rowsMinHeight: number[] = [];\n let rowCount = 0;\n let hasLayoutError = false;\n $: {\n const used: Record<string, boolean> = {};\n let x = 0;\n let y = 0;\n columnsWeight = [];\n rowsWeight = [];\n columnsMinWidth = [];\n rowsMinHeight = [];\n hasLayoutError = false;\n\n resultItems = items.map((item, index) => {\n const childInfo = $childStore[index];\n const colSpan = Number(childInfo.columnSpan) || 1;\n const rowSpan = Number(childInfo.rowSpan) || 1;\n\n const gridArea = {\n x,\n y,\n colSpan,\n rowSpan\n };\n\n const widthWeight =\n childInfo.width?.type === 'match_parent' ?\n Number(childInfo.width.weight || 1) / colSpan :\n 0;\n const heightWeight =\n childInfo.height?.type === 'match_parent' ?\n Number(childInfo.height.weight || 1) / rowSpan :\n 0;\n const widthMin =\n colSpan === 1 && childInfo.width?.type === 'fixed' && childInfo.width.value ?\n Number(childInfo.width.value) / colSpan :\n 0;\n const heightMin =\n rowSpan === 1 && childInfo.height?.type === 'fixed' && childInfo.height.value ?\n Number(childInfo.height.value) / rowSpan :\n 0;\n\n for (let i = x; i < x + colSpan; ++i) {\n for (let j = y; j < y + rowSpan; ++j) {\n if (used[i + '_' + j]) {\n hasLayoutError = true;\n continue;\n }\n\n used[i + '_' + j] = true;\n\n if (!columnsWeight[i] || columnsWeight[i] < widthWeight) {\n columnsWeight[i] = widthWeight;\n }\n\n if (!rowsWeight[j] || rowsWeight[j] < heightWeight) {\n rowsWeight[j] = heightWeight;\n }\n\n if (!columnsMinWidth[i] || columnsMinWidth[i] < widthMin) {\n columnsMinWidth[i] = widthMin;\n }\n\n if (!rowsMinHeight[j] || rowsMinHeight[j] < heightMin) {\n rowsMinHeight[j] = heightMin;\n }\n }\n }\n\n do {\n ++x;\n\n if (x >= columnCount) {\n x = 0;\n ++y;\n }\n } while (used[x + '_' + y]);\n\n return {\n ...item,\n layoutParams: {\n gridArea,\n fakeElement: layoutParams?.fakeElement || false\n }\n };\n });\n\n if (x !== 0) {\n hasLayoutError = true;\n }\n\n if (hasLayoutError) {\n rootCtx.logError(wrapError(new Error('Mismatching \"grid\" rows/columns')));\n }\n\n rowCount = y;\n }\n\n let contentVAlign: AlignmentVertical = 'top';\n $: jsonContentVAlign = rootCtx.getDerivedFromVars(json.content_alignment_vertical);\n $: {\n contentVAlign = correctAlignmentVertical($jsonContentVAlign, contentVAlign);\n }\n\n let contentHAlign: AlignmentHorizontal = 'left';\n $: jsonContentHAlign = rootCtx.getDerivedFromVars(json.content_alignment_horizontal);\n $: {\n contentHAlign = correctAlignmentHorizontal($jsonContentHAlign, contentHAlign);\n }\n\n $: mods = {\n valign: contentVAlign,\n halign: contentHAlign\n };\n\n $: style = {\n 'grid-template-columns': gridCalcTemplates(columnsWeight, columnsMinWidth, columnCount),\n 'grid-template-rows': gridCalcTemplates(rowsWeight, rowsMinHeight, rowCount)\n };\n\n $: hasError = hasItemsError || hasLayoutError;\n</script>\n\n{#if !hasError}\n <Outer\n cls={genClassName('grid', css, mods)}\n {json}\n {origJson}\n {templateContext}\n {style}\n {layoutParams}\n parentOf={json.items}\n {replaceItems}\n >\n {#key resultItems}\n {#each resultItems as item}\n <Unknown\n layoutParams={item.layoutParams}\n div={item.json}\n templateContext={item.templateContext}\n origJson={item.origJson}\n />\n {/each}\n {/key}\n </Outer>\n{/if}\n","// extracted by mini-css-extract-plugin\nexport default {\"gallery\":\"divkit-cbb0f\",\"gallery_orientation_horizontal\":\"divkit-c9be7\",\"gallery_orientation_vertical\":\"divkit-a72d5\",\"gallery__scroller\":\"divkit-a4e39\",\"gallery_scroll-snap\":\"divkit-f606e\",\"gallery__items-grid\":\"divkit-eb4a5\",\"gallery__items\":\"divkit-af276\",\"gallery__arrow\":\"divkit-b72d7\",\"gallery__arrow-icon\":\"divkit-d100d\",\"gallery__arrow_left\":\"divkit-a0a5d\",\"gallery__arrow_right\":\"divkit-f0f59\",\"gallery__arrow-icon-path\":\"divkit-b4173\"};","export function joinTemplateSizes(sizes: string[]): string {\n const result: string[] = [];\n let temp = sizes[0];\n let counter = 1;\n\n for (let i = 1; i <= sizes.length; i++) {\n if (sizes[i] !== temp) {\n result.push(counter > 1 ? `repeat(${counter}, ${temp})` : temp);\n temp = sizes[i];\n counter = 1;\n } else {\n counter++;\n }\n }\n\n return result.join(' ');\n}\n","type SimpleFunction = (...args: any[]) => any;\ntype DebouncedFunction<F extends SimpleFunction> = (...args: Parameters<F>) => void;\n\nexport function debounce<F extends SimpleFunction>(fn: F, timeout: number): DebouncedFunction<F> {\n let timer: ReturnType<typeof setTimeout> | null;\n\n return function(this: ThisParameterType<F>, ...args: Parameters<F>) {\n if (timer !== null) {\n clearTimeout(timer);\n }\n\n timer = setTimeout(() => {\n fn.apply(this, args);\n timer = null;\n }, timeout);\n };\n}\n","<script lang=\"ts\">\n import { getContext, onDestroy, onMount } from 'svelte';\n import { derived, Readable } from 'svelte/store';\n\n import css from './Gallery.module.css';\n import rootCss from '../Root.module.css';\n\n import type { Align, LayoutParams } from '../../types/layoutParams';\n import type { DivGalleryData } from '../../types/gallery';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivBaseData } from '../../types/base';\n import type { Overflow, SwitchElements } from '../../types/switch-elements';\n import type { Orientation } from '../../types/orientation';\n import type { MaybeMissing } from '../../expressions/json';\n import type { Size } from '../../types/sizes';\n import type { Style } from '../../types/general';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import Outer from '../utilities/Outer.svelte';\n import Unknown from '../utilities/Unknown.svelte';\n import { wrapError } from '../../utils/wrapError';\n import { genClassName } from '../../utils/genClassName';\n import { pxToEm } from '../../utils/pxToEm';\n import { makeStyle } from '../../utils/makeStyle';\n import { correctGeneralOrientation } from '../../utils/correctGeneralOrientation';\n import { correctAlignment } from '../../utils/correctAlignment';\n import { assignIfDifferent } from '../../utils/assignIfDifferent';\n import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n import { correctEdgeInserts } from '../../utils/correctEdgeInserts';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { joinTemplateSizes } from '../../utils/joinTemplateSizes';\n import { debounce } from '../../utils/debounce';\n\n export let json: Partial<DivGalleryData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n let scroller: HTMLElement;\n let galleryItemsWrappers: HTMLElement[] = [];\n let hasScrollLeft = false;\n let hasScrollRight = false;\n\n let resizeObserver: ResizeObserver | null = null;\n let itemsGridElem: HTMLElement;\n let mounted = false;\n\n const leftClass = rootCtx.getCustomization('galleryLeftClass');\n const rightClass = rootCtx.getCustomization('galleryRightClass');\n\n let hasError = false;\n $: jsonItems = json.items;\n $: {\n if (!jsonItems?.length || !Array.isArray(jsonItems)) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Incorrect or empty \"items\" prop for div \"gallery\"')));\n } else {\n hasError = false;\n }\n }\n\n function replaceItems(items: DivBaseData[]): void {\n json = {\n ...json,\n items\n };\n }\n\n const isDesktop = rootCtx.isDesktop;\n\n interface Item {\n json: DivBaseData;\n templateContext: TemplateContext;\n origJson: DivBaseData;\n }\n\n $: items = (!hasError && jsonItems || []).map(item => {\n let childJson: DivBaseData = item as DivBaseData;\n let childContext: TemplateContext = templateContext;\n\n ({\n templateContext: childContext,\n json: childJson\n } = rootCtx.processTemplate(childJson, childContext));\n\n return {\n json: childJson,\n templateContext: childContext,\n origJson: item\n };\n });\n\n $: shouldCheckArrows = $isDesktop && mounted && !hasError;\n $: if (shouldCheckArrows) {\n if (typeof ResizeObserver !== 'undefined') {\n // Gallery can contain a dynamic content (e.g. loading images with auto-size)\n resizeObserver = new ResizeObserver(() => {\n updateArrowsVisibilityDebounced();\n });\n resizeObserver.observe(itemsGridElem);\n }\n } else if (resizeObserver) {\n resizeObserver.disconnect();\n resizeObserver = null;\n }\n\n $: jsonColumnCount = rootCtx.getDerivedFromVars(json.column_count);\n let columns = 1;\n $: {\n columns = correctPositiveNumber($jsonColumnCount, columns);\n }\n\n function rebuildItemsGrid(items: Item[], columns: number): Item[][] {\n let column = 0;\n let res: Item[][] = [];\n\n for (let i = 0; i < items.length; ++i) {\n if (!res[column]) {\n res[column] = [];\n }\n res[column].push(items[i]);\n if (++column >= columns) {\n column = 0;\n }\n }\n\n return res;\n }\n $: itemsGrid = rebuildItemsGrid(items, columns);\n\n $: jsonOrientation = rootCtx.getDerivedFromVars(json.orientation);\n let orientation: Orientation = 'horizontal';\n $: {\n orientation = correctGeneralOrientation($jsonOrientation, orientation);\n }\n\n let align: Align = 'start';\n $: jsonCrossContentAlignment = rootCtx.getDerivedFromVars(json.cross_content_alignment);\n $: {\n align = correctAlignment($jsonCrossContentAlignment, align);\n }\n\n let gridGap: string | undefined;\n let itemSpacing = 8;\n $: jsonItemSpacing = rootCtx.getDerivedFromVars(json.item_spacing);\n $: {\n itemSpacing = correctNonNegativeNumber($jsonItemSpacing, itemSpacing);\n gridGap = pxToEm(itemSpacing);\n }\n\n let crossGridGap: string | undefined;\n let crossSpacing;\n $: jsonCrossSpacing = rootCtx.getDerivedFromVars(json.cross_spacing);\n $: {\n crossSpacing = correctNonNegativeNumber($jsonCrossSpacing, itemSpacing);\n crossGridGap = pxToEm(crossSpacing);\n }\n\n $: jsonPaddings = rootCtx.getDerivedFromVars(json.paddings);\n let padding = '';\n $: {\n padding = correctEdgeInserts($jsonPaddings, padding);\n }\n\n $: gridTemplate = orientation === 'horizontal' ? 'grid-template-columns' : 'grid-template-rows';\n let templateSizes: string[] = [];\n\n let childStore: Readable<(MaybeMissing<Size> | undefined)[]>;\n $: {\n let children: Readable<MaybeMissing<Size> | undefined>[] = [];\n\n items.forEach(item => {\n const itemSize = orientation === 'horizontal' ? 'width' : 'height';\n children.push(rootCtx.getDerivedFromVars(item.json[itemSize]));\n });\n\n childStore = derived(children, val => val);\n }\n $: {\n templateSizes = [];\n if (columns > 1) {\n // TODO: think about match_parent in this task DIVKIT-307\n templateSizes.push('auto');\n } else {\n $childStore.forEach(childInfo => {\n if ((!childInfo && orientation === 'horizontal') || childInfo?.type === 'match_parent') {\n templateSizes.push('100%');\n } else {\n templateSizes.push('max-content');\n }\n });\n }\n }\n\n let scrollerStyle: Style = {};\n let scrollSnap = false;\n $: jsonScrollMode = rootCtx.getDerivedFromVars(json.scroll_mode);\n let childLayoutParams: LayoutParams = {};\n $: {\n const newScrollerStyle: Style = {};\n let newChildLayoutParams: LayoutParams = {};\n scrollSnap = false;\n\n if (layoutParams?.fakeElement) {\n newChildLayoutParams.fakeElement = true;\n }\n\n if (orientation === 'horizontal') {\n newChildLayoutParams.parentVAlign = align;\n } else {\n newChildLayoutParams.parentHAlign = align;\n }\n\n if ($jsonScrollMode === 'paging') {\n scrollSnap = true;\n newChildLayoutParams.scrollSnap = 'start';\n const scrollPadding = orientation === 'horizontal' ? 'scroll-padding-left' : 'scroll-padding-top';\n newScrollerStyle[scrollPadding] = pxToEm(itemSpacing / 2);\n }\n\n // todo multiple columns\n if (columns === 1) {\n newChildLayoutParams.parentLayoutOrientation = orientation;\n }\n\n scrollerStyle = assignIfDifferent(newScrollerStyle, scrollerStyle);\n childLayoutParams = assignIfDifferent(newChildLayoutParams, childLayoutParams);\n }\n\n $: jsonRestrictParentScroll = rootCtx.getDerivedFromVars(json.restrict_parent_scroll);\n\n $: gridStyle = {\n padding,\n 'grid-gap': crossGridGap\n };\n\n $: columnStyle = {\n 'grid-gap': gridGap,\n [gridTemplate]: joinTemplateSizes(templateSizes)\n };\n\n $: mods = {\n orientation,\n 'scroll-snap': scrollSnap\n };\n\n $: jsonDefaultItem = rootCtx.getDerivedFromVars(json.default_item);\n let defaultItem = 0;\n $: {\n defaultItem = correctNonNegativeNumber($jsonDefaultItem, defaultItem);\n }\n\n function updateArrowsVisibility(): void {\n if (!scroller) {\n return;\n }\n\n const scrollLeft = scroller.scrollLeft;\n const scrollWidth = scroller.scrollWidth;\n const containerWidth = scroller.offsetWidth;\n\n hasScrollLeft = scrollLeft > 2;\n hasScrollRight = scrollLeft + containerWidth < scrollWidth - 2;\n }\n\n const updateArrowsVisibilityDebounced = debounce(updateArrowsVisibility, 50);\n\n function scroll(type: 'left' | 'right'): void {\n scroller.scroll({\n left: scroller.scrollLeft + (scroller.offsetWidth * .75) * (type === 'right' ? 1 : -1),\n behavior: 'smooth'\n });\n }\n\n function getItems(): HTMLElement[] {\n let res: HTMLElement[] = [];\n let maxLen = galleryItemsWrappers[0].children.length;\n\n for (let j = 0; j < maxLen; ++j) {\n for (let i = 0; i < columns; ++i) {\n const elem = galleryItemsWrappers[i].children[j] as HTMLElement;\n if (elem) {\n res.push(elem);\n }\n }\n }\n\n return res;\n }\n\n function scrollToGalleryItem(galleryElements: HTMLElement[], index: number, behavior: ScrollBehavior = 'smooth'): void {\n const isHorizontal = orientation === 'horizontal';\n const elementOffset: keyof HTMLElement = isHorizontal ? 'offsetLeft' : 'offsetTop';\n const scrollDirection: keyof ScrollToOptions = isHorizontal ? 'left' : 'top';\n\n // 0.01 forces Chromium to use scroll-snap (exact correct scroll position will not trigger it)\n // Chromium will save scroll-snapped value and will not save exact one\n // Saved scroll position is used on resnapping (e.g. content change)\n\n const elem = galleryElements[index];\n\n if (elem) {\n scroller.scroll({\n [scrollDirection]: Math.max(0, elem[elementOffset] + .01 - itemSpacing / 2),\n behavior\n });\n }\n }\n\n function checkIsIntersecting(scroller: DOMRect, item: DOMRect): boolean {\n if (orientation === 'horizontal') {\n return item.right > scroller.left && scroller.right > item.left;\n }\n\n return item.bottom > scroller.top && scroller.bottom > item.top;\n }\n\n function checkIsFullyIntersecting(scroller: DOMRect, item: DOMRect): boolean {\n if (orientation === 'horizontal') {\n return item.left >= scroller.left && item.right <= scroller.right;\n }\n\n return item.top >= scroller.top && item.bottom <= scroller.bottom;\n }\n\n function calculateCurrentElementIndex(action: 'prev' | 'next'): number {\n const galleryElements = getItems();\n const scrollerRect = scroller.getBoundingClientRect();\n\n // Try to find the most left fully visible element\n const firstFullyVisibleElement = galleryElements.findIndex(el =>\n checkIsFullyIntersecting(scrollerRect, el.getBoundingClientRect())\n );\n\n if (firstFullyVisibleElement !== -1) {\n return firstFullyVisibleElement;\n }\n\n // If there is no fully visible elements, it means that:\n // - only one element is partly visible and its width bigger than gallery width\n // - two elements are partly visible\n const visibleElementsMap = galleryElements.map(el =>\n checkIsIntersecting(scrollerRect, el.getBoundingClientRect())\n );\n const firstVisibleElement = visibleElementsMap.findIndex(Boolean);\n\n if (firstVisibleElement !== -1) {\n // If two elements are partly visible, we should scroll to current element on \"set_item_previous\" action\n const isPreviousEqualCurrent = action === 'prev' && visibleElementsMap.filter(Boolean).length === 2;\n return isPreviousEqualCurrent ? firstVisibleElement + 1 : firstVisibleElement;\n }\n\n return action === 'prev' ? 1 : galleryElements.length - 2;\n }\n\n if (json.id && !hasError && !layoutParams?.fakeElement) {\n rootCtx.registerInstance<SwitchElements>(json.id, {\n setCurrentItem(item: number) {\n const galleryElements = getItems();\n if (item < 0 || item > galleryElements.length - 1) {\n throw new Error('Item is out of range in \"set-current-item\" action');\n }\n\n scrollToGalleryItem(galleryElements, item);\n },\n setPreviousItem(overflow: Overflow) {\n const currentElementIndex = calculateCurrentElementIndex('prev');\n const galleryElements = getItems();\n let previousItem = currentElementIndex - 1;\n\n if (previousItem < 0) {\n previousItem = overflow === 'ring' ? galleryElements.length - 1 : currentElementIndex;\n }\n\n scrollToGalleryItem(galleryElements, previousItem);\n },\n setNextItem(overflow: Overflow) {\n // Go to scroller start, if we reached right/bottom edge of scroller\n const isEdgeScroll = orientation === 'horizontal' ? (\n scroller.scrollLeft + scroller.offsetWidth === scroller.scrollWidth\n ) : (\n scroller.scrollTop + scroller.offsetHeight === scroller.scrollHeight\n );\n const galleryElements = getItems();\n if (isEdgeScroll && overflow === 'ring') {\n scrollToGalleryItem(galleryElements, 0);\n return;\n }\n\n const currentElementIndex = calculateCurrentElementIndex('next');\n let nextItem = currentElementIndex + 1;\n\n if (nextItem > galleryElements.length - 1) {\n nextItem = overflow === 'ring' ? 0 : currentElementIndex;\n }\n\n scrollToGalleryItem(galleryElements, nextItem);\n }\n });\n }\n\n onMount(() => {\n mounted = true;\n\n if (!hasError) {\n updateArrowsVisibility();\n\n if (defaultItem) {\n const galleryElements = getItems();\n scrollToGalleryItem(galleryElements, defaultItem, 'auto');\n }\n }\n });\n\n onDestroy(() => {\n mounted = false;\n\n if (json.id && !layoutParams?.fakeElement) {\n rootCtx.unregisterInstance(json.id);\n }\n });\n</script>\n\n<svelte:window on:resize={shouldCheckArrows ? updateArrowsVisibilityDebounced : null} />\n\n{#if !hasError}\n <Outer\n cls={genClassName('gallery', css, mods)}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n customPaddings={true}\n customActions={'gallery'}\n parentOf={jsonItems}\n {replaceItems}\n >\n <div\n class=\"{css.gallery__scroller} {$jsonRestrictParentScroll ? rootCss['root_restrict-scroll'] : ''}\"\n bind:this={scroller}\n on:scroll={shouldCheckArrows ? updateArrowsVisibility : null}\n style={makeStyle(scrollerStyle)}\n >\n <div\n bind:this={itemsGridElem}\n class={css['gallery__items-grid']}\n style={makeStyle(gridStyle)}\n >\n {#key itemsGrid}\n {#each itemsGrid as itemsRow, rowIndex}\n <div\n class={css.gallery__items}\n style={makeStyle(columnStyle)}\n bind:this={galleryItemsWrappers[rowIndex]}\n >\n {#each itemsRow as item}\n <Unknown\n layoutParams={childLayoutParams}\n div={item.json}\n templateContext={item.templateContext}\n origJson={item.origJson}\n />\n {/each}\n </div>\n {/each}\n {/key}\n </div>\n </div>\n {#if orientation === 'horizontal'}\n {#if hasScrollLeft && shouldCheckArrows}\n <!-- svelte-ignore a11y-click-events-have-key-events -->\n <!-- svelte-ignore a11y-no-static-element-interactions -->\n <div class=\"{leftClass || `${css.gallery__arrow} ${css.gallery__arrow_left}`}\" on:click={() => scroll('left')}>\n {#if !leftClass}\n <svg class={css['gallery__arrow-icon']} xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\">\n <path class={css['gallery__arrow-icon-path']} d=\"m10 16 8.3 8 1.03-1-4-6-.7-1 .7-1 4-6-1.03-1z\"/>\n </svg>\n {/if}\n </div>\n {/if}\n {#if hasScrollRight && shouldCheckArrows}\n <!-- svelte-ignore a11y-click-events-have-key-events -->\n <!-- svelte-ignore a11y-no-static-element-interactions -->\n <div class=\"{rightClass || `${css.gallery__arrow} ${css.gallery__arrow_right}`}\" on:click={() => scroll('right')}>\n {#if !rightClass}\n <svg class={css['gallery__arrow-icon']} xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\">\n <path class={css['gallery__arrow-icon-path']} d=\"M22 16l-8.3 8-1.03-1 4-6 .7-1-.7-1-4-6 1.03-1 8.3 8z\"/>\n </svg>\n {/if}\n </div>\n {/if}\n {/if}\n </Outer>\n{/if}\n","import type { Align } from '../types/layoutParams';\n\nexport function correctAlignment(\n orientation: string | undefined,\n defaultVal: Align\n): Align {\n if (\n orientation === 'start' ||\n orientation === 'center' ||\n orientation === 'end'\n ) {\n return orientation;\n }\n\n return defaultVal;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"tabs\":\"divkit-e0df5\",\"tabs__list\":\"divkit-ea19b\",\"tabs__item\":\"divkit-c25c7\",\"tabs__item_selected\":\"divkit-d560a\",\"tabs__item_actionable\":\"divkit-dfda0\",\"tabs__panels\":\"divkit-f5dc0\",\"tabs__swiper\":\"divkit-eb42c\",\"tabs__swiper_animated\":\"divkit-b9f18\",\"tabs__swiper_inited\":\"divkit-fa574\",\"tabs__panel\":\"divkit-cc9fb\",\"tabs__panel_visible\":\"divkit-e7306\",\"tabs__separator\":\"divkit-b85bf\"};","<script lang=\"ts\">\n import { getContext, onDestroy, tick } from 'svelte';\n import { writable } from 'svelte/store';\n\n import css from './Tabs.module.css';\n import rootCss from '../Root.module.css';\n\n import type { Mods } from '../../types/general';\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivTabsData } from '../../types/tabs';\n import type { Action, DivBase, TemplateContext } from '../../../typings/common';\n import type { EdgeInsets } from '../../types/edgeInserts';\n import type { SwitchElements, Overflow } from '../../types/switch-elements';\n import type { TabItem } from '../../types/tabs';\n import type { MaybeMissing } from '../../expressions/json';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import Outer from '../utilities/Outer.svelte';\n import Unknown from '../utilities/Unknown.svelte';\n import Actionable from '../utilities/Actionable.svelte';\n import { wrapError } from '../../utils/wrapError';\n import { genClassName } from '../../utils/genClassName';\n import { makeStyle } from '../../utils/makeStyle';\n import { ARROW_LEFT, ARROW_RIGHT, END, HOME } from '../../utils/keyboard/codes';\n import { pxToEm, pxToEmWithUnits } from '../../utils/pxToEm';\n import { isPositiveNumber } from '../../utils/isPositiveNumber';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { correctEdgeInserts } from '../../utils/correctEdgeInserts';\n import { correctBorderRadius } from '../../utils/correctBorderRadius';\n import { correctColor } from '../../utils/correctColor';\n import { correctFontWeight } from '../../utils/correctFontWeight';\n import { isNonNegativeNumber } from '../../utils/isNonNegativeNumber';\n import { assignIfDifferent } from '../../utils/assignIfDifferent';\n import { Coords, getTouchCoords } from '../../utils/getTouchCoords';\n import { correctEdgeInsertsObject } from '../../utils/correctEdgeInsertsObject';\n import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n import { edgeInsertsToCss } from '../../utils/edgeInsertsToCss';\n\n export let json: Partial<DivTabsData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n const instId = rootCtx.genId('tabs');\n\n let hasError = false;\n $: items = json.items || [];\n interface ChildInfo {\n index: number;\n title: MaybeMissing<string> | undefined;\n title_click_action?: MaybeMissing<Action> | undefined;\n }\n let childStore = writable<ChildInfo[]>([]);\n $: if (Array.isArray(items) && items.length) {\n let children: ChildInfo[] = [];\n\n items.forEach((item, index) => {\n const part = rootCtx.getJsonWithVars({\n index,\n title: item.title,\n title_click_action: item.title_click_action,\n });\n if (part.title && typeof part.title === 'string') {\n children.push(part as ChildInfo);\n } else {\n rootCtx.logError(wrapError(new Error('Incorrect title for the tab'), {\n additional: {\n index\n }\n }));\n }\n });\n\n childStore.set(children);\n } else {\n childStore.set([]);\n }\n\n $: {\n if (!$childStore?.length) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Incorrect or empty \"items\" prop for div \"tabs\"')));\n } else {\n hasError = false;\n }\n }\n\n $: jsonWidth = rootCtx.getDerivedFromVars(json.width);\n $: jsonHeight = rootCtx.getDerivedFromVars(json.height);\n let childLayoutParams: LayoutParams = {};\n $: {\n let newLayoutParams: LayoutParams = {};\n\n if (layoutParams?.fakeElement) {\n newLayoutParams.fakeElement = true;\n }\n if ($jsonWidth?.type === 'wrap_content') {\n newLayoutParams.parentHorizontalWrapContent = true;\n }\n if (!$jsonHeight || $jsonHeight.type === 'wrap_content') {\n newLayoutParams.parentVerticalWrapContent = true;\n }\n\n childLayoutParams = assignIfDifferent(newLayoutParams, childLayoutParams);\n }\n\n let tabsElem: HTMLElement;\n let panelsWrapper: HTMLElement;\n let swiperElem: HTMLElement;\n let mods: Mods = {};\n const jsonSelectedTab = rootCtx.getJsonWithVars(json.selected_tab);\n let selected = jsonSelectedTab && Number(jsonSelectedTab) || 0;\n\n $: if (!hasError && (selected < 0 || selected >= items.length)) {\n rootCtx.logError(wrapError(new Error('Incorrect \"selected_tab\" prop for div \"tabs\"'), {\n additional: {\n selected: json.selected_tab,\n length: items.length\n }\n }));\n selected = selected < 0 ? 0 : items.length - 1;\n }\n\n $: if (!hasError && !$childStore.some(it => selected === it.index)) {\n rootCtx.logError(wrapError(new Error('Incorrect \"selected_tab\" prop for div \"tabs\"'), {\n additional: {\n selected: json.selected_tab\n }\n }));\n selected = $childStore[0]?.index || 0;\n }\n\n $: jsonTabStyle = rootCtx.getDerivedFromVars(json.tab_title_style);\n $: tabStyle = $jsonTabStyle || {};\n\n let tabFontSize = 12;\n $: {\n tabFontSize = correctPositiveNumber(tabStyle.font_size, tabFontSize);\n }\n\n let tabPaddings = '';\n\n $: {\n if (tabStyle.font_size || tabStyle.paddings) {\n const paddings: EdgeInsets = tabStyle.paddings || {\n top: 6,\n right: 8,\n bottom: 6,\n left: 8\n };\n\n const adjustedPaddings: EdgeInsets = {\n top: (Number(paddings.top) || 0) / tabFontSize * 10,\n right: (Number(paddings.right) || 0) / tabFontSize * 10,\n bottom: (Number(paddings.bottom) || 0) / tabFontSize * 10,\n left: (Number(paddings.left) || 0) / tabFontSize * 10\n };\n\n tabPaddings = correctEdgeInserts(adjustedPaddings, tabPaddings);\n }\n }\n\n let tabLineHeight = '';\n $: {\n const lineHeight = tabStyle.line_height;\n if (lineHeight !== undefined && isPositiveNumber(lineHeight)) {\n tabLineHeight = pxToEm(lineHeight / tabFontSize * 10);\n }\n }\n\n let tabLetterSpacing = '';\n $: {\n const letterSpacing = tabStyle.letter_spacing;\n if (letterSpacing !== undefined && isNonNegativeNumber(letterSpacing)) {\n tabLetterSpacing = pxToEm(letterSpacing / tabFontSize * 10);\n }\n }\n\n let tabBorderRadius = '';\n $: {\n if (tabStyle.corner_radius || tabStyle.corners_radius || tabStyle.font_size) {\n const defaultRadius = tabStyle.corner_radius ?? 1000;\n\n if (tabStyle.corners_radius) {\n tabBorderRadius = correctBorderRadius(\n tabStyle.corners_radius,\n defaultRadius,\n tabFontSize,\n tabBorderRadius\n );\n } else if (isNonNegativeNumber(defaultRadius)) {\n tabBorderRadius = pxToEm(defaultRadius / tabFontSize * 10);\n }\n }\n }\n\n let tabActiveFontWeight: number | undefined = undefined;\n let tabActiveFontFamily = '';\n $: {\n tabActiveFontWeight = correctFontWeight(\n tabStyle.active_font_weight || tabStyle.font_weight,\n tabActiveFontWeight\n );\n if (tabStyle.font_family && typeof tabStyle.font_family === 'string') {\n tabActiveFontFamily = rootCtx.typefaceProvider(tabStyle.font_family, {\n fontWeight: tabActiveFontWeight || 400\n });\n } else {\n tabActiveFontFamily = '';\n }\n }\n\n let tabInactiveFontWeight: number | undefined = undefined;\n let tabInactiveFontFamily = '';\n $: {\n tabInactiveFontWeight = correctFontWeight(\n tabStyle.inactive_font_weight || tabStyle.font_weight,\n tabInactiveFontWeight\n );\n if (tabStyle.font_family && typeof tabStyle.font_family === 'string') {\n tabInactiveFontFamily = rootCtx.typefaceProvider(tabStyle.font_family, {\n fontWeight: tabInactiveFontWeight || 400\n });\n } else {\n tabInactiveFontFamily = '';\n }\n }\n\n let tabActiveTextColor = '';\n $: {\n tabActiveTextColor = correctColor(tabStyle.active_text_color, 1, tabActiveTextColor);\n }\n\n let tabInactiveTextColor = '';\n $: {\n tabInactiveTextColor = correctColor(tabStyle.inactive_text_color, 1, tabInactiveTextColor);\n }\n\n let tabActiveBackground = '';\n $: {\n tabActiveBackground = correctColor(tabStyle.active_background_color, 1, tabActiveBackground);\n }\n\n let tabInactiveBackground = '';\n $: {\n tabInactiveBackground = correctColor(tabStyle.inactive_background_color, 1, tabInactiveBackground);\n }\n\n let tabItemSpacing = 0;\n $: {\n tabItemSpacing = correctNonNegativeNumber(tabStyle.item_spacing, tabItemSpacing);\n }\n\n $: jsonSeparator = rootCtx.getDerivedFromVars(json.has_separator);\n $: jsonSeparatorColor = rootCtx.getDerivedFromVars(json.separator_color);\n $: jsonSeparatorPaddings = rootCtx.getDerivedFromVars(json.separator_paddings);\n let separatorBackground = '';\n let separatorMargins = '';\n $: {\n if ($jsonSeparator) {\n if ($jsonSeparatorColor) {\n separatorBackground = correctColor($jsonSeparatorColor, 1, separatorBackground);\n }\n if ($jsonSeparatorPaddings) {\n separatorMargins = correctEdgeInserts($jsonSeparatorPaddings, separatorMargins);\n }\n }\n }\n $: separatorStyle = {\n background: separatorBackground,\n margin: separatorMargins\n };\n\n $: jsonSwipeEnabled = rootCtx.getDerivedFromVars(json.switch_tabs_by_content_swipe_enabled);\n $: isSwipeEnabled = typeof $jsonSwipeEnabled === 'undefined' ?\n true :\n Boolean($jsonSwipeEnabled);\n\n $: jsonRestrictParentScroll = rootCtx.getDerivedFromVars(json.restrict_parent_scroll);\n\n $: jsonTitlePaddings = rootCtx.getDerivedFromVars(json.title_paddings);\n let titlePadding: EdgeInsets | null = null;\n $: {\n titlePadding = correctEdgeInsertsObject($jsonTitlePaddings ? $jsonTitlePaddings : undefined, titlePadding);\n }\n\n let isSwipeInitialized = false;\n let isAnimated = false;\n let previousSelected = selected;\n let showedPanels: boolean[] = [];\n let visiblePanels: boolean[] = [];\n function updateItems(_items: TabItem[]): void {\n if (hasError) {\n return;\n }\n\n showedPanels = items.map((_, i) => i === selected);\n visiblePanels = items.map((_, i) => i === selected);\n }\n $: updateItems(items);\n\n async function setSelected(val: number, focus = false): Promise<void> {\n previousSelected = selected;\n selected = val;\n initTabsSwipe();\n changeTab();\n\n if (focus) {\n await tick();\n\n const selectedTab = tabsElem.querySelector(`.${css.tabs__item_selected}`) as HTMLElement | null;\n if (selectedTab) {\n selectedTab.focus();\n }\n }\n }\n\n function moveSelected(shift: number, focus = false): void {\n const len = $childStore?.length;\n if (!len) {\n return;\n }\n const indices = $childStore.map(it => it.index);\n const selectedIndex = indices.indexOf(selected);\n\n let newSelectedIndex = selectedIndex + shift;\n\n if (newSelectedIndex >= len) {\n newSelectedIndex = 0;\n } else if (newSelectedIndex < 0) {\n newSelectedIndex = len - 1;\n }\n const newSelected = indices[newSelectedIndex];\n\n setSelected(newSelected, focus);\n }\n\n function selectItem(_event: Event, index: number): boolean {\n if (selected !== index) {\n setSelected(index);\n\n return false;\n }\n\n return true;\n }\n\n function changeTab(): void {\n isAnimated = true;\n updateTransform(-selected * 100);\n updateShowedPanels();\n updateWrapperHeight();\n hideNonVisiblePanels();\n currentTransform = -selected * panelsWrapper.clientWidth;\n }\n\n async function updateTransform(transform: number): Promise<void> {\n await tick();\n swiperElem.style.transform = `translate3d(${transform}%,0,0)`;\n }\n\n function updateShowedPanels(around = false): void {\n const start = around ?\n Math.max(0, selected - 1) :\n Math.min(selected, previousSelected);\n const end = around ?\n Math.min(items.length - 1, selected + 1) :\n Math.max(selected, previousSelected);\n\n showedPanels = showedPanels.map((isShowed, index) => isShowed || index >= start && index <= end);\n visiblePanels = visiblePanels.map((_, index) => index >= start && index <= end);\n }\n\n async function updateWrapperHeight(): Promise<void> {\n await tick();\n const activePanel = document.getElementById(`${instId}-panel-${selected}`);\n\n if (activePanel) {\n panelsWrapper.style.height = pxToEm(activePanel.offsetHeight);\n }\n }\n\n let hidePanelsTimeout: number | null = null;\n\n function hideNonVisiblePanels(): void {\n if (hidePanelsTimeout) {\n clearTimeout(hidePanelsTimeout);\n }\n hidePanelsTimeout = window.setTimeout(() => {\n visiblePanels = items.map((_, i) => i === selected);\n }, 400);\n }\n\n function onTabKeydown(event: KeyboardEvent): void {\n if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) {\n return;\n }\n if (!items) {\n return;\n }\n\n if (event.which === ARROW_LEFT) {\n moveSelected(-1, true);\n } else if (event.which === ARROW_RIGHT) {\n moveSelected(1, true);\n } else if (event.which === HOME) {\n setSelected(0, true);\n } else if (event.which === END) {\n setSelected(items.length - 1, true);\n } else {\n return;\n }\n\n event.preventDefault();\n }\n\n // todo desktop arrows\n\n function initTabsSwipe(): void {\n if (isSwipeInitialized) {\n return;\n }\n\n isSwipeInitialized = true;\n panelsWrapper.style.height = pxToEm(panelsWrapper.clientHeight);\n swiperElem.style.transform = `translate3d(${-previousSelected * 100}%,0,0)`;\n }\n\n let startCoords: Coords | null = null;\n let moveCoords: Coords | null = null;\n let swipeStartTime: number;\n let isSwipeStarted = false;\n let isSwipeCanceled = false;\n let startTransform: number;\n let currentTransform: number;\n\n function onTouchStart(event: TouchEvent): void {\n const target = event.target as HTMLElement | null;\n const restrictClosest = target?.closest?.(`.${rootCss['root_restrict-scroll']}`);\n\n if (\n items.length < 2 ||\n event.touches.length > 1 ||\n (restrictClosest && restrictClosest !== panelsWrapper)\n ) {\n return;\n }\n\n isSwipeStarted = false;\n isSwipeCanceled = false;\n startCoords = getTouchCoords(event);\n moveCoords = null;\n swipeStartTime = Date.now();\n startTransform = currentTransform || -selected * panelsWrapper.clientWidth;\n isAnimated = false;\n\n if (hidePanelsTimeout) {\n clearTimeout(hidePanelsTimeout);\n }\n }\n\n function onTouchMove(event: TouchEvent): void {\n const coords = getTouchCoords(event);\n if (\n !startCoords ||\n moveCoords && moveCoords.x === coords.x && moveCoords.y === coords.y\n ) {\n return;\n }\n\n moveCoords = coords;\n const panelsWrapperWidth = panelsWrapper.clientWidth;\n if (isSwipeStarted) {\n currentTransform = coords.x - startCoords.x + startTransform;\n\n // Slowing down scroll on edges\n const scrollWidth = panelsWrapperWidth * items.length;\n if (currentTransform > 0) {\n currentTransform = currentTransform * panelsWrapperWidth / (currentTransform + panelsWrapperWidth * 3);\n } else if (-currentTransform + panelsWrapperWidth > scrollWidth) {\n let space = -currentTransform + panelsWrapperWidth - scrollWidth;\n space = space * panelsWrapperWidth / (space + panelsWrapperWidth * 3);\n currentTransform = panelsWrapperWidth - scrollWidth - space;\n }\n\n updateTransform(currentTransform * 100 / panelsWrapperWidth);\n } else if (Math.abs(coords.y - startCoords.y) > 10) {\n // Swipe is not started, so we cancel it because of vertical scroll\n isSwipeCanceled = true;\n } else if (!isSwipeCanceled && Math.abs(coords.x - startCoords.x) > 8) {\n initTabsSwipe();\n isSwipeStarted = true;\n startCoords = coords;\n updateTransform(-selected * 100);\n updateShowedPanels(true);\n }\n\n if (isSwipeStarted && event.cancelable) {\n event.preventDefault();\n }\n }\n\n function onTouchEnd(): void {\n isSwipeCanceled = false;\n startCoords = null;\n let newSelected = selected;\n if (!isSwipeStarted) {\n return;\n }\n isSwipeStarted = false;\n\n // 512px limit for big screens\n const panelsWrapperWidth = Math.min(512, panelsWrapper.clientWidth);\n const swipeDist = Math.abs(startTransform - currentTransform);\n const swipeCoefficient = Math.min(1, (Date.now() - swipeStartTime) / 750);\n if (swipeDist > (panelsWrapperWidth / 4) * swipeCoefficient) {\n newSelected += (startTransform > currentTransform) ? 1 : -1;\n }\n\n if (newSelected >= items.length) {\n newSelected = items.length - 1;\n } else if (newSelected < 0) {\n newSelected = 0;\n }\n\n if (newSelected === selected) {\n // Scroll back to current tab\n currentTransform = -newSelected * panelsWrapperWidth;\n updateTransform(-newSelected * 100);\n hideNonVisiblePanels();\n } else {\n setSelected(newSelected);\n }\n }\n\n if (json.id && !hasError && !layoutParams?.fakeElement) {\n rootCtx.registerInstance<SwitchElements>(json.id, {\n setCurrentItem(item: number) {\n if (item < 0 || item > items.length - 1) {\n throw new Error('Item is out of range in \"set-current-item\" action');\n }\n\n setSelected(item);\n },\n setPreviousItem(overflow: Overflow) {\n let previousItem = selected - 1;\n\n if (previousItem < 0) {\n previousItem = overflow === 'ring' ? items.length - 1 : selected;\n }\n\n setSelected(previousItem);\n },\n setNextItem(overflow: Overflow) {\n let nextItem = selected + 1;\n\n if (nextItem > items.length - 1) {\n nextItem = overflow === 'ring' ? 0 : selected;\n }\n\n setSelected(nextItem);\n }\n });\n }\n\n onDestroy(() => {\n if (json.id && !layoutParams?.fakeElement) {\n rootCtx.unregisterInstance(json.id);\n }\n });\n</script>\n\n{#if !hasError}\n <Outer\n cls={genClassName('tabs', css, mods)}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n customActions={'tabs'}\n >\n <!-- svelte-ignore a11y-interactive-supports-focus -->\n <div\n bind:this={tabsElem}\n class=\"{css.tabs__list} {$jsonRestrictParentScroll ? rootCss['root_restrict-scroll'] : ''}\"\n role=\"tablist\"\n style:--divkit-tabs-title-padding={titlePadding ? edgeInsertsToCss(titlePadding) : ''}\n style:--divkit-tabs-font-size={pxToEm(tabFontSize)}\n style:--divkit-tabs-paddings={tabPaddings}\n style:--divkit-tabs-line-height={tabLineHeight}\n style:--divkit-tabs-letter-spacing={tabLetterSpacing}\n style:--divkit-tabs-active-font-weight={tabActiveFontWeight || ''}\n style:--divkit-tabs-inactive-font-weight={tabInactiveFontWeight || ''}\n style:--divkit-tabs-active-font-family={tabActiveFontFamily || ''}\n style:--divkit-tabs-inactive-font-family={tabInactiveFontFamily || ''}\n style:--divkit-tabs-active-text-color={tabActiveTextColor}\n style:--divkit-tabs-inactive-text-color={tabInactiveTextColor}\n style:--divkit-tabs-active-background-color={tabActiveBackground}\n style:--divkit-tabs-inactive-background-color={tabInactiveBackground}\n style:--divkit-tabs-border-radius={tabBorderRadius}\n style:--divkit-tabs-items-spacing={tabItemSpacing ? pxToEmWithUnits(tabItemSpacing) : ''}\n on:keydown={onTabKeydown}\n >\n {#each $childStore as item}\n {@const index = item.index}\n {@const isSelected = index === selected}\n\n <Actionable\n cls={genClassName('tabs__item', css, {\n selected: isSelected,\n actionable: Boolean(item.title_click_action)\n })}\n actions={item.title_click_action && !layoutParams?.fakeElement ? [item.title_click_action] : []}\n attrs={{\n id: `${instId}-tab-${index}`,\n 'aria-controls': `${instId}-panel-${index}`,\n role: 'tab',\n // eslint-disable-next-line no-nested-ternary\n tabindex: isSelected && !layoutParams?.fakeElement ? (item.title_click_action ? undefined : '0') : '-1',\n 'aria-selected': isSelected ? 'true' : 'false'\n }}\n customAction={layoutParams?.fakeElement ? null : (event => selectItem(event, index))}\n >\n {item.title}\n </Actionable>\n {/each}\n </div>\n {#if $jsonSeparator}\n <div\n class={css.tabs__separator}\n style={makeStyle(separatorStyle)}\n ></div>\n {/if}\n <div\n class=\"{css.tabs__panels} {$jsonRestrictParentScroll ? rootCss['root_restrict-scroll'] : ''}\"\n bind:this={panelsWrapper}\n >\n <div\n class={genClassName('tabs__swiper', css, {\n inited: isSwipeInitialized,\n animated: isAnimated\n })}\n bind:this={swiperElem}\n on:touchstart={isSwipeEnabled ? onTouchStart : undefined}\n on:touchmove={isSwipeEnabled ? onTouchMove : undefined}\n on:touchend={isSwipeEnabled ? onTouchEnd : undefined}\n on:touchcancel={isSwipeEnabled ? onTouchEnd : undefined}\n >\n {#each $childStore as item}\n {@const index = item.index}\n\n <div\n class={genClassName('tabs__panel', css, {\n visible: visiblePanels[index]\n })}\n role=\"tabpanel\"\n id=\"{instId}-panel-{index}\"\n aria-labelledby=\"{instId}-tab-{index}\"\n style=\"left: {index * 100}%\"\n >\n {#if showedPanels[index]}\n <Unknown div={items[index].div} {templateContext} layoutParams={childLayoutParams} />\n {/if}\n </div>\n {/each}\n </div>\n </div>\n </Outer>\n{/if}\n","import type { CornersRadius } from '../types/border';\nimport { borderRadius } from './borderRadius';\nimport { isNonNegativeNumber } from './isNonNegativeNumber';\n\nexport function correctBorderRadius(\n cornersRadius: CornersRadius,\n defaultRadius: number,\n fontSize: number,\n defaultVal: string\n): string {\n const list = [\n cornersRadius['top-left'],\n cornersRadius['top-right'],\n cornersRadius['bottom-right'],\n cornersRadius['bottom-left']\n ];\n\n for (let i = 0; i < list.length; ++i) {\n if (list[i] && !isNonNegativeNumber(list[i])) {\n return defaultVal;\n }\n }\n\n return borderRadius(cornersRadius, defaultRadius, fontSize);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"state\":\"divkit-b8efc\",\"state__animations\":\"divkit-adaae\",\"state__animation-child\":\"divkit-eb860\",\"state__animation-child-inner\":\"divkit-e08c6\"};","export function interpolateEasing(table: number[]) {\n return (t: number) => {\n if (t <= 0) {\n return 0;\n } else if (t >= 1) {\n return 1;\n }\n\n const x = t * table.length;\n const i = Math.floor(x);\n const p0 = table[i];\n const p1 = table[i + 1];\n const t2 = x - i;\n\n return p0 * t2 + p1 * (1 - t2);\n };\n}\n","import { interpolateEasing } from './interpolateEasing';\n\nconst table = [\n 0.0021, 0.0045, 0.0071, 0.0100, 0.0131, 0.0165, 0.0202,\n 0.0242, 0.0284, 0.0330, 0.0378, 0.0429, 0.0483, 0.0540,\n 0.0601, 0.0664, 0.0731, 0.0800, 0.0872, 0.0948, 0.1026,\n 0.1108, 0.1192, 0.1279, 0.1369, 0.1461, 0.1556, 0.1653,\n 0.1753, 0.1855, 0.1958, 0.2064, 0.2171, 0.2279, 0.2389,\n 0.2500, 0.2612, 0.2725, 0.2839, 0.2952, 0.3067, 0.3181,\n 0.3295, 0.3410, 0.3524, 0.3637, 0.3750, 0.3863, 0.3974,\n 0.4085, 0.4195, 0.4304, 0.4412, 0.4519, 0.4624, 0.4729,\n 0.4832, 0.4934, 0.5034, 0.5133, 0.5231, 0.5327, 0.5422,\n 0.5516, 0.5608, 0.5699, 0.5788, 0.5876, 0.5963, 0.6048,\n 0.6132, 0.6214, 0.6295, 0.6375, 0.6453, 0.6530, 0.6606,\n 0.6680, 0.6754, 0.6825, 0.6896, 0.6965, 0.7034, 0.7101,\n 0.7166, 0.7231, 0.7295, 0.7357, 0.7418, 0.7479, 0.7538,\n 0.7596, 0.7653, 0.7709, 0.7764, 0.7818, 0.7871, 0.7923,\n 0.7974, 0.8024, 0.8073, 0.8122, 0.8169, 0.8216, 0.8261,\n 0.8306, 0.8350, 0.8394, 0.8436, 0.8478, 0.8518, 0.8558,\n 0.8598, 0.8636, 0.8674, 0.8711, 0.8747, 0.8783, 0.8818,\n 0.8852, 0.8886, 0.8919, 0.8951, 0.8983, 0.9014, 0.9044,\n 0.9074, 0.9103, 0.9131, 0.9159, 0.9187, 0.9213, 0.9240,\n 0.9265, 0.9290, 0.9315, 0.9339, 0.9362, 0.9385, 0.9408,\n 0.9430, 0.9451, 0.9472, 0.9492, 0.9512, 0.9532, 0.9551,\n 0.9569, 0.9587, 0.9605, 0.9622, 0.9638, 0.9655, 0.9670,\n 0.9686, 0.9701, 0.9715, 0.9729, 0.9743, 0.9756, 0.9769,\n 0.9782, 0.9794, 0.9805, 0.9817, 0.9828, 0.9838, 0.9848,\n 0.9858, 0.9868, 0.9877, 0.9886, 0.9894, 0.9902, 0.9910,\n 0.9917, 0.9924, 0.9931, 0.9937, 0.9943, 0.9949, 0.9954,\n 0.9959, 0.9964, 0.9969, 0.9973, 0.9977, 0.9980, 0.9983,\n 0.9986, 0.9989, 0.9991, 0.9993, 0.9995, 0.9997, 0.9998,\n 0.9999, 0.9999, 1.0000, 1.0000\n];\n\nexport const ease = interpolateEasing(table);\n","import { interpolateEasing } from './interpolateEasing';\n\nconst table = [\n 0.0005, 0.0020, 0.0045, 0.0078, 0.0119, 0.0168,\n 0.0224, 0.0286, 0.0355, 0.0429, 0.0508, 0.0592, 0.0681,\n 0.0774, 0.0870, 0.0969, 0.1072, 0.1177, 0.1285, 0.1395,\n 0.1507, 0.1621, 0.1736, 0.1853, 0.1970, 0.2089, 0.2208,\n 0.2328, 0.2448, 0.2569, 0.2689, 0.2810, 0.2930, 0.3050,\n 0.3170, 0.3289, 0.3408, 0.3526, 0.3644, 0.3760, 0.3876,\n 0.3991, 0.4105, 0.4218, 0.4330, 0.4440, 0.4550, 0.4658,\n 0.4765, 0.4871, 0.4975, 0.5078, 0.5180, 0.5280, 0.5379,\n 0.5477, 0.5573, 0.5668, 0.5761, 0.5853, 0.5944, 0.6033,\n 0.6120, 0.6206, 0.6291, 0.6374, 0.6456, 0.6537, 0.6616,\n 0.6693, 0.6770, 0.6845, 0.6918, 0.6990, 0.7061, 0.7130,\n 0.7199, 0.7265, 0.7331, 0.7395, 0.7458, 0.7520, 0.7580,\n 0.7640, 0.7698, 0.7755, 0.7810, 0.7865, 0.7918, 0.7971,\n 0.8022, 0.8072, 0.8121, 0.8169, 0.8216, 0.8262, 0.8307,\n 0.8351, 0.8394, 0.8436, 0.8477, 0.8517, 0.8557, 0.8595,\n 0.8633, 0.8669, 0.8705, 0.8740, 0.8775, 0.8808, 0.8841,\n 0.8873, 0.8904, 0.8934, 0.8964, 0.8993, 0.9022, 0.9049,\n 0.9076, 0.9103, 0.9129, 0.9154, 0.9178, 0.9202, 0.9226,\n 0.9249, 0.9271, 0.9293, 0.9314, 0.9335, 0.9355, 0.9375,\n 0.9394, 0.9413, 0.9431, 0.9449, 0.9466, 0.9483, 0.9500,\n 0.9516, 0.9532, 0.9547, 0.9562, 0.9576, 0.9591, 0.9605,\n 0.9618, 0.9631, 0.9644, 0.9657, 0.9669, 0.9681, 0.9692,\n 0.9703, 0.9714, 0.9725, 0.9736, 0.9746, 0.9756, 0.9765,\n 0.9775, 0.9784, 0.9793, 0.9802, 0.9810, 0.9818, 0.9826,\n 0.9834, 0.9842, 0.9849, 0.9856, 0.9863, 0.9870, 0.9877,\n 0.9883, 0.9890, 0.9896, 0.9902, 0.9908, 0.9913, 0.9919,\n 0.9924, 0.9930, 0.9935, 0.9940, 0.9944, 0.9949, 0.9954,\n 0.9958, 0.9963, 0.9967, 0.9971, 0.9975, 0.9979, 0.9983,\n 0.9986, 0.9990, 0.9993, 0.9997, 1.0000\n];\n\nexport const spring = interpolateEasing(table);\n","// extracted by mini-css-extract-plugin\nexport default {\"tooltip\":\"divkit-f1907\",\"tooltip_visible\":\"divkit-e5914\"};","<script lang=\"ts\">\n import { afterUpdate, createEventDispatcher, getContext, onDestroy, onMount } from 'svelte';\n\n import rootCss from '../Root.module.css';\n import css from './Tooltip.module.css';\n\n import type { TemplateContext } from '../../../typings/common';\n import type { Tooltip } from '../../types/base';\n import type { Animation } from '../../types/animation';\n import Unknown from '../utilities/Unknown.svelte';\n import { genClassName } from '../../utils/genClassName';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { inOutAnimation } from '../../utils/inOutAnimation';\n\n export let ownerNode: HTMLElement;\n export let data: Tooltip;\n export let internalId: number;\n export let templateContext: TemplateContext;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n const DEFAULT_ANIMATION: Animation = {\n name: 'set',\n items: [{\n name: 'translate'\n }, {\n name: 'fade'\n }]\n };\n\n const creationTime = Date.now();\n\n $: isDesktop = rootCtx.isDesktop;\n\n $: position = rootCtx.getDerivedFromVars(data.position);\n $: offsetX = rootCtx.getDerivedFromVars(data.offset?.x?.value);\n $: offsetY = rootCtx.getDerivedFromVars(data.offset?.y?.value);\n\n $: animationIn = rootCtx.getDerivedFromVars(data.animation_in);\n $: animationOut = rootCtx.getDerivedFromVars(data.animation_out);\n\n let tooltipNode: HTMLElement;\n let visible = false;\n let tooltipX = '';\n let tooltipY = '';\n let tooltipWidth = '';\n let tooltipHeight = '';\n let resizeObserver: ResizeObserver | null = null;\n\n $: mods = {\n visible\n };\n\n function reposition(): void {\n if (!tooltipNode || !ownerNode) {\n return;\n }\n const parent = tooltipNode.parentElement;\n if (!parent) {\n return;\n }\n\n const prevTransform = tooltipNode.style.cssText;\n // Override transform from the css animation in the inOutAnimation\n // So it happens in the order:\n // 1) Attach dom node\n // 2) Run in-out transition\n // 3) Call afterUpdate\n tooltipNode.style.cssText += ';transform: none !important';\n\n const ownerBbox = ownerNode.getBoundingClientRect();\n const tooltipBbox = tooltipNode.getBoundingClientRect();\n const parentBbox = parent.getBoundingClientRect();\n\n tooltipNode.style.cssText = prevTransform;\n\n let x = 0;\n let y = 0;\n let width: number | null = null;\n let height: number | null = null;\n let calcedWidth = 0;\n let calcedHeight = 0;\n\n const jsonWidth = rootCtx.getJsonWithVars(data.div?.width);\n const jsonHeight = rootCtx.getJsonWithVars(data.div?.width);\n\n if (!jsonWidth || jsonWidth.type === 'match_parent') {\n calcedWidth = width = ownerBbox.width;\n } else if (jsonWidth.type === 'fixed' && jsonWidth.value) {\n calcedWidth = width = jsonWidth.value;\n } else {\n calcedWidth = tooltipBbox.width;\n }\n if (jsonHeight?.type === 'match_parent') {\n calcedHeight = height = ownerBbox.height;\n } else if (jsonHeight?.type === 'fixed' && jsonHeight.value) {\n calcedHeight = height = jsonHeight.value;\n } else {\n calcedHeight = tooltipBbox.height;\n }\n\n if ($position === 'left' || $position === 'bottom-left' || $position === 'top-left') {\n x = ownerBbox.left - calcedWidth;\n } else if ($position === 'top' || $position === 'bottom' || $position === 'center') {\n x = (ownerBbox.left + ownerBbox.right) / 2 - calcedWidth / 2;\n } else if ($position === 'right' || $position === 'bottom-right' || $position === 'top-right') {\n x = ownerBbox.right;\n } else {\n return;\n }\n\n if ($position === 'top' || $position === 'top-left' || $position === 'top-right') {\n y = ownerBbox.top - calcedHeight;\n } else if ($position === 'left' || $position === 'right' || $position === 'center') {\n y = (ownerBbox.top + ownerBbox.bottom) / 2 - calcedHeight / 2;\n } else if ($position === 'bottom-left' || $position === 'bottom' || $position === 'bottom-right') {\n y = ownerBbox.bottom;\n } else {\n return;\n }\n\n x -= parentBbox.left;\n y -= parentBbox.top;\n\n x += $offsetX || 0;\n y += $offsetY || 0;\n\n tooltipX = `${x}px`;\n tooltipY = `${y}px`;\n tooltipWidth = width !== null ? `${width}px` : '';\n tooltipHeight = height !== null ? `${height}px` : '';\n visible = true;\n\n if (width === null || height === null) {\n // wrap_content by any side\n if (typeof ResizeObserver !== 'undefined' && !resizeObserver) {\n resizeObserver = new ResizeObserver(() => {\n requestAnimationFrame(reposition);\n });\n resizeObserver.observe(tooltipNode);\n }\n } else {\n resizeObserver?.disconnect();\n }\n }\n\n function onWindowClick(event: Event): void {\n if (Date.now() - creationTime < 100 || event.composedPath().includes(tooltipNode)) {\n return;\n }\n\n rootCtx.onTooltipClose(internalId);\n }\n\n function onWindowResize(): void {\n reposition();\n }\n\n onMount(() => {\n if (rootCtx.tooltipRoot) {\n const computed = window.getComputedStyle(tooltipNode);\n tooltipNode.style.fontSize = computed.fontSize;\n tooltipNode.style.fontFamily = computed.fontFamily;\n tooltipNode.style.lineHeight = computed.lineHeight;\n rootCtx.tooltipRoot.appendChild(tooltipNode);\n }\n });\n\n afterUpdate(() => {\n if (!visible) {\n reposition();\n }\n });\n\n onDestroy(() => {\n resizeObserver?.disconnect();\n });\n</script>\n\n<svelte:window\n on:click={onWindowClick}\n on:resize={onWindowResize}\n/>\n\n<div\n bind:this={tooltipNode}\n class=\"{genClassName('tooltip', css, mods)} {$isDesktop ? rootCss.root_platform_desktop : ''}\"\n style:top={tooltipY}\n style:left={tooltipX}\n style:width={tooltipWidth}\n style:height={tooltipHeight}\n in:inOutAnimation={{ animations: $animationIn || DEFAULT_ANIMATION, direction: 'in' }}\n out:inOutAnimation={{ animations: $animationOut || DEFAULT_ANIMATION, direction: 'out' }}\n>\n <Unknown\n div={data.div}\n {templateContext}\n />\n</div>\n","<script lang=\"ts\">\n import { setContext, getContext, tick, onDestroy } from 'svelte';\n\n import css from './State.module.css';\n\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivStateData, State } from '../../types/state';\n import type { AnyTransition, AppearanceTransition, DivBaseData, TransitionChange } from '../../types/base';\n import type { ChangeBoundsTransition } from '../../types/base';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { wrapError } from '../../utils/wrapError';\n import { STATE_CTX, StateCtxValue, StateInterface } from '../../context/state';\n import { calcMaxDuration, inOutTransition } from '../../utils/inOutTransition';\n import { changeBoundsTransition } from '../../utils/changeBoundsTransition';\n import { flattenTransition } from '../../utils/flattenTransition';\n import Outer from '../utilities/Outer.svelte';\n import Unknown from '../utilities/Unknown.svelte';\n import TooltipView from '../tooltip/Tooltip.svelte';\n\n export let json: Partial<DivStateData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n const stateCtx = getContext<StateCtxValue>(STATE_CTX);\n let animationRoot: HTMLElement | undefined;\n let transitionChangeBoxes: Map<string, DOMRect> = new Map();\n let childrenIds = new Set<string>();\n\n $: if (json) {\n childrenIds = new Set<string>();\n }\n\n let hasError = false;\n $: items = json.states || [];\n $: {\n if (!items?.length) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Empty \"states\" prop for div \"state\"')));\n } else {\n hasError = false;\n }\n }\n\n let childStateMap: Map<string, StateInterface> | null = null;\n\n interface AnimationItem {\n json: DivBaseData;\n templateContext: TemplateContext;\n elementBbox: DOMRect;\n rootBbox: DOMRect;\n transitions: AnyTransition[];\n alpha?: number;\n width: number;\n height: number;\n offsetTop: number;\n offsetLeft: number;\n direction: 'in' | 'out';\n resolvePromise?: (val?: void) => void;\n node: HTMLElement;\n }\n interface AnimationItemWithMaxDuration extends AnimationItem {\n maxDuration: number;\n }\n interface ChangeBoundsItem {\n json: DivBaseData;\n templateContext: TemplateContext;\n rootBbox: DOMRect;\n beforeBbox: DOMRect;\n afterBbox: DOMRect;\n transition: ChangeBoundsTransition;\n resolvePromise?: (val?: void) => void;\n node: HTMLElement;\n }\n let animationList: (AnimationItemWithMaxDuration | ChangeBoundsItem)[] = [];\n\n interface ChildWithTransition {\n json: DivBaseData;\n templateContext: TemplateContext;\n transitions: AppearanceTransition;\n node: HTMLElement;\n resolvePromise?: (val?: void) => void;\n }\n interface ChildWithTransitionChange {\n id: string;\n json: DivBaseData;\n templateContext: TemplateContext;\n transitions: TransitionChange;\n node: HTMLElement;\n resolvePromise?: (val?: void) => void;\n }\n let childrenWithTransitionIn: ChildWithTransition[] = [];\n let childrenWithTransitionOut: ChildWithTransition[] = [];\n let childrenWithTransitionChange: ChildWithTransitionChange[] = [];\n\n function haveFadeTransition(list: AnyTransition[]): boolean {\n return list.some(it => it.type === 'fade');\n }\n\n function getItemAnimation(rootBbox: DOMRect, child: ChildWithTransition, direction: 'in' | 'out'): AnimationItem {\n let { json, templateContext, transitions, node } = child;\n json = rootCtx.getJsonWithVars(json) as DivBaseData;\n transitions = rootCtx.getJsonWithVars(transitions) as AppearanceTransition;\n\n const transitionsList: AnyTransition[] = flattenTransition(transitions);\n const bbox = node.getBoundingClientRect();\n\n return {\n json: {\n ...json,\n margins: undefined,\n alpha: haveFadeTransition(transitionsList) ? undefined : json.alpha\n },\n templateContext,\n elementBbox: bbox,\n rootBbox,\n transitions: transitionsList,\n alpha: json.alpha,\n width: bbox.width,\n height: bbox.height,\n offsetTop: bbox.top - rootBbox.top,\n offsetLeft: bbox.left - rootBbox.left,\n direction,\n resolvePromise: child.resolvePromise,\n node: child.node\n };\n }\n\n function getTransitionChange(transitionOrSet: TransitionChange): ChangeBoundsTransition | null {\n if (transitionOrSet.type === 'change_bounds') {\n return transitionOrSet;\n } else if (transitionOrSet.type === 'set') {\n return getTransitionChange(transitionOrSet.items[0]);\n }\n return null;\n }\n\n const stateId = json.div_id || json.id;\n\n if (!stateId) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Missing \"id\" prop for div \"state\"')));\n } else if (!layoutParams?.fakeElement) {\n stateCtx.registerInstance(stateId, {\n async setState(stateId: string) {\n if (selectedId === stateId) {\n return;\n }\n\n rootCtx.setRunning('stateChange', true);\n\n const wasIds = new Set(childrenIds);\n\n animationList.forEach(it => {\n if (it.resolvePromise) {\n it.resolvePromise();\n }\n });\n animationList = [];\n let transitionsOutToRun: AnimationItem[] = [];\n if (animationRoot) {\n const rootBbox = animationRoot.getBoundingClientRect();\n transitionsOutToRun = childrenWithTransitionOut\n .map(it => getItemAnimation(rootBbox, it, 'out'));\n }\n childrenWithTransitionChange.forEach(child => {\n transitionChangeBoxes.set(child.id, child.node.getBoundingClientRect());\n });\n childrenWithTransitionIn = [];\n childrenWithTransitionOut = [];\n childrenWithTransitionChange = [];\n\n const newState = items.find(it => it.state_id === stateId) || null;\n if (newState) {\n selectedId = stateId;\n selectedState = newState;\n } else {\n rootCtx.logError(wrapError(new Error('Cannot find state with id'), {\n additional: {\n stateId\n }\n }));\n }\n\n await tick();\n\n if (!animationRoot) {\n return;\n }\n const rootBbox = animationRoot.getBoundingClientRect();\n\n let transitionsInToRun: AnimationItem[] =\n childrenWithTransitionIn.filter(it => {\n if (it.json.id && !wasIds.has(it.json.id)) {\n return true;\n }\n it.resolvePromise?.();\n return false;\n })\n .map(it => getItemAnimation(rootBbox, it, 'in'));\n\n transitionsOutToRun = transitionsOutToRun.filter(it => {\n if (it.json.id && !childrenIds.has(it.json.id)) {\n return true;\n }\n it.resolvePromise?.();\n return false;\n });\n\n const inOutList: AnimationItem[] = transitionsOutToRun.concat(transitionsInToRun);\n const maxDuration = inOutList.reduce((acc: number, item: AnimationItem) => {\n return Math.max(\n acc,\n calcMaxDuration(item.transitions)\n );\n }, 0);\n\n const changeList: ChangeBoundsItem[] = childrenWithTransitionChange\n .filter(child => transitionChangeBoxes.has(child.id))\n .map(child => {\n const res: ChangeBoundsItem = {\n json: {\n ...child.json,\n margins: undefined,\n width: { type: 'match_parent' },\n height: { type: 'match_parent' },\n },\n templateContext: child.templateContext,\n rootBbox,\n beforeBbox: transitionChangeBoxes.get(child.id) as DOMRect,\n afterBbox: child.node.getBoundingClientRect(),\n node: child.node,\n transition: getTransitionChange(child.transitions) as ChangeBoundsTransition,\n resolvePromise: child.resolvePromise\n };\n\n return res;\n });\n\n animationList = [\n ...inOutList.map(it => {\n return {\n ...it,\n maxDuration\n };\n }),\n ...changeList\n ];\n\n transitionChangeBoxes.clear();\n\n rootCtx.setRunning('stateChange', false);\n },\n getChild(id: string): StateInterface | undefined {\n if (childStateMap && childStateMap.has(id)) {\n return childStateMap.get(id);\n }\n\n rootCtx.logError(wrapError(new Error('Missing state block with id'), {\n additional: {\n id\n }\n }));\n return undefined;\n }\n });\n\n setContext<StateCtxValue>(STATE_CTX, {\n registerInstance(id: string, block: StateInterface) {\n if (!childStateMap) {\n childStateMap = new Map();\n }\n\n if (childStateMap.has(id)) {\n rootCtx.logError(wrapError(new Error('Duplicate state with id'), {\n additional: {\n id\n }\n }));\n } else {\n childStateMap.set(id, block);\n }\n },\n unregisterInstance(id: string) {\n childStateMap?.delete(id);\n },\n runVisibilityTransition(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: AppearanceTransition,\n node: HTMLElement,\n direction: 'in' | 'out'\n ) {\n if (!animationRoot) {\n return Promise.resolve();\n }\n\n const rootBbox = animationRoot.getBoundingClientRect();\n const item: AnimationItem = getItemAnimation(\n rootBbox,\n {\n json,\n templateContext,\n transitions,\n node\n },\n direction\n );\n\n const maxDuration = calcMaxDuration(item.transitions);\n const itemWithMaxDuration: AnimationItemWithMaxDuration = {\n ...item,\n maxDuration\n };\n animationList = [\n ...animationList.filter(it => it.node !== item.node),\n itemWithMaxDuration\n ];\n\n return new Promise<void>(resolve => {\n itemWithMaxDuration.resolvePromise = resolve;\n });\n },\n registerChildWithTransitionIn(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: AppearanceTransition,\n node: HTMLElement\n ) {\n const item: ChildWithTransition = {\n json,\n templateContext,\n transitions,\n node\n };\n childrenWithTransitionIn.push(item);\n\n return new Promise<void>(resolve => {\n item.resolvePromise = resolve;\n });\n },\n registerChildWithTransitionOut(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: AppearanceTransition,\n node: HTMLElement\n ) {\n const item: ChildWithTransition = {\n json,\n templateContext,\n transitions,\n node\n };\n childrenWithTransitionOut.push(item);\n\n return new Promise<void>(resolve => {\n item.resolvePromise = resolve;\n });\n },\n registerChildWithTransitionChange(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: TransitionChange,\n node: HTMLElement\n ) {\n const id = json.id;\n\n if (!id) {\n return Promise.resolve();\n }\n\n const item: ChildWithTransitionChange = {\n id,\n json,\n templateContext,\n transitions,\n node\n };\n childrenWithTransitionChange.push(item);\n\n return new Promise<void>(resolve => {\n item.resolvePromise = resolve;\n });\n },\n hasTransitionChange(id?: string) {\n if (!id) {\n return false;\n }\n\n return transitionChangeBoxes.has(id);\n },\n registerChild(id: string): void {\n childrenIds.add(id);\n },\n unregisterChild(id: string): void {\n childrenIds.delete(id);\n }\n });\n }\n\n let selectedId: string | undefined;\n let selectedState: State | null = null;\n const jsonDefaultStateId = rootCtx.getJsonWithVars(json.default_state_id);\n let inited = false;\n function initDefaultState(items: State[]): void {\n if (inited) {\n return;\n }\n inited = true;\n\n if (items.length) {\n if (jsonDefaultStateId) {\n selectedId = jsonDefaultStateId;\n selectedState = items.find(it => it.state_id === selectedId) || null;\n if (!selectedState) {\n rootCtx.logError(wrapError(new Error('Cannot find state for default_state_id'), {\n additional: {\n selectedId\n }\n }));\n }\n } else {\n selectedState = items[0];\n selectedId = selectedState.state_id;\n }\n }\n }\n $: initDefaultState(items);\n\n function onOutro(item: AnimationItem | ChangeBoundsItem): void {\n animationList = animationList.filter(it => it !== item);\n\n if (item.resolvePromise) {\n item.resolvePromise();\n }\n }\n\n onDestroy(() => {\n if (stateId && !layoutParams?.fakeElement) {\n stateCtx.unregisterInstance(stateId);\n }\n });\n</script>\n\n{#if !hasError}\n <Outer\n cls={css.state}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n >\n {#if selectedState?.div}\n {#key selectedState}\n <Unknown div={selectedState.div} templateContext={templateContext} />\n {/key}\n {/if}\n <div class={css.state__animations} bind:this={animationRoot} aria-hidden=\"true\">\n {#each animationList as item (item)}\n {#if 'direction' in item}\n <div\n class={css['state__animation-child']}\n style:left=\"{item.offsetLeft}px\"\n style:top=\"{item.offsetTop}px\"\n style:width=\"{item.width}px\"\n style:height=\"{item.height}px\"\n in:inOutTransition|global={item}\n on:introend={() => onOutro(item)}\n >\n <div class={css['state__animation-child-inner']}>\n <Unknown\n div={item.json}\n templateContext={item.templateContext}\n layoutParams={{ fakeElement: true }}\n />\n </div>\n </div>\n {:else}\n <div\n class={css['state__animation-child']}\n in:changeBoundsTransition|global={item}\n on:introend={() => onOutro(item)}\n >\n <div class={css['state__animation-child-inner']}>\n <Unknown\n div={item.json}\n templateContext={item.templateContext}\n layoutParams={{ fakeElement: true }}\n />\n </div>\n </div>\n {/if}\n {/each}\n </div>\n </Outer>\n\n {#if layoutParams?.tooltips}\n {#each layoutParams?.tooltips as item (item.internalId)}\n <TooltipView\n ownerNode={item.ownerNode}\n data={item.desc}\n internalId={item.internalId}\n {templateContext}\n />\n {/each}\n {/if}\n{/if}\n","// extracted by mini-css-extract-plugin\nexport default {\"pager\":\"divkit-c5feb\",\"pager__items\":\"divkit-f6987\",\"pager__item\":\"divkit-feca7\",\"pager_orientation_horizontal\":\"divkit-b0a1c\",\"pager_orientation_vertical\":\"divkit-f772f\"};","<script lang=\"ts\">\n import { getContext, onDestroy, onMount } from 'svelte';\n\n import css from './Pager.module.css';\n import rootCss from '../Root.module.css';\n\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivBaseData } from '../../types/base';\n import type { DivPagerData } from '../../types/pager';\n import type { LayoutParams } from '../../types/layoutParams';\n import type { Orientation } from '../../types/orientation';\n import type { PagerData } from '../../stores/pagers';\n import type { Overflow, SwitchElements } from '../../types/switch-elements';\n\n import Outer from '../utilities/Outer.svelte';\n import Unknown from '../utilities/Unknown.svelte';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { wrapError } from '../../utils/wrapError';\n import { genClassName } from '../../utils/genClassName';\n import { pxToEm, pxToEmWithUnits } from '../../utils/pxToEm';\n import { makeStyle } from '../../utils/makeStyle';\n import { correctGeneralOrientation } from '../../utils/correctGeneralOrientation';\n import { correctEdgeInserts } from '../../utils/correctEdgeInserts';\n import { isNonNegativeNumber } from '../../utils/isNonNegativeNumber';\n import { debounce } from '../../utils/debounce';\n\n export let json: Partial<DivPagerData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n const instId = rootCtx.genId('pager');\n\n let pagerItemsWrapper: HTMLElement;\n let mounted = false;\n\n let hasItemsError = false;\n $: {\n if (!json.items?.length || !Array.isArray(json.items)) {\n hasItemsError = true;\n rootCtx.logError(wrapError(new Error('Incorrect or empty \"items\" prop for div \"pager\"')));\n } else {\n hasItemsError = false;\n }\n }\n\n function replaceItems(items: DivBaseData[]): void {\n json = {\n ...json,\n items\n };\n }\n\n $: items = (!hasItemsError && json.items || []).map(item => {\n let childJson: DivBaseData = item as DivBaseData;\n let childContext: TemplateContext = templateContext;\n\n ({\n templateContext: childContext,\n json: childJson\n } = rootCtx.processTemplate(childJson, childContext));\n\n return {\n json: childJson,\n templateContext: childContext,\n origJson: item\n };\n });\n\n let currentItem = 0;\n let prevSelectedItem = 0;\n\n let hasLayoutModeError = false;\n $: jsonLayoutMode = rootCtx.getDerivedFromVars(json.layout_mode);\n $: {\n if (!$jsonLayoutMode) {\n hasLayoutModeError = true;\n rootCtx.logError(wrapError(new Error('Empty \"layout_mode\" prop for div \"pager\"')));\n } else if ($jsonLayoutMode.type !== 'percentage' && $jsonLayoutMode.type !== 'fixed') {\n hasLayoutModeError = true;\n rootCtx.logError(wrapError(new Error('Incorrect value of \"layout_mode.type\" for div \"pager\"')));\n } else {\n hasLayoutModeError = false;\n }\n }\n\n let orientation: Orientation = 'horizontal';\n $: jsonOrientation = rootCtx.getDerivedFromVars(json.orientation);\n $: {\n orientation = correctGeneralOrientation($jsonOrientation, orientation);\n }\n\n let itemSpacing = '';\n $: jsonItemSpacing = rootCtx.getDerivedFromVars(json.item_spacing);\n $: {\n const val = $jsonItemSpacing?.value;\n if (val && isNonNegativeNumber(val)) {\n itemSpacing = pxToEm(val || 0);\n }\n }\n\n $: jsonPaddings = rootCtx.getDerivedFromVars(json.paddings);\n let padding = '';\n $: {\n padding = correctEdgeInserts($jsonPaddings, padding);\n }\n\n $: jsonRestrictParentScroll = rootCtx.getDerivedFromVars(json.restrict_parent_scroll);\n\n $: gridAuto = orientation === 'horizontal' ? 'grid-auto-columns' : 'grid-auto-rows';\n let sizeVal = '';\n\n $: {\n if ($jsonLayoutMode?.type === 'fixed') {\n const paddings = orientation === 'horizontal' ?\n pxToEmWithUnits((json.paddings?.left || 0) + (json.paddings?.right || 0)) :\n pxToEmWithUnits((json.paddings?.top || 0) + (json.paddings?.bottom || 0));\n const neighbourPageWidth = $jsonLayoutMode.neighbour_page_width?.value;\n sizeVal = neighbourPageWidth ?\n `calc(100% + ${paddings} - 2 * ${pxToEmWithUnits(neighbourPageWidth)} - 2 * ${itemSpacing})` :\n '100%';\n } else if ($jsonLayoutMode?.type === 'percentage') {\n const pageWidth = $jsonLayoutMode.page_width?.value;\n sizeVal = `${Number(pageWidth)}%`;\n }\n }\n\n $: style = {\n 'grid-gap': itemSpacing,\n padding,\n [gridAuto]: sizeVal\n };\n\n $: mods = {\n orientation\n };\n\n $: hasError = hasItemsError || hasLayoutModeError;\n\n function checkIsFullyIntersecting(scroller: DOMRect, item: DOMRect): boolean {\n if (orientation === 'horizontal') {\n return item.left >= scroller.left && item.right <= scroller.right;\n }\n\n return item.top >= scroller.top && item.bottom <= scroller.bottom;\n }\n\n function calculateCurrentElementIndex(): number {\n const pagerElements = Array.from(pagerItemsWrapper.children) as HTMLElement[];\n const wrapperRect = pagerItemsWrapper.getBoundingClientRect();\n\n const firstFullyVisibleElement = pagerElements.findIndex(el =>\n checkIsFullyIntersecting(wrapperRect, el.getBoundingClientRect())\n );\n\n if (firstFullyVisibleElement !== -1) {\n return firstFullyVisibleElement;\n }\n\n return currentItem;\n }\n\n function onScroll(): void {\n if (!mounted) {\n // Already destroyed\n return;\n }\n\n const nextItem = calculateCurrentElementIndex();\n if (nextItem !== currentItem) {\n currentItem = nextItem;\n }\n }\n\n const onScrollDebounced = debounce(onScroll, 50);\n\n $: pagers = rootCtx.getStore<Map<string, PagerData>>('pagers');\n\n function pagerDataUpdate(size: number, currentItem: number): void {\n const pagerId = json.id;\n if (pagerId) {\n const newPagersMap = new Map($pagers);\n $pagers = newPagersMap.set(pagerId, { instId, size, currentItem, scrollToPagerItem });\n }\n }\n\n function runSelectedActions(currentItem: number): void {\n // prevent initial actions execution\n if (currentItem === prevSelectedItem) {\n return;\n }\n prevSelectedItem = currentItem;\n\n const actions = rootCtx.getJsonWithVars(items[currentItem].json?.selected_actions);\n if (!actions?.length) {\n return;\n }\n rootCtx.execAnyActions(actions);\n }\n\n $: pagerDataUpdate(items.length, currentItem);\n\n $: runSelectedActions(currentItem);\n\n function scrollToPagerItem(index: number, behavior: ScrollBehavior = 'smooth'): void {\n const isHorizontal = orientation === 'horizontal';\n const nextPagerItem = pagerItemsWrapper.children[index] as HTMLElement;\n const elementOffset: keyof HTMLElement = isHorizontal ? 'offsetLeft' : 'offsetTop';\n const scrollDirection: keyof ScrollToOptions = isHorizontal ? 'left' : 'top';\n\n pagerItemsWrapper.scroll({\n [scrollDirection]: nextPagerItem[elementOffset],\n behavior\n });\n currentItem = index;\n }\n\n if (json.id && !layoutParams?.fakeElement) {\n rootCtx.registerInstance<SwitchElements>(json.id, {\n setCurrentItem(item: number) {\n if (item < 0 || item > items.length - 1) {\n throw new Error('Item is out of range in \"set-current-item\" action');\n }\n\n scrollToPagerItem(item);\n },\n setPreviousItem(overflow: Overflow) {\n let previousItem = currentItem - 1;\n\n if (previousItem < 0) {\n previousItem = overflow === 'ring' ? items.length - 1 : currentItem;\n }\n\n scrollToPagerItem(previousItem);\n },\n setNextItem(overflow: Overflow) {\n let nextItem = currentItem + 1;\n\n if (nextItem > items.length - 1) {\n nextItem = overflow === 'ring' ? 0 : currentItem;\n }\n\n scrollToPagerItem(nextItem);\n }\n });\n }\n\n onMount(() => {\n mounted = true;\n\n const isIndicatorExist = Boolean(document.getElementById(`${instId}-tab-0`));\n\n if (isIndicatorExist) {\n const pagerItems = [...pagerItemsWrapper.children] as HTMLElement[];\n\n for (const [index, item] of pagerItems.entries()) {\n item.setAttribute('role', 'tabpanel');\n item.setAttribute('id', `${instId}-panel-${index}`);\n item.setAttribute('aria-labelledby', `${instId}-tab-${index}`);\n }\n }\n });\n\n onDestroy(() => {\n mounted = false;\n\n if (json.id && !layoutParams?.fakeElement) {\n rootCtx.unregisterInstance(json.id);\n }\n });\n</script>\n\n{#if !hasError}\n <Outer\n cls={genClassName('pager', css, mods)}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n customPaddings={true}\n parentOf={json.items}\n {replaceItems}\n >\n <div\n class=\"{css.pager__items} {$jsonRestrictParentScroll ? rootCss['root_restrict-scroll'] : ''}\"\n style={makeStyle(style)}\n bind:this={pagerItemsWrapper}\n on:scroll={onScrollDebounced}\n >\n {#key items}\n {#each items as item}\n <div class={css.pager__item}>\n <Unknown\n div={item.json}\n templateContext={item.templateContext}\n origJson={item.origJson}\n layoutParams={layoutParams?.fakeElement ? { fakeElement: true } : undefined}\n />\n </div>\n {/each}\n {/key}\n </div>\n </Outer>\n{/if}\n","// extracted by mini-css-extract-plugin\nexport default {\"indicator\":\"divkit-d8e3f\",\"indicator__scroller\":\"divkit-b5db0\",\"indicator__items\":\"divkit-d5d94\",\"indicator__item\":\"divkit-f6629\",\"indicator_placement_default\":\"divkit-c1670\",\"indicator__item_active\":\"divkit-b39cd\",\"indicator_placement_stretch\":\"divkit-b6bd3\"};","<script lang=\"ts\">\n import { getContext, tick } from 'svelte';\n\n import rootCss from '../Root.module.css';\n import css from './Indicator.module.css';\n\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivIndicatorData } from '../../types/indicator';\n import type { LayoutParams } from '../../types/layoutParams';\n import type { PagerData } from '../../stores/pagers';\n import type { MaybeMissing } from '../../expressions/json';\n import type { DivIndicatorDefaultItemPlacement, DivIndicatorStretchItemPlacement } from '../../types/indicator';\n\n import Outer from '../utilities/Outer.svelte';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { genClassName } from '../../utils/genClassName';\n import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n import { pxToEm } from '../../utils/pxToEm';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { ARROW_LEFT, ARROW_RIGHT, END, HOME } from '../../utils/keyboard/codes';\n import { correctDrawableStyle, DrawableStyle } from '../../utils/correctDrawableStyles';\n import { correctColor } from '../../utils/correctColor';\n\n export let json: Partial<DivIndicatorData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const AVAIL_SHAPES = ['rounded_rectangle', 'circle'];\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n $: jsonShape = rootCtx.getDerivedFromVars(json.shape);\n $: jsonActiveItemColor = rootCtx.getDerivedFromVars(json.active_item_color);\n $: jsonInactiveItemColor = rootCtx.getDerivedFromVars(json.inactive_item_color);\n $: jsonActiveItemSize = rootCtx.getDerivedFromVars(json.active_item_size);\n $: jsonActiveShape = rootCtx.getDerivedFromVars(json.active_shape);\n $: jsonInactiveShape = rootCtx.getDerivedFromVars(json.inactive_shape);\n let activeStyle: DrawableStyle = {\n width: 13,\n height: 13,\n borderRadius: 6.5,\n background: '#ffdc60'\n };\n let inactiveStyle: DrawableStyle = {\n width: 10,\n height: 10,\n borderRadius: 5,\n background: '#33919cb5'\n };\n $: {\n if ($jsonActiveShape) {\n activeStyle = correctDrawableStyle<DrawableStyle>({\n type: 'shape_drawable',\n shape: $jsonActiveShape\n }, AVAIL_SHAPES, activeStyle);\n }\n if ($jsonInactiveShape) {\n inactiveStyle = correctDrawableStyle<DrawableStyle>({\n type: 'shape_drawable',\n shape: $jsonInactiveShape\n }, AVAIL_SHAPES, inactiveStyle);\n }\n if (!$jsonActiveShape && !$jsonInactiveShape && $jsonShape) {\n const activeSize = correctPositiveNumber($jsonActiveItemSize, 1.3);\n inactiveStyle = correctDrawableStyle<DrawableStyle>({\n type: 'shape_drawable',\n shape: $jsonShape,\n color: inactiveStyle.background\n }, AVAIL_SHAPES, inactiveStyle);\n inactiveStyle.background = correctColor($jsonInactiveItemColor, 1, inactiveStyle.background);\n activeStyle = {\n ...inactiveStyle,\n width: inactiveStyle.width * activeSize,\n height: inactiveStyle.height * activeSize,\n borderRadius: inactiveStyle.borderRadius * activeSize,\n background: activeStyle.background\n };\n activeStyle.background = correctColor($jsonActiveItemColor, 1, activeStyle.background);\n }\n }\n\n $: jsonSpaceBetweenCenters = rootCtx.getDerivedFromVars(json.space_between_centers);\n $: jsonItemsPlacement = rootCtx.getDerivedFromVars(json.items_placement);\n let placement: 'default' | 'stretch' = 'default';\n let spaceBetweenCenters = 15;\n let maxVisibleItems = 10;\n let itemSpacing = 5;\n $: if ($jsonItemsPlacement && ($jsonItemsPlacement.type === 'default' || $jsonItemsPlacement.type === 'stretch')) {\n placement = $jsonItemsPlacement.type;\n if (placement === 'default') {\n spaceBetweenCenters = correctNonNegativeNumber(\n ($jsonItemsPlacement as MaybeMissing<DivIndicatorDefaultItemPlacement>).space_between_centers?.value,\n spaceBetweenCenters\n );\n } else if (placement === 'stretch') {\n const placement = $jsonItemsPlacement as MaybeMissing<DivIndicatorStretchItemPlacement>;\n maxVisibleItems = correctPositiveNumber(placement.max_visible_items, maxVisibleItems);\n itemSpacing = correctNonNegativeNumber(placement.item_spacing?.value, itemSpacing);\n }\n } else {\n placement = 'default';\n if ($jsonSpaceBetweenCenters) {\n spaceBetweenCenters = correctNonNegativeNumber($jsonSpaceBetweenCenters.value, spaceBetweenCenters);\n }\n }\n\n let scroller: HTMLElement;\n let indicatorItemsWrapper: HTMLElement;\n let pagerData: PagerData;\n\n $: pagers = rootCtx.getStore<Map<string, PagerData>>('pagers');\n $: {\n onPagerDataUpdate($pagers);\n }\n\n async function onPagerDataUpdate(pagersMap: Map<string, PagerData>): Promise<void> {\n if (json.pager_id && pagersMap.has(json.pager_id)) {\n pagerData = pagersMap.get(json.pager_id) as PagerData;\n\n await tick();\n\n if (indicatorItemsWrapper) {\n // if not destroyed yet\n\n const currentItemOffsetLeft =\n (indicatorItemsWrapper.children[pagerData.currentItem] as HTMLElement).offsetLeft;\n\n scroller.scroll({\n left: currentItemOffsetLeft - scroller.clientWidth / 2,\n behavior: 'smooth'\n });\n }\n }\n }\n\n function onIndicatorItemClick(index: number) {\n if (index !== pagerData.currentItem) {\n pagerData.scrollToPagerItem(index);\n }\n }\n\n function onIndicatorItemKeydown(event: KeyboardEvent): void {\n if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) {\n return;\n }\n\n const { size, currentItem } = pagerData;\n if (event.which === ARROW_LEFT) {\n const prevItem = currentItem - 1 < 0 ? currentItem : currentItem - 1;\n moveFocus(prevItem);\n } else if (event.which === ARROW_RIGHT) {\n const nextItem = currentItem + 1 >= size ? currentItem : currentItem + 1;\n moveFocus(nextItem);\n } else if (event.which === HOME) {\n moveFocus(0);\n } else if (event.which === END) {\n moveFocus(size - 1);\n } else {\n return;\n }\n\n event.preventDefault();\n }\n\n async function moveFocus(index: number) {\n pagerData.scrollToPagerItem(index);\n\n await tick();\n\n const activeItem = indicatorItemsWrapper.querySelector(`.${css.indicator__item_active}`) as HTMLElement | null;\n if (activeItem) {\n activeItem.focus();\n }\n }\n\n $: mods = {\n placement\n };\n</script>\n\n<Outer\n cls={genClassName('indicator', css, mods)}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n>\n <div\n class={css.indicator__scroller}\n bind:this={scroller}\n >\n <div\n class={css.indicator__items}\n role=\"tablist\"\n bind:this={indicatorItemsWrapper}\n style:margin={placement === 'default' ? `0 ${pxToEm(Math.max(0, activeStyle.width - inactiveStyle.width) / 2)}` : ''}\n style:--divkit-indicator-inactive-width={pxToEm(inactiveStyle.width)}\n style:--divkit-indicator-inactive-height={pxToEm(inactiveStyle.height)}\n style:--divkit-indicator-inactive-border-radius={pxToEm(inactiveStyle.borderRadius)}\n style:--divkit-indicator-inactive-background={inactiveStyle.background || ''}\n style:--divkit-indicator-inactive-box-shadow={inactiveStyle.boxShadow || ''}\n style:--divkit-indicator-active-width={pxToEm(activeStyle.width)}\n style:--divkit-indicator-active-height={pxToEm(activeStyle.height)}\n style:--divkit-indicator-active-border-radius={pxToEm(activeStyle.borderRadius)}\n style:--divkit-indicator-active-background={activeStyle.background || ''}\n style:--divkit-indicator-active-box-shadow={activeStyle.boxShadow || ''}\n style:--divkit-indicator-active-scale={activeStyle.width / inactiveStyle.width}\n style:--divkit-indicator-default-margin={placement === 'default' ? `0 ${pxToEm((spaceBetweenCenters - inactiveStyle.width) / 2)}` : ''}\n style:--divkit-indicator-stretch-margin={placement === 'stretch' ? pxToEm(itemSpacing) : ''}\n style:--divkit-indicator-stretch-max-count={placement === 'stretch' ? maxVisibleItems : ''}\n style:--divkit-indicator-stretch-max-spacer={placement === 'stretch' ? pxToEm((maxVisibleItems - 1) * itemSpacing) : ''}\n >\n {#if pagerData}\n {#each Array(pagerData.size) as _, index}\n {@const isActiveItem = index === pagerData.currentItem}\n <div\n class=\"{genClassName('indicator__item', css, { active: isActiveItem })} {rootCss.root__clickable}\"\n role=\"tab\"\n id=\"{pagerData.instId}-tab-{index}\"\n aria-controls=\"{pagerData.instId}-panel-{index}\"\n aria-selected={isActiveItem ? 'true' : 'false'}\n tabindex={isActiveItem ? 0 : -1}\n on:click={() => onIndicatorItemClick(index)}\n on:keydown={onIndicatorItemKeydown}\n ></div>\n {/each}\n {/if}\n </div>\n </div>\n</Outer>\n","// extracted by mini-css-extract-plugin\nexport default {\"slider\":\"divkit-ef4f7\",\"slider__input\":\"divkit-d1d65\",\"slider__input_secondary\":\"divkit-c7980\",\"slider__thumb\":\"divkit-f3453\",\"slider__thumb_secondary\":\"divkit-e1984\",\"slider__tracks-wrapper\":\"divkit-f7338\",\"slider__tracks-inner\":\"divkit-ac903\",\"slider__track\":\"divkit-e956c\",\"slider__active-track\":\"divkit-ec5bf\",\"slider__thumb-text\":\"divkit-c4af5\",\"slider__thumb-text_secondary\":\"divkit-d8821\",\"slider__tick\":\"divkit-bd9bf\",\"slider__tick_active\":\"divkit-d8ce2\",\"slider__tick_inactive\":\"divkit-e71e7\"};","import type { SliderTextStyle } from '../types/slider';\nimport type { MaybeMissing } from '../expressions/json';\nimport { isPositiveNumber } from './isPositiveNumber';\nimport { correctColor } from './correctColor';\nimport { fontWeightToCss } from './fontWeightToCss';\nimport { pxToEm } from './pxToEm';\n\nexport interface TransformedSliderTextStyle {\n fontSize: string;\n fontWeight: number | undefined;\n textColor: string;\n offset?: {\n x: number;\n y: number;\n };\n}\n\nexport function correctSliderTextStyle(\n textStyle: MaybeMissing<SliderTextStyle> | undefined,\n defaultValue: TransformedSliderTextStyle | undefined\n): TransformedSliderTextStyle | undefined {\n if (!textStyle || !textStyle.font_size) {\n return defaultValue;\n }\n\n const offset = textStyle.offset;\n const convertedColor = textStyle.text_color && correctColor(textStyle.text_color) || '#000';\n const fontWeight = fontWeightToCss(textStyle.font_weight);\n\n if (\n isPositiveNumber(textStyle.font_size) &&\n convertedColor !== 'transparent'\n ) {\n const res: TransformedSliderTextStyle = {\n fontSize: pxToEm(textStyle.font_size),\n fontWeight,\n textColor: convertedColor\n };\n\n if (typeof offset?.x?.value === 'number' && typeof offset?.y?.value === 'number') {\n res.offset = {\n x: offset.x.value,\n y: offset.y.value\n };\n }\n\n return res;\n }\n}\n","export function clamp(val: number | bigint, min: number, max: number): number {\n return Math.max(min, Math.min(max, Number(val)));\n}\n","export const hasBigInt = typeof BigInt === 'function';\n\nexport function toBigIntNoCheck(val: number | bigint | string): number | bigint {\n if (hasBigInt) {\n return BigInt(val);\n }\n return Number(val);\n}\n\nexport const MAX_INT = toBigIntNoCheck('9223372036854775807');\nexport const MIN_INT = toBigIntNoCheck('-9223372036854775808');\n\nexport function toBigInt(val: number | bigint | string): number | bigint {\n const res = toBigIntNoCheck(val);\n if (res > MAX_INT || res < MIN_INT) {\n throw new Error('Integer overflow.');\n }\n return res;\n}\n\nexport const bigIntZero = toBigInt(0);\n\nexport function absBigInt(val: number | bigint): number | bigint {\n let res = val;\n if (res < 0) {\n res = -res;\n }\n return res;\n}\n\nexport function signBigInt(val: number | bigint): number | bigint {\n let res = 0;\n\n if (val > 0) {\n res = 1;\n } else if (val < 0) {\n res = -1;\n }\n\n return toBigInt(res);\n}\n","import type { Writable, Subscriber, Unsubscriber } from 'svelte/store';\nimport { writable } from 'svelte/store';\nimport type { EvalValue } from './eval';\nimport { parseColor } from '../utils/correctColor';\nimport { bigIntZero, toBigInt, MAX_INT, MIN_INT } from './bigint';\n\nexport type VariableType = 'string' | 'number' | 'integer' | 'boolean' | 'color' | 'url' | 'dict';\nexport type VariableValue = string | number | bigint | boolean | null | undefined | object;\n\nexport abstract class Variable<ValueType = any, TypeName = VariableType> {\n protected name: string;\n protected value: ValueType;\n protected store?: Writable<ValueType>;\n\n constructor(name: string, value: ValueType) {\n const val = this.convertValue(value);\n\n this.name = name;\n this.value = val;\n }\n\n getName(): string {\n return this.name;\n }\n\n protected abstract convertValue(value: unknown): ValueType;\n\n subscribe(cb: Subscriber<ValueType>): Unsubscriber {\n if (!this.store) {\n this.store = writable(this.value);\n }\n\n return this.store.subscribe(cb);\n }\n\n set(val: string): void {\n const value = this.fromString(val);\n\n this.setValue(value);\n }\n\n protected abstract fromString(val: string): ValueType;\n\n setValue(val: ValueType): void {\n const converted = this.convertValue(val);\n\n this.value = converted;\n\n if (this.store) {\n this.store.set(converted);\n }\n }\n\n getValue(): ValueType {\n return this.value;\n }\n\n abstract getType(): TypeName;\n}\n\nexport class StringVariable extends Variable<string, 'string'> {\n protected convertValue(value: unknown) {\n if (typeof value !== 'string') {\n throw new Error('Incorrect variable value');\n }\n return value;\n }\n\n protected fromString(val: string) {\n return val;\n }\n\n getType(): 'string' {\n return 'string';\n }\n}\n\nexport class IntegerVariable extends Variable<number | bigint, 'integer'> {\n protected convertValue(value: unknown) {\n if (\n (typeof value !== 'bigint' && typeof value !== 'number') ||\n typeof value === 'number' &&\n (\n isNaN(value) ||\n value !== Math.round(value)\n ) ||\n value > MAX_INT ||\n value < MIN_INT\n ) {\n throw new Error('Incorrect variable value');\n }\n\n return toBigInt(value);\n }\n\n protected fromString(val: string) {\n const res = toBigInt(val);\n\n return this.convertValue(res);\n }\n\n getType(): 'integer' {\n return 'integer';\n }\n}\n\nexport class NumberVariable extends Variable<number, 'number'> {\n protected convertValue(value: unknown) {\n if (\n typeof value !== 'number' ||\n isNaN(value) ||\n !isFinite(value)\n ) {\n throw new Error('Incorrect variable value');\n }\n\n return value;\n }\n\n protected fromString(val: string) {\n const res = Number(val);\n\n return this.convertValue(res);\n }\n\n getType(): 'number' {\n return 'number';\n }\n}\n\nexport class BooleanVariable extends Variable<number, 'boolean'> {\n protected convertValue(value: unknown) {\n if (value !== 1 && value !== 0 && value !== true && value !== false) {\n throw new Error('Incorrect variable value');\n }\n\n return Number(value);\n }\n\n protected fromString(val: string) {\n if (val === '1' || val === 'true') {\n return 1;\n } else if (val === '0' || val === 'false') {\n return 0;\n }\n\n throw new Error('Incorrect variable value');\n }\n\n getType(): 'boolean' {\n return 'boolean';\n }\n}\n\nexport class ColorVariable extends Variable<string, 'color'> {\n protected convertValue(value: unknown) {\n if (typeof value !== 'string' || !parseColor(value)) {\n throw new Error('Incorrect variable value');\n }\n\n // save input value, some expression tests rely on that\n return value;\n }\n\n protected fromString(val: string) {\n return this.convertValue(val);\n }\n\n getType(): 'color' {\n return 'color';\n }\n}\n\nexport class UrlVariable extends Variable<string, 'url'> {\n protected convertValue(value: unknown) {\n if (typeof value !== 'string') {\n throw new Error('Incorrect variable value');\n }\n\n return value;\n }\n\n protected fromString(val: string) {\n return val;\n }\n\n getType(): 'url' {\n return 'url';\n }\n}\n\nexport class DictVariable extends Variable<object, 'dict'> {\n protected convertValue(value: unknown) {\n if (typeof value !== 'object' || !value) {\n throw new Error('Incorrect variable value');\n }\n\n return value;\n }\n\n protected fromString(_val: string): object {\n throw new Error('Dict variable does not support setter from string');\n }\n\n getType(): 'dict' {\n return 'dict';\n }\n}\n\nexport const TYPE_TO_CLASS: Record<VariableType, typeof Variable<VariableValue, VariableType>> = {\n string: StringVariable,\n number: NumberVariable,\n integer: IntegerVariable,\n boolean: BooleanVariable,\n color: ColorVariable,\n url: UrlVariable,\n dict: DictVariable\n};\n\nexport function createVariable(\n name: string,\n type: VariableType,\n value: unknown\n): InstanceType<typeof TYPE_TO_CLASS[typeof type]> {\n if (!(type in TYPE_TO_CLASS)) {\n throw new Error('Unsupported variable type');\n }\n\n return new (TYPE_TO_CLASS[type] as any)(name, value);\n}\n\nexport function defaultValueByType(type: keyof typeof TYPE_TO_CLASS): VariableValue {\n if (type === 'integer') {\n return bigIntZero;\n }\n if (type === 'boolean' || type === 'number') {\n return 0;\n }\n if (type === 'dict') {\n return {};\n }\n\n return '';\n}\n\nexport function variableToValue(variable: Variable): EvalValue {\n return {\n type: variable.getType(),\n value: variable.getValue()\n };\n}\n","<script lang=\"ts\">\n import { getContext, onMount } from 'svelte';\n\n import css from './Slider.module.css';\n\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivSliderData } from '../../types/slider';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { ACTION_CTX, ActionCtxValue } from '../../context/action';\n import { genClassName } from '../../utils/genClassName';\n import { correctDrawableStyle, DrawableStyle } from '../../utils/correctDrawableStyles';\n import { pxToEm, pxToEmWithUnits } from '../../utils/pxToEm';\n import { correctSliderTextStyle, TransformedSliderTextStyle } from '../../utils/correctSliderTextStyle';\n import { wrapError } from '../../utils/wrapError';\n import { isNonNegativeNumber } from '../../utils/isNonNegativeNumber';\n import { clamp } from '../../utils/clamp';\n import { correctNumber } from '../../utils/correctNumber';\n import Outer from '../utilities/Outer.svelte';\n import { createVariable } from '../../expressions/variable';\n import { debounce } from '../../utils/debounce';\n\n export let json: Partial<DivSliderData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const DEFAULT_DRAWABLE_STYLE: DrawableStyle = {\n width: 10,\n height: 10,\n borderRadius: 5,\n background: '#000'\n };\n\n const THUMB_MARK_SHAPES = ['rounded_rectangle', 'circle'];\n const TRACK_SHAPES = ['rounded_rectangle'];\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n const actionCtx = getContext<ActionCtxValue>(ACTION_CTX);\n let tracksInner: HTMLElement;\n let switchedTracks = false;\n\n $: jsonMinValue = rootCtx.getDerivedFromVars(json.min_value);\n $: jsonMaxValue = rootCtx.getDerivedFromVars(json.max_value);\n let minValue = 0;\n let maxValue = 100;\n $: {\n minValue = correctNumber($jsonMinValue, minValue);\n maxValue = correctNumber($jsonMaxValue, maxValue);\n checkTicks();\n }\n\n const firstVariable = json.thumb_value_variable;\n const secondVariable = json.thumb_secondary_value_variable;\n\n let valueVariable = firstVariable && rootCtx.getVariable(firstVariable, 'integer') || createVariable('temp', 'integer', 0);\n let value2Variable = secondVariable && rootCtx.getVariable(secondVariable, 'integer') || createVariable('temp', 'integer', 0);\n\n let value = clamp($valueVariable || 0, minValue, maxValue);\n let value2 = clamp($value2Variable || 0, minValue, maxValue);\n\n $: {\n const newVal = clamp($valueVariable || 0, minValue, maxValue);\n if (newVal !== value) {\n value = newVal;\n }\n }\n\n $: {\n const newVal2 = clamp($value2Variable || 0, minValue, maxValue);\n if (newVal2 !== value2) {\n value2 = newVal2;\n }\n }\n\n $: jsonThumbStyle = rootCtx.getDerivedFromVars(json.thumb_style);\n let thumbStyle = DEFAULT_DRAWABLE_STYLE;\n $: {\n thumbStyle = correctDrawableStyle($jsonThumbStyle, THUMB_MARK_SHAPES, thumbStyle);\n }\n\n $: jsonThumbSecondaryStyle = rootCtx.getDerivedFromVars(json.thumb_secondary_style);\n let thumbSecondaryStyle = thumbStyle;\n $: {\n thumbSecondaryStyle = correctDrawableStyle($jsonThumbSecondaryStyle, THUMB_MARK_SHAPES, thumbStyle);\n }\n\n $: jsonTrackInactiveStyle = rootCtx.getDerivedFromVars(json.track_inactive_style);\n let trackInactiveStyle = DEFAULT_DRAWABLE_STYLE;\n $: {\n trackInactiveStyle = correctDrawableStyle($jsonTrackInactiveStyle, TRACK_SHAPES, trackInactiveStyle);\n }\n\n $: jsonTrackActiveStyle = rootCtx.getDerivedFromVars(json.track_active_style);\n let trackActiveStyle = DEFAULT_DRAWABLE_STYLE;\n $: {\n trackActiveStyle = correctDrawableStyle($jsonTrackActiveStyle, TRACK_SHAPES, trackActiveStyle);\n }\n\n function fillTicks(from: number, to: number, minValue: number, maxValue: number, inside: boolean): number[] {\n let res: number[] = [];\n\n if (inside) {\n for (let i = from; i < to; ++i) {\n res.push((i - minValue) / (maxValue - minValue));\n }\n } else {\n for (let i = minValue; i < from; ++i) {\n res.push((i - minValue) / (maxValue - minValue));\n }\n for (let i = to; i < maxValue + 1; ++i) {\n res.push((i - minValue) / (maxValue - minValue));\n }\n }\n\n return res;\n }\n\n $: jsonMarkActiveStyle = rootCtx.getDerivedFromVars(json.tick_mark_active_style);\n let markActiveTicks: number[];\n let markActiveStyle: DrawableStyle | null = null;\n $: {\n let newStyle = correctDrawableStyle($jsonMarkActiveStyle, THUMB_MARK_SHAPES, DEFAULT_DRAWABLE_STYLE);\n\n if (newStyle !== DEFAULT_DRAWABLE_STYLE) {\n markActiveStyle = newStyle;\n }\n }\n $: if (markActiveStyle) {\n markActiveTicks = secondVariable ?\n fillTicks(Math.min(value, value2), Math.max(value, value2) + 1, minValue, maxValue, true) :\n fillTicks(minValue, value, minValue, maxValue, true);\n checkTicks();\n } else {\n markActiveTicks = [];\n }\n\n $: jsonMarkInactiveStyle = rootCtx.getDerivedFromVars(json.tick_mark_inactive_style);\n let markInactiveTicks: number[];\n let markInactiveStyle: DrawableStyle | null = null;\n $: {\n let newStyle = correctDrawableStyle($jsonMarkInactiveStyle, THUMB_MARK_SHAPES, DEFAULT_DRAWABLE_STYLE);\n\n if (newStyle !== DEFAULT_DRAWABLE_STYLE) {\n markInactiveStyle = newStyle;\n }\n }\n $: if (markInactiveStyle) {\n markInactiveTicks = secondVariable ?\n fillTicks(Math.min(value, value2), Math.max(value, value2) + 1, minValue, maxValue, false) :\n fillTicks(value + 1, maxValue + 1, minValue, maxValue, true);\n checkTicks();\n } else {\n markInactiveTicks = [];\n }\n\n $: jsonTextStyle = rootCtx.getDerivedFromVars(json.thumb_text_style);\n let textStyle: TransformedSliderTextStyle | undefined = undefined;\n $: {\n textStyle = correctSliderTextStyle($jsonTextStyle, textStyle);\n }\n\n $: jsonSecondaryTextStyle = rootCtx.getDerivedFromVars(json.thumb_secondary_text_style);\n let textSecondaryStyle: TransformedSliderTextStyle | undefined = textStyle;\n $: {\n textSecondaryStyle = correctSliderTextStyle($jsonSecondaryTextStyle, textStyle);\n }\n\n $: jsonAccessibility = rootCtx.getDerivedFromVars(json.accessibility);\n let description = '';\n $: if ($jsonAccessibility?.description) {\n description = $jsonAccessibility.description;\n } else {\n rootCtx.logError(wrapError(new Error('Missing accessibility \"description\" for slider'), {\n level: 'warn'\n }));\n }\n\n $: jsonSecondaryAccessibility = rootCtx.getDerivedFromVars(json.secondary_value_accessibility);\n let secondaryDescription = '';\n $: if ($jsonSecondaryAccessibility?.description) {\n secondaryDescription = $jsonSecondaryAccessibility.description;\n } else if (secondVariable) {\n rootCtx.logError(wrapError(new Error('Missing second accessibility \"description\" for slider'), {\n level: 'warn'\n }));\n }\n\n let hasError = false;\n $: {\n let newHasError = false;\n\n if (actionCtx.hasAction()) {\n rootCtx.logError(wrapError(new Error('Cannot show \"slider\" inside component with action')));\n newHasError = true;\n } else if (thumbStyle === DEFAULT_DRAWABLE_STYLE) {\n rootCtx.logError(wrapError(new Error('Missing \"thumb_style\" in slider')));\n newHasError = true;\n } else if (trackActiveStyle === DEFAULT_DRAWABLE_STYLE) {\n rootCtx.logError(wrapError(new Error('Missing \"track_active_style\" in slider')));\n newHasError = true;\n } else if (trackInactiveStyle === DEFAULT_DRAWABLE_STYLE) {\n rootCtx.logError(wrapError(new Error('Missing \"track_inactive_style\" in slider')));\n newHasError = true;\n }\n\n if (newHasError !== hasError) {\n hasError = newHasError;\n }\n }\n\n $: maxThumbWidth = pxToEm(Math.max(...[\n thumbStyle.width,\n thumbSecondaryStyle.width,\n 0,\n ].filter(isNonNegativeNumber)));\n $: maxThumbHeight = pxToEm(Math.max(...[\n thumbStyle.height,\n thumbSecondaryStyle.height,\n 0,\n ].filter(isNonNegativeNumber)));\n $: trackPart = (value - minValue) / (maxValue - minValue);\n $: trackSecondaryPart = secondVariable ? (value2 - minValue) / (maxValue - minValue) : undefined;\n $: trackActivePart = trackSecondaryPart !== undefined ? Math.abs(trackSecondaryPart - trackPart) : trackPart;\n $: trackActiveOffset = trackSecondaryPart !== undefined ? Math.min(trackSecondaryPart, trackPart) : 0;\n\n $: stl = {\n '--divkit-slider-thumb-width': pxToEm(thumbStyle.width),\n '--divkit-slider-thumb-height': pxToEm(thumbStyle.height),\n\n '--divkit-slider-thumb-secondary-width': pxToEm(thumbSecondaryStyle.width),\n '--divkit-slider-thumb-secondary-height': pxToEm(thumbSecondaryStyle.height),\n\n '--divkit-slider-text-offset-x': textStyle?.offset?.x ? pxToEmWithUnits(textStyle.offset.x) : undefined,\n '--divkit-slider-text-offset-y': textStyle?.offset?.y ? pxToEmWithUnits(textStyle.offset.y) : undefined,\n\n '--divkit-slider-text-secondary-offset-x': textSecondaryStyle?.offset?.x ? pxToEmWithUnits(textSecondaryStyle.offset.x) : undefined,\n '--divkit-slider-text-secondary-offset-y': textSecondaryStyle?.offset?.y ? pxToEmWithUnits(textSecondaryStyle.offset.y) : undefined,\n\n '--divkit-slider-tick-active-width': markActiveStyle ? pxToEm(markActiveStyle.width) : undefined,\n '--divkit-slider-tick-active-height': markActiveStyle ? pxToEm(markActiveStyle.height) : undefined,\n '--divkit-slider-tick-active-border-radius': markActiveStyle ? pxToEm(markActiveStyle.borderRadius) : undefined,\n '--divkit-slider-tick-active-background': markActiveStyle?.background || undefined,\n '--divkit-slider-tick-active-box-shadow': markActiveStyle?.boxShadow || undefined,\n\n '--divkit-slider-tick-inactive-width': markInactiveStyle ? pxToEm(markInactiveStyle.width) : undefined,\n '--divkit-slider-tick-inactive-height': markInactiveStyle ? pxToEm(markInactiveStyle.height) : undefined,\n '--divkit-slider-tick-inactive-border-radius': markInactiveStyle ?\n pxToEm(markInactiveStyle.borderRadius) :\n undefined,\n '--divkit-slider-tick-inactive-background': markInactiveStyle?.background || undefined,\n '--divkit-slider-tick-inactive-box-shadow': markInactiveStyle?.boxShadow || undefined,\n\n '--divkit-slider-max-thumb-width': maxThumbWidth,\n '--divkit-slider-max-thumb-height': maxThumbHeight,\n '--divkit-slider-track-part': trackPart,\n '--divkit-slider-track-secondary-part': trackSecondaryPart,\n };\n\n $: mods = {};\n\n function onSecondMousedown(event: MouseEvent | TouchEvent): void {\n const pageX = 'pageX' in event ? event.pageX : event.changedTouches?.[0]?.pageX;\n if (pageX === undefined) {\n return;\n }\n\n const rangeBbox = tracksInner.getBoundingClientRect();\n const part = (pageX - rangeBbox.left) / rangeBbox.width;\n const newVal = (maxValue - minValue) * part;\n const final = Math.round(clamp(newVal, minValue, maxValue));\n const middle = (value + value2) / 2;\n\n switchedTracks = final < middle === value < value2;\n }\n\n function onInputChange(event: Event, type: 'first' | 'second'): void {\n const val = Number((event.target as HTMLInputElement).value);\n\n if (switchedTracks === (type === 'first')) {\n value2 = val;\n value2Variable.setValue(val);\n } else {\n value = val;\n valueVariable.setValue(val);\n }\n }\n\n let isTicksWarning = false;\n\n function checkTicks() {\n if (!tracksInner) {\n return;\n }\n\n const ticksCount = maxValue - minValue;\n const activeTickWidth = markActiveStyle?.width || 0;\n const inactiveTickWidth = markInactiveStyle?.width || 0;\n const maxTickWidth = Math.max(activeTickWidth, inactiveTickWidth);\n\n if (maxTickWidth * ticksCount >= tracksInner?.clientWidth) {\n if (!isTicksWarning) {\n rootCtx.logError(wrapError(new Error('Slider ticks overlap each other'), {\n level: 'warn'\n }));\n isTicksWarning = true;\n }\n } else {\n isTicksWarning = false;\n }\n }\n\n const checkTicksDebounced = debounce(checkTicks, 50);\n\n onMount(() => {\n checkTicks();\n });\n</script>\n\n<svelte:window on:resize={checkTicksDebounced} />\n\n{#if !hasError}\n <Outer\n cls={genClassName('slider', css, mods)}\n style={stl}\n customDescription={true}\n customActions={'slider'}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n >\n <div class={css['slider__tracks-wrapper']}>\n <div class={css['slider__tracks-inner']} bind:this={tracksInner}>\n <div\n class={css.slider__track}\n style:height={pxToEm(trackInactiveStyle.height)}\n style:border-radius={pxToEm(trackInactiveStyle.borderRadius)}\n style:background={trackInactiveStyle.background}\n style:box-shadow={trackInactiveStyle.boxShadow || ''}\n ></div>\n <div\n class={css['slider__active-track']}\n style:left={(trackActiveOffset * 100).toFixed(2) + '%'}\n style:width={(trackActivePart * 100).toFixed(2) + '%'}\n style:height={pxToEm(trackActiveStyle.height)}\n style:border-radius={pxToEm(trackActiveStyle.borderRadius)}\n style:background={trackActiveStyle.background}\n style:box-shadow={trackActiveStyle.boxShadow || ''}\n ></div>\n {#each markActiveTicks as val}\n <div class=\"{css.slider__tick} {css.slider__tick_active}\" style:--divkit-slider-tick={val}></div>\n {/each}\n {#each markInactiveTicks as val}\n <div class=\"{css.slider__tick} {css.slider__tick_inactive}\" style:--divkit-slider-tick={val}></div>\n {/each}\n <div\n class={css.slider__thumb}\n style:border-radius={pxToEm(thumbStyle.borderRadius)}\n style:background={thumbStyle.background}\n style:box-shadow={thumbStyle.boxShadow || ''}\n >\n {#if textStyle}\n <div class={css['slider__thumb-text']}>\n <div\n class={css['slider__thumb-text-inner']}\n style:font-size={textStyle?.fontSize || '1em'}\n style:font-weight={textStyle?.fontWeight || ''}\n style:color={textStyle?.textColor || '#000'}\n >\n {value}\n </div>\n </div>\n {/if}\n </div>\n {#if secondVariable}\n <div\n class=\"{css.slider__thumb} {css.slider__thumb_secondary}\"\n style:border-radius={pxToEm(thumbSecondaryStyle.borderRadius)}\n style:background={thumbSecondaryStyle.background}\n style:box-shadow={thumbSecondaryStyle.boxShadow || ''}\n >\n {#if textSecondaryStyle}\n <div class=\"{css['slider__thumb-text']} {css['slider__thumb-text_secondary']}\">\n <div\n class={css['slider__thumb-text-inner']}\n style:font-size={textSecondaryStyle?.fontSize || '1em'}\n style:font-weight={textSecondaryStyle?.fontWeight || ''}\n style:color={textSecondaryStyle?.textColor || '#000'}\n >\n {value2}\n </div>\n </div>\n {/if}\n </div>\n {/if}\n <input\n type=\"range\"\n class={switchedTracks ? `${css.slider__input} ${css.slider__input_secondary}` : css.slider__input}\n min={minValue}\n max={maxValue}\n step=\"1\"\n value={switchedTracks ? value2 : value}\n aria-label={description}\n on:input={event => onInputChange(event, 'first')}\n >\n {#if secondVariable}\n <input\n type=\"range\"\n class={switchedTracks ? css.slider__input : `${css.slider__input} ${css.slider__input_secondary}`}\n min={minValue}\n max={maxValue}\n step=\"1\"\n value={switchedTracks ? value : value2}\n aria-label={secondaryDescription}\n on:input={event => onInputChange(event, 'second')}\n on:mousedown={secondVariable ? onSecondMousedown : null}\n on:touchstart={secondVariable ? onSecondMousedown : null}\n >\n {/if}\n </div>\n </div>\n </Outer>\n{/if}\n","// extracted by mini-css-extract-plugin\nexport default {\"input\":\"divkit-c3a4c\",\"input_alignment-horizontal_center\":\"divkit-fc52a\",\"input_alignment-horizontal_right\":\"divkit-e8038\",\"input__input\":\"divkit-f11e0\",\"input__placeholder\":\"divkit-b7593\",\"input_alignment-vertical_top\":\"divkit-bdccd\",\"input_alignment-vertical_bottom\":\"divkit-fc670\",\"input_alignment-vertical_baseline\":\"divkit-dd6af\",\"input_highlight-color\":\"divkit-cc00f\",\"input__input_singleline\":\"divkit-ffd1e\",\"input__scroll-wrapper\":\"divkit-ad8a3\",\"input__input_multiline\":\"divkit-f61f0\",\"input__input_has-custom-focus\":\"divkit-e6b50\"};","// Replicate from Android: client/android/div/src/main/java/com/yandex/div/core/util/mask/TextDiff.kt\n\nexport interface TextDiff {\n start: number;\n added: number;\n removed: number;\n}\n\nexport function textDiff(left: string, right: string): TextDiff {\n if (left === right) {\n return {\n start: left.length,\n added: 0,\n removed: 0\n };\n }\n\n if (left.length > right.length) {\n const diff = textDiff(right, left);\n\n return {\n start: diff.start,\n added: diff.removed,\n removed: diff.added\n };\n }\n\n let leftIndex = 0;\n let rightIndex = right.length - 1;\n const lengthDiff = right.length - left.length;\n\n while (\n leftIndex < rightIndex && leftIndex < left.length &&\n left[leftIndex] === right[leftIndex]\n ) {\n ++leftIndex;\n }\n\n while (\n rightIndex - lengthDiff >= leftIndex &&\n left[rightIndex - lengthDiff] === right[rightIndex]\n ) {\n --rightIndex;\n }\n\n ++rightIndex;\n\n return {\n start: leftIndex,\n added: rightIndex - leftIndex,\n removed: rightIndex - leftIndex - lengthDiff\n };\n}\n","// Replicate from Android: client/android/div/src/main/java/com/yandex/div/core/util/mask/BaseInputMask.kt\n\nimport type { WrappedError } from '../wrapError';\nimport { wrapError } from '../wrapError';\nimport { TextDiff, textDiff } from '../textDiff';\n\nexport interface MaskKey {\n key: string;\n filter?: string | undefined;\n placeholder: string;\n}\n\nexport interface MaskData {\n pattern: string;\n decoding: MaskKey[];\n alwaysVisible: boolean;\n}\n\ninterface MaskChar {\n char: string | null;\n}\n\nexport class MaskCharStatic implements MaskChar {\n constructor(public char: string) {}\n}\n\nexport class MaskCharDynamic implements MaskChar {\n constructor(public char: string | null, public filter: RegExp, public placeholder: string) {}\n}\n\nexport abstract class BaseInputMask {\n protected maskData: MaskData;\n protected filters: Map<string, RegExp> = new Map();\n protected destructedValue: MaskChar[] = [];\n protected cursorPos = 0;\n\n constructor(initialMaskData: MaskData) {\n this.maskData = initialMaskData;\n this.updateMaskData(initialMaskData);\n }\n\n get cursorPosition(): number {\n return this.cursorPos;\n }\n\n get rawValue(): string {\n return this.collectValueRange(0, this.destructedValue.length - 1);\n }\n\n get value(): string {\n let str = '';\n\n for (let i = 0; i < this.destructedValue.length; ++i) {\n const char = this.destructedValue[i];\n\n if (char instanceof MaskCharStatic) {\n str += char.char;\n } else if (char instanceof MaskCharDynamic) {\n if (char.char) {\n str += char.char;\n } else if (this.maskData.alwaysVisible) {\n str += char.placeholder;\n } else {\n break;\n }\n }\n }\n\n return str;\n }\n\n protected firstEmptyHolderIndex(): number {\n const index = this.destructedValue.findIndex(maskChar => {\n return maskChar instanceof MaskCharDynamic && !maskChar.char;\n });\n\n if (index !== -1) {\n return index;\n }\n\n return this.destructedValue.length;\n }\n\n abstract onException(exception: WrappedError): void;\n\n updateMaskData(newMaskData: MaskData, restoreValue = true): void {\n const previousRawValue = this.maskData !== newMaskData && restoreValue ? this.rawValue : null;\n\n this.filters = new Map();\n this.maskData = newMaskData;\n\n this.maskData.decoding.forEach(maskKey => {\n if (maskKey.filter) {\n try {\n const regexp = new RegExp(maskKey.filter);\n this.filters.set(maskKey.key, regexp);\n } catch (err) {\n this.onException(wrapError(err as Error, {\n level: 'error',\n additional: {\n key: maskKey.key\n }\n }));\n }\n }\n });\n\n this.destructedValue = this.maskData.pattern.split('').map(maskChar => {\n const mappingItem = this.maskData.decoding.find(it => it.key === maskChar);\n\n if (mappingItem) {\n return new MaskCharDynamic(\n null,\n this.filters.get(mappingItem.key) as RegExp,\n mappingItem.placeholder\n );\n }\n\n return new MaskCharStatic(maskChar);\n });\n\n if (previousRawValue !== null) {\n this.overrideRawValue(previousRawValue);\n }\n }\n\n overrideRawValue(newRawValue: string): void {\n this.clearRange(0, this.destructedValue.length);\n\n this.replaceChars(newRawValue, 0);\n\n this.cursorPos = Math.min(this.cursorPos, this.value.length);\n }\n\n applyChangeFrom(newValue: string, position?: number): void {\n const diff = textDiff(this.value, newValue);\n\n if (position !== undefined) {\n diff.start = Math.max(0, position - diff.added);\n }\n\n const body = this.buildBodySubstring(diff, newValue);\n const tail = this.buildTailSubstring(diff);\n\n this.cleanup(diff);\n\n const fehi = this.firstEmptyHolderIndex();\n\n const maxShift = this.calculateMaxShift(tail, fehi);\n\n this.replaceChars(body, fehi, maxShift);\n\n const tailStart = this.firstEmptyHolderIndex();\n\n this.replaceChars(tail, tailStart);\n\n this.calculateCursorPosition(diff, tailStart);\n }\n\n protected buildBodySubstring(diff: TextDiff, newValue: string): string {\n return newValue.substring(diff.start, diff.start + diff.added);\n }\n\n protected buildTailSubstring(diff: TextDiff): string {\n return this.collectValueRange(\n diff.start + diff.removed,\n this.destructedValue.length - 1\n );\n }\n\n protected calculateMaxShift(str: string, start: number): number {\n if (this.filters.size <= 1) {\n let dynamicLeft = 0;\n let index = start;\n\n while (index < this.destructedValue.length) {\n if (this.destructedValue[index] instanceof MaskCharDynamic) {\n ++dynamicLeft;\n }\n ++index;\n }\n\n return Math.max(0, dynamicLeft - str.length);\n }\n\n const initialInsertableSubstring = this.calculateInsertableSubstring(str, start);\n\n let index = 0;\n\n while (\n index < this.destructedValue.length &&\n initialInsertableSubstring === this.calculateInsertableSubstring(str, start + index)\n ) {\n ++index;\n }\n\n return Math.max(0, index - 1);\n }\n\n protected cleanup(diff: TextDiff): void {\n if (diff.added === 0 && diff.removed === 1) {\n let index = diff.start;\n\n while (index >= 0) {\n const maskChar = this.destructedValue[index];\n\n if (maskChar instanceof MaskCharDynamic && maskChar.char !== null) {\n maskChar.char = null;\n\n break;\n } else {\n --index;\n }\n }\n }\n\n this.clearRange(diff.start, this.destructedValue.length);\n }\n\n protected clearRange(start: number, end: number): void {\n let index = start;\n\n while (index < end && index < this.destructedValue.length) {\n const holder = this.destructedValue[index];\n\n if (holder instanceof MaskCharDynamic) {\n holder.char = null;\n }\n\n ++index;\n }\n }\n\n protected calculateCursorPosition(diff: TextDiff, tailStart: number) {\n const fehi = this.firstEmptyHolderIndex();\n\n let positionByDiff: number;\n if (diff.start < fehi) {\n positionByDiff = Math.min(this.firstHolderAfter(tailStart), this.value.length);\n } else {\n positionByDiff = fehi;\n }\n\n this.cursorPos = positionByDiff;\n }\n\n protected calculateInsertableSubstring(substring: string, start: number): string {\n let str = '';\n\n let index = start;\n\n const moveToAndGetNextHolderFilter: () => RegExp | undefined = () => {\n while (index < this.destructedValue.length && !(this.destructedValue[index] instanceof MaskCharDynamic)) {\n ++index;\n }\n\n return (this.destructedValue[index] as MaskCharDynamic)?.filter;\n };\n\n substring.split('').forEach(char => {\n const maskCharFilter = moveToAndGetNextHolderFilter();\n\n if (maskCharFilter?.test(char)) {\n str += char;\n ++index;\n }\n });\n\n return str;\n }\n\n protected collectValueRange(start: number, end: number): string {\n let str = '';\n\n let index = start;\n\n while (index <= end) {\n const maskChar = this.destructedValue[index];\n\n if (maskChar instanceof MaskCharDynamic && maskChar.char !== null) {\n str += maskChar.char;\n }\n\n ++index;\n }\n\n return str;\n }\n\n protected replaceChars(substring: string, start: number, count?: number): void {\n let trimmedSubstring = this.calculateInsertableSubstring(substring, start);\n if (count !== undefined) {\n trimmedSubstring = trimmedSubstring.substring(0, count);\n }\n\n let index = start;\n\n let insertableCharIndex = 0;\n\n while (index < this.destructedValue.length && insertableCharIndex < trimmedSubstring.length) {\n const maskChar = this.destructedValue[index];\n const char = trimmedSubstring[insertableCharIndex];\n\n if (maskChar instanceof MaskCharDynamic) {\n maskChar.char = char;\n\n ++insertableCharIndex;\n }\n\n ++index;\n }\n }\n\n protected firstHolderAfter(start: number): number {\n let index = start;\n\n while (index < this.destructedValue.length) {\n const holder = this.destructedValue[index];\n\n if (holder instanceof MaskCharDynamic) {\n break;\n } else {\n ++index;\n }\n }\n\n return index;\n }\n}\n","import type { LogError, WrappedError } from '../wrapError';\nimport { BaseInputMask, MaskData } from './baseInputMask';\n\nexport class FixedLengthInputMask extends BaseInputMask {\n constructor(initialMaskData: MaskData, private readonly logError: LogError) {\n super(initialMaskData);\n }\n\n onException(exception: WrappedError) {\n this.logError(exception);\n }\n}\n","import type { LogError, WrappedError } from '../wrapError';\nimport { BaseInputMask } from './baseInputMask';\nimport { TextDiff, textDiff } from '../textDiff';\nimport { wrapError } from '../wrapError';\n\nexport class CurrencyInputMask extends BaseInputMask {\n protected currencyFormatter = new Intl.NumberFormat();\n protected decimalSeparator = '.';\n protected localeDigits: Record<string, string> = {};\n protected trimZeroRegExp = new RegExp('');\n\n constructor(locale: string | undefined = undefined, private readonly logError: LogError) {\n super({\n pattern: '',\n decoding: [],\n alwaysVisible: false\n });\n this.initFormatter(locale);\n }\n\n updateCurrencyParams(locale?: string) {\n const currentValue = this.parseFormat(this.rawValue) || 0;\n this.initFormatter(locale);\n\n const newValue = currentValue.toString().replace('.', this.decimalSeparator);\n\n this.applyChangeFrom(newValue);\n }\n\n protected initFormatter(locale?: string): void {\n try {\n this.currencyFormatter = new Intl.NumberFormat(locale, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n });\n this.decimalSeparator = this.currencyFormatter.format(0)[1];\n this.localeDigits = new Array(10).fill('').reduce((acc, _, i) => {\n acc[i] = this.currencyFormatter.format(i)[0];\n return acc;\n }, {});\n this.trimZeroRegExp = new RegExp(`^${this.localeDigits['0']}+`);\n } catch (err) {\n this.onException(wrapError(err as Error, {\n level: 'error',\n additional: {\n locale\n }\n }));\n }\n }\n\n protected invalidateMaskDataForFormatted(forValue: number): void {\n const formatted = this.currencyFormatter.format(forValue);\n const pattern = this.formatPattern(formatted);\n const decoding = [{\n key: '#',\n filter: `[${[...Object.values(this.localeDigits)].join('')}]`,\n placeholder: this.localeDigits[0]\n }, {\n key: this.decimalSeparator,\n filter: `[${this.decimalSeparator}]`,\n placeholder: this.decimalSeparator\n }];\n\n this.updateMaskData({\n pattern,\n decoding,\n alwaysVisible: this.maskData.alwaysVisible\n }, false);\n }\n\n overrideRawValue(newRawValue: string): void {\n const parsed = this.parseFormat(newRawValue) || 0;\n\n this.invalidateMaskDataForFormatted(parsed);\n\n super.overrideRawValue(newRawValue);\n }\n\n applyChangeFrom(newValue: string, position?: number): void {\n const diff = textDiff(this.value, newValue);\n const oldSeparatorIndex = this.value.lastIndexOf(this.decimalSeparator);\n const newSeparatorIndex = newValue.lastIndexOf(this.decimalSeparator);\n const needInvalidateMask =\n oldSeparatorIndex !== newSeparatorIndex ||\n (oldSeparatorIndex === -1 && newSeparatorIndex === -1);\n const clearedValue = this.validFormat(newValue, diff);\n\n this.cleanup(diff);\n\n const rawValue = this.parseFormat(clearedValue) || 0;\n\n if (needInvalidateMask) {\n this.invalidateMaskDataForFormatted(rawValue);\n }\n\n this.replaceChars(clearedValue, 0);\n\n if (this.value.length > diff.start && !this.isDigit(this.value[diff.start])) {\n this.cursorPos = position ?? this.cursorPosition;\n } else {\n this.cursorPos = Math.abs(this.value.length - (newValue.length - (position ?? this.cursorPosition)));\n }\n }\n\n protected parseFormat(value: string): number {\n return parseFloat(\n value.replace(/./g, char => {\n const localeDigit = this.localeDigits[char];\n\n if (localeDigit) {\n return localeDigit;\n }\n\n if (char === this.decimalSeparator) {\n return '.';\n }\n\n return '';\n })\n );\n }\n\n protected formatPattern(pattern: string): string {\n let result = '';\n\n for (const char of pattern) {\n result += this.isDigit(char) ? '#' : char;\n }\n\n return result;\n }\n\n protected validFormat(value: string, diff: TextDiff): string {\n if (!value) {\n return '';\n }\n\n let separatorOutOfDiffIndex = -1;\n let index = 0;\n\n while (index < value.length) {\n if (value[index] === this.decimalSeparator && !this.inDiff(diff, index)) {\n separatorOutOfDiffIndex = index;\n break;\n }\n\n index++;\n }\n\n let replaceCharInDiff = -1;\n\n if (diff.added === 1 && diff.removed === 0 && [',', '.'].includes(value[diff.start])) {\n replaceCharInDiff = diff.start;\n }\n\n const maxSeparatorOffset = this.currencyFormatter.resolvedOptions().maximumFractionDigits;\n let leftToInsert = maxSeparatorOffset;\n\n if (separatorOutOfDiffIndex !== -1) {\n index = separatorOutOfDiffIndex;\n\n while (index < value.length) {\n if (this.isDigit(value[index]) && !this.inDiff(diff, index)) {\n leftToInsert--;\n }\n index++;\n }\n } else {\n let oldSeparatorLeft = false;\n\n for (let i = 0; i < value.length; i++) {\n const char = value[i];\n if (char === this.decimalSeparator) {\n oldSeparatorLeft = true;\n } else if (!this.inDiff(diff, i) && oldSeparatorLeft && this.isDigit(char)) {\n leftToInsert--;\n }\n }\n }\n\n const containsSeparator = value.includes(this.decimalSeparator) || replaceCharInDiff !== -1;\n const result: string[] = [];\n\n index = value.length - 1;\n let separatorInserted = false;\n\n while (index >= 0) {\n const char = value[index];\n const canInsertSeparator = result.length <= maxSeparatorOffset;\n\n if (this.isDigit(char)) {\n if (this.inDiff(diff, index) && !separatorInserted && containsSeparator) {\n if (leftToInsert > 0) {\n result.push(char);\n leftToInsert--;\n }\n } else {\n result.push(char);\n }\n } else if (canInsertSeparator && separatorOutOfDiffIndex === -1 && index === replaceCharInDiff) {\n result.push(this.decimalSeparator);\n separatorInserted = true;\n } else if (\n canInsertSeparator &&\n char === this.decimalSeparator &&\n (separatorOutOfDiffIndex === index || separatorOutOfDiffIndex === -1)\n ) {\n result.push(this.decimalSeparator);\n\n separatorInserted = true;\n separatorOutOfDiffIndex = index;\n }\n\n index--;\n }\n\n return result.reverse().join('').replace(this.trimZeroRegExp, '');\n }\n\n protected inDiff(diff: TextDiff, index: number): boolean {\n return diff.start <= index && index < diff.start + diff.added;\n }\n\n protected isDigit(char: string): boolean {\n return Boolean(this.localeDigits[char]);\n }\n\n onException(exception: WrappedError) {\n this.logError(exception);\n }\n}\n","const STRING_NODE_TYPE = 3;\n\nfunction countNodeChars(node: Node): number {\n const text = node.textContent;\n let res = 0;\n\n if (typeof text === 'string') {\n res += text.length;\n if (node instanceof HTMLElement && (node.tagName === 'DIV' || node.tagName === 'BR')) {\n ++res;\n }\n }\n\n return res;\n}\n\nexport function calcSelectionOffset(container: HTMLElement): number {\n try {\n let res = 0;\n const sel = window.getSelection();\n if (!sel) {\n return 0;\n }\n const range = sel.getRangeAt(0);\n let node: Node | undefined;\n if (range) {\n if (!range.collapsed) {\n return 0;\n }\n res += range.endOffset;\n node = range.endContainer;\n }\n\n if (node instanceof HTMLElement) {\n let sum = 0;\n for (let i = 0, len = Math.min(res, node.childNodes.length); i < len; ++i) {\n sum += countNodeChars(node.childNodes[i]);\n }\n res = sum;\n }\n\n while (node && node !== container) {\n const parent = node.parentNode;\n if (!parent) {\n return 0;\n }\n const index = Array.from(parent.childNodes).indexOf(node as ChildNode);\n for (let i = 0; i < index; ++i) {\n const child = parent.childNodes[i];\n res += countNodeChars(child);\n }\n if (node instanceof HTMLElement &&\n (\n node.tagName === 'DIV' && parent.childNodes[index - 1]?.nodeType === STRING_NODE_TYPE ||\n node.tagName === 'BR'\n )\n ) {\n ++res;\n }\n node = parent;\n }\n\n return res;\n } catch (err) {\n return 0;\n }\n}\n\nexport function setSelectionOffset(node: Node, offset: number): void {\n if (node.nodeType === STRING_NODE_TYPE) {\n try {\n const sel = window.getSelection();\n if (sel) {\n sel.removeAllRanges();\n const range = document.createRange();\n range.setStart(node, offset);\n range.setEnd(node, offset);\n sel.addRange(range);\n }\n } catch (err) {}\n return;\n }\n if (node instanceof HTMLElement && node.tagName === 'BR') {\n try {\n const sel = window.getSelection();\n if (sel) {\n sel.removeAllRanges();\n const range = document.createRange();\n const parent = node.parentNode as Node;\n const index = Array.from(parent.childNodes).indexOf(node) + 1;\n range.setStart(parent, index);\n range.setEnd(parent, index);\n sel.addRange(range);\n }\n } catch (err) {}\n return;\n }\n\n for (let i = 0, len = node.childNodes.length; i < len; ++i) {\n const child = node.childNodes[i];\n const count = countNodeChars(child);\n if (offset <= count) {\n setSelectionOffset(child, offset);\n return;\n }\n offset -= count;\n }\n}\n","<script lang=\"ts\">\n import { getContext, onMount, tick } from 'svelte';\n import type { HTMLAttributes } from 'svelte/elements';\n\n import css from './Input.module.css';\n\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivInputData, KeyboardType } from '../../types/input';\n import type { EdgeInsets } from '../../types/edgeInserts';\n import type { FixedLengthInputMask } from '../../utils/mask/fixedLengthInputMask';\n import type { MaybeMissing } from '../../expressions/json';\n import type { InputMask } from '../../types/input';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { genClassName } from '../../utils/genClassName';\n import { pxToEm, pxToEmWithUnits } from '../../utils/pxToEm';\n import { wrapError } from '../../utils/wrapError';\n import { correctColor } from '../../utils/correctColor';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { correctFontWeight } from '../../utils/correctFontWeight';\n import { isPositiveNumber } from '../../utils/isPositiveNumber';\n import { isNumber } from '../../utils/isNumber';\n import Outer from '../utilities/Outer.svelte';\n import { createVariable } from '../../expressions/variable';\n import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n import { correctEdgeInsertsObject } from '../../utils/correctEdgeInsertsObject';\n import { edgeInsertsToCss } from '../../utils/edgeInsertsToCss';\n import { makeStyle } from '../../utils/makeStyle';\n import { updateFixedMask } from '../../utils/updateFixedMask';\n import { BaseInputMask } from '../../utils/mask/baseInputMask';\n import { updateCurrencyMask } from '../../utils/updateCurrencyMask';\n import { CurrencyInputMask } from '../../utils/mask/currencyInputMask';\n import { correctAlignmentHorizontal } from '../../utils/correctAlignmentHorizontal';\n import { AlignmentHorizontal, AlignmentVertical } from '../../types/alignment';\n import { correctAlignmentVertical } from '../../utils/correctAlignmentVertical';\n import { calcSelectionOffset, setSelectionOffset } from '../../utils/contenteditable';\n\n export let json: Partial<DivInputData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n let input: HTMLInputElement | HTMLSpanElement;\n let isPressed = false;\n let inputMask: BaseInputMask | null = null;\n\n const variable = json.text_variable;\n const rawVariable = json.mask?.raw_text_variable;\n\n let hasError = false;\n if (!variable) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Missing \"text_variable\" in \"input\"')));\n }\n\n let valueVariable = variable && rootCtx.getVariable(variable, 'string') || createVariable('temp', 'string', '');\n let rawValueVariable = rawVariable && rootCtx.getVariable(rawVariable, 'string') || createVariable('temp', 'string', '');\n let value = '';\n let contentEditableValue = '';\n\n const jsonMask = rootCtx.getDerivedFromVars(json.mask);\n function updateMaskData(mask: MaybeMissing<InputMask> | undefined): void {\n if (mask?.type === 'fixed_length') {\n inputMask = updateFixedMask(mask, rootCtx.logError, inputMask as FixedLengthInputMask);\n } else if (mask?.type === 'currency') {\n inputMask = updateCurrencyMask(mask, rootCtx.logError, inputMask as CurrencyInputMask);\n }\n\n if (inputMask) {\n runRawValueMask();\n }\n }\n $: updateMaskData($jsonMask);\n\n $: if (!inputMask && value !== $valueVariable) {\n value = contentEditableValue = $valueVariable;\n }\n\n $: if (inputMask && inputMask.rawValue !== $rawValueVariable) {\n runRawValueMask();\n }\n\n const jsonHintText = rootCtx.getDerivedFromVars(json.hint_text);\n $: placeholder = $jsonHintText;\n\n const jsonHintColor = rootCtx.getDerivedFromVars(json.hint_color);\n let hintColor = '';\n $: {\n hintColor = correctColor($jsonHintColor, 1, hintColor);\n }\n\n const jsonFontSize = rootCtx.getDerivedFromVars(json.font_size);\n let fontSize = 12;\n $: {\n fontSize = correctPositiveNumber($jsonFontSize, fontSize);\n }\n\n const jsonFontWeight = rootCtx.getDerivedFromVars(json.font_weight);\n const jsonFontFamily = rootCtx.getDerivedFromVars(json.font_family);\n let fontWeight: number | undefined = undefined;\n let fontFamily = '';\n $: {\n fontWeight = correctFontWeight($jsonFontWeight, fontWeight);\n if ($jsonFontFamily && typeof $jsonFontFamily === 'string') {\n fontFamily = rootCtx.typefaceProvider($jsonFontFamily, {\n fontWeight: fontWeight || 400\n });\n } else {\n fontFamily = '';\n }\n }\n\n const jsonLineHeight = rootCtx.getDerivedFromVars(json.line_height);\n let lineHeight: number | undefined = undefined;\n $: {\n const val = $jsonLineHeight;\n if (isPositiveNumber(val)) {\n lineHeight = val / fontSize;\n }\n }\n\n const jsonLetterSpacing = rootCtx.getDerivedFromVars(json.letter_spacing);\n let letterSpacing = '';\n $: {\n if (isNumber($jsonLetterSpacing)) {\n letterSpacing = pxToEm($jsonLetterSpacing);\n }\n }\n\n const jsonTextColor = rootCtx.getDerivedFromVars(json.text_color);\n let textColor = '#000';\n $: {\n textColor = correctColor($jsonTextColor, 1, textColor);\n }\n\n const jsonHighlightColor = rootCtx.getDerivedFromVars(json.highlight_color);\n let highlightColor = '';\n $: {\n highlightColor = correctColor($jsonHighlightColor, 1, highlightColor);\n }\n\n const jsonAlignmentHorizontal = rootCtx.getDerivedFromVars(json.text_alignment_horizontal);\n let alignmentHorizontal: AlignmentHorizontal = 'left';\n $: {\n alignmentHorizontal = correctAlignmentHorizontal($jsonAlignmentHorizontal, alignmentHorizontal);\n }\n\n const jsonAlignmentVertical = rootCtx.getDerivedFromVars(json.text_alignment_vertical);\n let alignmentVertical: AlignmentVertical = 'center';\n $: {\n alignmentVertical = correctAlignmentVertical($jsonAlignmentVertical, alignmentVertical);\n }\n\n const jsonKeyboardType = rootCtx.getDerivedFromVars(json.keyboard_type);\n const KEYBOARD_MAP: Record<KeyboardType, string> = {\n email: 'email',\n number: 'number',\n phone: 'tel',\n single_line_text: 'text',\n multi_line_text: 'text',\n uri: 'url'\n };\n let keyboardType = 'multi_line_text';\n let inputType = 'text';\n const isSupportInputMode = document && 'inputMode' in document.createElement('input');\n let inputMode: HTMLAttributes<HTMLInputElement>['inputmode'] = undefined;\n $: {\n if ($jsonKeyboardType && $jsonKeyboardType in KEYBOARD_MAP) {\n inputType = KEYBOARD_MAP[$jsonKeyboardType as KeyboardType];\n keyboardType = $jsonKeyboardType;\n }\n\n if ($jsonMask?.type === 'currency') {\n inputType = isSupportInputMode ? 'text' : 'tel';\n inputMode = 'decimal';\n }\n }\n\n const jsonVisibleMaxLines = rootCtx.getDerivedFromVars(json.max_visible_lines);\n $: isMultiline = keyboardType === 'multi_line_text'/* && isPositiveNumber($jsonVisibleMaxLines) && $jsonVisibleMaxLines > 1*/;\n\n $: jsonPaddings = rootCtx.getDerivedFromVars(json.paddings);\n let maxHeight = '';\n let selfPadding: EdgeInsets | null = null;\n let padding = '';\n let verticalPadding = '';\n $: {\n if (isPositiveNumber($jsonVisibleMaxLines)) {\n maxHeight = `calc(${$jsonVisibleMaxLines * (lineHeight || 1.25) * (fontSize / 10) + 'em'} + ${pxToEmWithUnits(correctNonNegativeNumber($jsonPaddings?.top, 0) + correctNonNegativeNumber($jsonPaddings?.bottom, 0))})`;\n }\n selfPadding = correctEdgeInsertsObject(($jsonPaddings) ? $jsonPaddings : undefined, selfPadding);\n padding = selfPadding ? edgeInsertsToCss({\n top: (Number(selfPadding.top) || 0) / fontSize * 10,\n right: (Number(selfPadding.right) || 0) / fontSize * 10,\n bottom: (Number(selfPadding.bottom) || 0) / fontSize * 10,\n left: (Number(selfPadding.left) || 0) / fontSize * 10\n }) : '';\n verticalPadding = selfPadding ? edgeInsertsToCss({\n top: (Number(selfPadding.top) || 0) / fontSize * 10,\n bottom: (Number(selfPadding.bottom) || 0) / fontSize * 10\n }) : '';\n }\n\n $: jsonAccessibility = rootCtx.getDerivedFromVars(json.accessibility);\n let description = '';\n $: if ($jsonAccessibility?.description) {\n description = $jsonAccessibility.description;\n } else {\n rootCtx.logError(wrapError(new Error('Missing accessibility \"description\" for input'), {\n level: 'warn'\n }));\n }\n\n const jsonSelectAll = rootCtx.getDerivedFromVars(json.select_all_on_focus);\n\n $: mods = {\n 'highlight-color': Boolean(highlightColor),\n multiline: isMultiline,\n 'alignment-horizontal': alignmentHorizontal,\n 'alignment-vertical': alignmentVertical\n };\n $: stl = {\n '--divkit-input-hint-color': hintColor,\n '--divkit-input-highlight-color': highlightColor,\n '--divkit-input-line-height': lineHeight,\n 'font-weight': fontWeight,\n 'font-family': fontFamily,\n 'letter-spacing': letterSpacing,\n color: textColor,\n 'max-height': maxHeight\n };\n $: paddingStl = {\n 'font-size': pxToEm(fontSize),\n padding\n };\n $: verticalPaddingStl = {\n 'font-size': pxToEm(fontSize),\n padding: verticalPadding\n };\n\n function onInput(event: Event): void {\n let val = (isMultiline ?\n (event.target as HTMLDivElement).innerText :\n (event.target as HTMLInputElement).value\n ) || '';\n\n if (val === '\\n') {\n val = '';\n }\n\n if (value !== val) {\n value = contentEditableValue = val;\n valueVariable.setValue(val);\n if (inputMask) {\n runValueMask();\n }\n }\n }\n\n function onPaste(event: ClipboardEvent): void {\n event.preventDefault();\n if (event.clipboardData) {\n let text = event.clipboardData.getData('text/plain');\n text = text.trim();\n document.execCommand('inserttext', false, text);\n }\n }\n\n // Handle text selection\n function onMousedown() {\n isPressed = false;\n\n setTimeout(() => {\n isPressed = true;\n }, 250);\n }\n\n function onClick() {\n if (!isPressed) {\n if (input instanceof HTMLInputElement) {\n input.select();\n } else {\n const selection = window.getSelection();\n const range = document.createRange();\n range.selectNodeContents(input);\n if (selection) {\n selection.removeAllRanges();\n selection.addRange(range);\n }\n }\n }\n }\n\n function getSelectionEnd(): number | undefined {\n if (input instanceof HTMLInputElement) {\n return input.selectionEnd === null ? undefined : input.selectionEnd;\n }\n\n return calcSelectionOffset(input);\n }\n\n function setCursorPosition(cursorPosition: number): void {\n if (input instanceof HTMLInputElement) {\n input.selectionStart = input.selectionEnd = cursorPosition;\n } else {\n setSelectionOffset(input, cursorPosition);\n }\n }\n\n async function runValueMask(): Promise<void> {\n if (!input || !inputMask) {\n return;\n }\n\n inputMask.applyChangeFrom(value, getSelectionEnd());\n\n rawValueVariable.set(inputMask.rawValue);\n $valueVariable = value = contentEditableValue = inputMask.value;\n const cursorPosition = inputMask.cursorPosition;\n\n await tick();\n\n if (document.activeElement === input) {\n setCursorPosition(cursorPosition);\n }\n }\n\n async function runRawValueMask(): Promise<void> {\n if (!input || !inputMask) {\n return;\n }\n\n inputMask.overrideRawValue($rawValueVariable);\n\n rawValueVariable.set(inputMask.rawValue);\n $valueVariable = value = contentEditableValue = inputMask.value;\n const cursorPosition = inputMask.cursorPosition;\n\n await tick();\n\n if (document.activeElement === input) {\n setCursorPosition(cursorPosition);\n }\n }\n\n onMount(() => {\n if (input && inputMask) {\n if ($rawValueVariable) {\n inputMask.overrideRawValue($rawValueVariable);\n $valueVariable = value = contentEditableValue = inputMask.value;\n }\n }\n });\n</script>\n\n{#if !hasError}\n <Outer\n let:focusHandler\n let:blurHandler\n let:hasCustomFocus\n cls={genClassName('input', css, mods)}\n style={stl}\n customDescription={true}\n customActions={'input'}\n customPaddings={true}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n >\n {#if isMultiline}\n <span class={css['input__scroll-wrapper']}>\n {#if !contentEditableValue && placeholder}\n <div\n class={css.input__placeholder}\n aria-hidden=\"true\"\n style={makeStyle(paddingStl)}\n >\n {placeholder}\n </div>\n {/if}\n\n <!-- zero-width space, so other baseline-elements could be aligned without value -->\n <span\n aria-hidden=\"true\"\n style={makeStyle(verticalPaddingStl)}\n ></span>\n\n <!-- svelte-ignore a11y-click-events-have-key-events -->\n <!-- svelte-ignore a11y-no-static-element-interactions -->\n <span\n bind:this={input}\n class={genClassName('input__input', css, { 'has-custom-focus': hasCustomFocus, multiline: true })}\n autocapitalize=\"off\"\n contenteditable=\"true\"\n aria-label={description}\n style={makeStyle(paddingStl)}\n bind:innerText={contentEditableValue}\n on:input={onInput}\n on:paste={onPaste}\n on:mousedown={$jsonSelectAll ? onMousedown : undefined}\n on:click={$jsonSelectAll ? onClick : undefined}\n on:focus={focusHandler}\n on:blur={blurHandler}\n >\n </span>\n </span>\n {:else}\n <input\n bind:this={input}\n type={inputType}\n inputmode={inputMode}\n class={genClassName('input__input', css, { 'has-custom-focus': hasCustomFocus, singleline: true })}\n autocomplete=\"off\"\n autocapitalize=\"off\"\n aria-label={description}\n style={makeStyle(paddingStl)}\n {placeholder}\n {value}\n on:input={onInput}\n on:mousedown={$jsonSelectAll ? onMousedown : undefined}\n on:click={$jsonSelectAll ? onClick : undefined}\n on:focus={focusHandler}\n on:blur={blurHandler}\n >\n {/if}\n </Outer>\n{/if}\n","import type { LogError } from './wrapError';\nimport type { MaskData } from './mask/baseInputMask';\nimport { FixedLengthInputMask } from './mask/fixedLengthInputMask';\nimport { MaybeMissing } from '../expressions/json';\nimport { FixedLengthInputMask as FixedLengthInputMaskType } from '../types/input';\n\nexport function updateFixedMask(\n mask: MaybeMissing<FixedLengthInputMaskType>,\n logError: LogError,\n oldValue?: FixedLengthInputMask | null\n): FixedLengthInputMask | null {\n if (\n typeof mask.pattern === 'string' && Array.isArray(mask.pattern_elements) &&\n mask.pattern_elements.every(it => it.key && typeof it.key === 'string')\n ) {\n const maskData: MaskData = {\n pattern: mask.pattern,\n alwaysVisible: Boolean(mask.always_visible),\n decoding: mask.pattern_elements.map(it => ({\n key: it.key as string,\n filter: it.regex && typeof it.regex === 'string' ? it.regex : undefined,\n placeholder: it.placeholder && typeof it.placeholder === 'string' ? it.placeholder : '_'\n }))\n };\n\n if (oldValue) {\n oldValue.updateMaskData(maskData);\n return oldValue;\n }\n return new FixedLengthInputMask(maskData, logError);\n }\n\n return oldValue || null;\n}\n","import type { MaybeMissing } from '../expressions/json';\nimport { CurrencyInputMask } from './mask/currencyInputMask';\nimport { CurrencyInputMask as CurrencyInputMaskType } from '../types/input';\nimport type { LogError } from './wrapError';\n\nexport function updateCurrencyMask(\n mask: MaybeMissing<CurrencyInputMaskType>,\n logError: LogError,\n oldValue?: CurrencyInputMask | null\n): CurrencyInputMask | null {\n if (oldValue) {\n oldValue.updateCurrencyParams(mask.locale);\n return oldValue;\n }\n return new CurrencyInputMask(mask.locale, logError);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"select\":\"divkit-feef3\",\"select__select-text\":\"divkit-cd862\",\"select_hint\":\"divkit-a3cf6\",\"select__select\":\"divkit-bdb72\",\"select__select_has-custom-focused\":\"divkit-a46ad\",\"has-custom-focused\":\"divkit-fc5dc\",\"select__option\":\"divkit-e774b\"};","<script lang=\"ts\">\n import { getContext } from 'svelte';\n\n import css from './Select.module.css';\n\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { genClassName } from '../../utils/genClassName';\n import { pxToEm } from '../../utils/pxToEm';\n import { wrapError } from '../../utils/wrapError';\n import { correctColor } from '../../utils/correctColor';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { correctFontWeight } from '../../utils/correctFontWeight';\n import { isPositiveNumber } from '../../utils/isPositiveNumber';\n import { isNumber } from '../../utils/isNumber';\n import { createVariable } from '../../expressions/variable';\n import { DivSelectData } from '../../types/select';\n import { EdgeInsets } from '../../types/edgeInserts';\n import { correctEdgeInsertsObject } from '../../utils/correctEdgeInsertsObject';\n import { edgeInsertsToCss } from '../../utils/edgeInsertsToCss';\n import { makeStyle } from '../../utils/makeStyle';\n import Outer from '../utilities/Outer.svelte';\n\n export let json: Partial<DivSelectData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n const variable = json.value_variable;\n\n let hasError = false;\n if (!variable) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Missing \"value_variable\" in \"select\"')));\n }\n\n let valueVariable = variable && rootCtx.getVariable(variable, 'string') || createVariable('temp', 'string', '');\n let value = '';\n $: {\n value = $valueVariable as string;\n }\n\n const items = json.options;\n const filteredItems = Array.isArray(items) && items.filter(it => typeof it.value === 'string') || [];\n if (!(Array.isArray(filteredItems) && filteredItems.length)) {\n rootCtx.logError(wrapError(new Error('Empty selection \"items\" in \"select\"')));\n }\n\n let selectText = '';\n $: {\n const item = filteredItems.find(it => {\n return it.value === $valueVariable;\n });\n if (item) {\n selectText = typeof item.text === 'string' ? item.text : item.value;\n } else {\n selectText = '';\n if ($valueVariable) {\n rootCtx.logError(wrapError(new Error('Value from the variable was not found in the selection items for \"select\"')));\n }\n }\n }\n\n $: jsonPaddings = rootCtx.getDerivedFromVars(json.paddings);\n let selfPadding: EdgeInsets | null = null;\n let padding = '';\n $: {\n selfPadding = correctEdgeInsertsObject(($jsonPaddings) ? $jsonPaddings : undefined, selfPadding);\n padding = selfPadding ? edgeInsertsToCss({\n top: (Number(selfPadding.top) || 0) / fontSize * 10,\n right: (Number(selfPadding.right) || 0) / fontSize * 10,\n bottom: (Number(selfPadding.bottom) || 0) / fontSize * 10,\n left: (Number(selfPadding.left) || 0) / fontSize * 10\n }) : '';\n }\n\n const jsonHintText = rootCtx.getDerivedFromVars(json.hint_text);\n $: hint = $jsonHintText;\n\n const jsonHintColor = rootCtx.getDerivedFromVars(json.hint_color);\n let hintColor = 'rgba(0,0,0,.45)';\n $: {\n hintColor = correctColor($jsonHintColor, 1, hintColor);\n }\n\n const jsonFontSize = rootCtx.getDerivedFromVars(json.font_size);\n let fontSize = 12;\n $: {\n fontSize = correctPositiveNumber($jsonFontSize, fontSize);\n }\n\n const jsonFontWeight = rootCtx.getDerivedFromVars(json.font_weight);\n const jsonFontFamily = rootCtx.getDerivedFromVars(json.font_family);\n let fontWeight: number | undefined = undefined;\n let fontFamily = '';\n $: {\n fontWeight = correctFontWeight($jsonFontWeight, fontWeight);\n if ($jsonFontFamily && typeof $jsonFontFamily === 'string') {\n fontFamily = rootCtx.typefaceProvider($jsonFontFamily, {\n fontWeight: fontWeight || 400\n });\n } else {\n fontFamily = '';\n }\n }\n\n const jsonLineHeight = rootCtx.getDerivedFromVars(json.line_height);\n let lineHeight: number | undefined = undefined;\n $: {\n const val = $jsonLineHeight;\n if (isPositiveNumber(val)) {\n lineHeight = val / fontSize;\n }\n }\n\n const jsonLetterSpacing = rootCtx.getDerivedFromVars(json.letter_spacing);\n let letterSpacing = '';\n $: {\n if (isNumber($jsonLetterSpacing)) {\n letterSpacing = pxToEm($jsonLetterSpacing / fontSize * 10);\n }\n }\n\n const jsonTextColor = rootCtx.getDerivedFromVars(json.text_color);\n let textColor = '#000';\n $: {\n textColor = correctColor($jsonTextColor, 1, textColor);\n }\n\n $: jsonAccessibility = rootCtx.getDerivedFromVars(json.accessibility);\n let description = '';\n $: if ($jsonAccessibility?.description) {\n description = $jsonAccessibility.description;\n } else {\n rootCtx.logError(wrapError(new Error('Missing accessibility \"description\" for select'), {\n level: 'warn'\n }));\n }\n\n $: mods = {\n hint: !selectText\n };\n $: stl = {\n '--divkit-input-hint-color': hintColor,\n 'font-weight': fontWeight,\n 'font-family': fontFamily,\n color: textColor\n };\n $: innerStl = {\n padding,\n 'font-size': pxToEm(fontSize),\n 'line-height': lineHeight,\n 'letter-spacing': letterSpacing\n };\n $: selectStl = {\n 'font-size': pxToEm(fontSize),\n 'line-height': lineHeight,\n 'letter-spacing': letterSpacing\n };\n</script>\n\n{#if !hasError}\n <Outer\n let:hasCustomFocus\n let:focusHandler\n let:blurHandler\n cls={genClassName('select', css, mods)}\n style={stl}\n customDescription={true}\n customActions={'select'}\n customPaddings={true}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n >\n <span class={css['select__select-text']} style={makeStyle(innerStl)} aria-hidden=\"true\">\n <!--Space holder should have height even it has no value-->\n {selectText || hint || ''}\n </span>\n\n <select\n class={genClassName('select__select', css, { 'has-custom-focus': hasCustomFocus })}\n aria-label={description}\n bind:value={$valueVariable}\n style={makeStyle(selectStl)}\n on:focus={focusHandler}\n on:blur={blurHandler}\n >\n {#each filteredItems as item}\n <option class={css.select__option} value={item.value}>{item.text || item.value}</option>\n {/each}\n </select>\n </Outer>\n{/if}\n","// extracted by mini-css-extract-plugin\nexport default {\"video__video\":\"divkit-c11f9\"};","<script lang=\"ts\">\n import { getContext, onDestroy } from 'svelte';\n\n import css from './Video.module.css';\n\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivVideoData, VideoElements } from '../../types/video';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { wrapError } from '../../utils/wrapError';\n import { createVariable } from '../../expressions/variable';\n import { PreparedVideoSource, correctVideoSource } from '../../utils/correctVideoSource';\n import { correctBooleanInt } from '../../utils/correctBooleanInt';\n import Outer from '../utilities/Outer.svelte';\n import { prepareBase64 } from '../../utils/prepareBase64';\n\n export let json: Partial<DivVideoData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n let hasError = false;\n let isSelfVariableSet = false;\n let videoElem: HTMLVideoElement;\n\n const jsonSource = rootCtx.getDerivedFromVars(json.video_sources);\n let sources: PreparedVideoSource[] = [];\n\n $: {\n sources = correctVideoSource($jsonSource, sources);\n\n if (sources.length) {\n hasError = false;\n } else {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Missing \"video_sources\" in \"video\"')));\n }\n }\n\n const jsonRepeatable = rootCtx.getDerivedFromVars(json.repeatable);\n let loop = false;\n $: loop = correctBooleanInt($jsonRepeatable, loop);\n\n const jsonAutostart = rootCtx.getDerivedFromVars(json.autostart);\n let autoplay = false;\n $: autoplay = correctBooleanInt($jsonAutostart, autoplay);\n\n const jsonMuted = rootCtx.getDerivedFromVars(json.muted);\n let muted = false;\n $: muted = correctBooleanInt($jsonMuted, muted);\n\n const jsonPreview = rootCtx.getDerivedFromVars(json.preview);\n let poster: string | undefined = undefined;\n $: poster = typeof $jsonPreview === 'string' ? prepareBase64($jsonPreview) : poster;\n\n const elapsedVariableName = json.elapsed_time_variable;\n let elapsedVariable = elapsedVariableName && rootCtx.getVariable(elapsedVariableName, 'integer') || createVariable('temp', 'integer', 0);\n\n elapsedVariable.subscribe(val => {\n if (isSelfVariableSet) {\n isSelfVariableSet = false;\n return;\n }\n if (videoElem) {\n videoElem.currentTime = Number(val) / 1000;\n }\n });\n\n if (json.id && !hasError && !layoutParams?.fakeElement) {\n rootCtx.registerInstance<VideoElements>(json.id, {\n pause() {\n videoElem?.pause();\n },\n start() {\n const res = videoElem?.play();\n if (res) {\n res.catch(err => {\n rootCtx.logError(wrapError(new Error('Video playing error'), {\n level: 'error',\n additional: {\n originalText: String(err)\n }\n }));\n });\n }\n }\n });\n }\n\n function onTimeUpdate(): void {\n if (videoElem) {\n isSelfVariableSet = true;\n elapsedVariable.setValue(Math.floor(videoElem.currentTime * 1000));\n }\n }\n\n function onEnd(): void {\n const actions = rootCtx.getJsonWithVars(json.end_actions);\n rootCtx.execAnyActions(actions);\n }\n\n function onPlaying(): void {\n const actions = rootCtx.getJsonWithVars(json.resume_actions);\n rootCtx.execAnyActions(actions);\n }\n\n function onPause(): void {\n const actions = rootCtx.getJsonWithVars(json.pause_actions);\n rootCtx.execAnyActions(actions);\n }\n\n function onWaiting(): void {\n const actions = rootCtx.getJsonWithVars(json.buffering_actions);\n rootCtx.execAnyActions(actions);\n }\n\n function onError(): void {\n const actions = rootCtx.getJsonWithVars(json.fatal_actions);\n rootCtx.execAnyActions(actions);\n }\n\n onDestroy(() => {\n if (json.id && !hasError && !layoutParams?.fakeElement) {\n rootCtx.unregisterInstance(json.id);\n }\n });\n</script>\n\n{#if !hasError}\n <Outer\n cls={css.video}\n customActions={'video'}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n >\n <video\n bind:this={videoElem}\n class={css.video__video}\n playsinline\n {loop}\n {autoplay}\n {muted}\n {poster}\n on:timeupdate={onTimeUpdate}\n on:ended={onEnd}\n on:playing={onPlaying}\n on:pause={onPause}\n on:waiting={onWaiting}\n on:error={onError}\n >\n {#each sources as source}\n <source src={source.src} type={source.type} on:error={onError}>\n {/each}\n </video>\n </Outer>\n{/if}\n","import type { MaybeMissing } from '../expressions/json';\nimport type { VideoSource } from '../types/video';\n\nexport interface PreparedVideoSource {\n src: string;\n type?: string;\n}\n\nexport function correctVideoSource(\n data: MaybeMissing<VideoSource>[] | undefined,\n defaultValue: PreparedVideoSource[]\n): PreparedVideoSource[] {\n if (Array.isArray(data) && data.length) {\n return data.filter(it => {\n return it?.type === 'video_source' && typeof it.url === 'string' && typeof it.mime_type === 'string';\n }).map(it => {\n const res: PreparedVideoSource = {\n src: it.url as string\n };\n\n if (it.mime_type) {\n res.type = it.mime_type;\n }\n\n return res;\n });\n }\n\n return defaultValue;\n}\n","import type { ComponentType } from 'svelte';\nimport Text from './text/Text.svelte';\nimport Container from './container/Container.svelte';\nimport Separator from './separator/Separator.svelte';\nimport Image from './image/Image.svelte';\nimport Grid from './grid/Grid.svelte';\nimport Gallery from './gallery/Gallery.svelte';\nimport Tabs from './tabs/Tabs.svelte';\nimport State from './state/State.svelte';\nimport Pager from './pager/Pager.svelte';\nimport Indicator from './indicator/Indicator.svelte';\nimport Slider from './slider/Slider.svelte';\nimport Input from './input/Input.svelte';\nimport Select from './select/Select.svelte';\nimport Video from './video/Video.svelte';\n\nexport const TYPE_MAP: Record<string, ComponentType> = {};\n\nif (process.env.ENABLE_COMPONENT_TEXT || process.env.ENABLE_COMPONENT_TEXT === undefined) {\n TYPE_MAP.text = Text;\n}\n\nif (process.env.ENABLE_COMPONENT_CONTAINER || process.env.ENABLE_COMPONENT_CONTAINER === undefined) {\n TYPE_MAP.container = Container;\n}\n\nif (process.env.ENABLE_COMPONENT_SEPARATOR || process.env.ENABLE_COMPONENT_SEPARATOR === undefined) {\n TYPE_MAP.separator = Separator;\n}\n\nif (process.env.ENABLE_COMPONENT_IMAGE || process.env.ENABLE_COMPONENT_IMAGE === undefined) {\n TYPE_MAP.image = Image;\n}\n\nif (process.env.ENABLE_COMPONENT_GIF || process.env.ENABLE_COMPONENT_GIF === undefined) {\n TYPE_MAP.gif = Image;\n}\n\nif (process.env.ENABLE_COMPONENT_GRID || process.env.ENABLE_COMPONENT_GRID === undefined) {\n TYPE_MAP.grid = Grid;\n}\n\nif (process.env.ENABLE_COMPONENT_GALLERY || process.env.ENABLE_COMPONENT_GALLERY === undefined) {\n TYPE_MAP.gallery = Gallery;\n}\n\nif (process.env.ENABLE_COMPONENT_TABS || process.env.ENABLE_COMPONENT_TABS === undefined) {\n TYPE_MAP.tabs = Tabs;\n}\n\nif (process.env.ENABLE_COMPONENT_STATE || process.env.ENABLE_COMPONENT_STATE === undefined) {\n TYPE_MAP.state = State;\n}\n\nif (process.env.ENABLE_COMPONENT_PAGER || process.env.ENABLE_COMPONENT_PAGER === undefined) {\n TYPE_MAP.pager = Pager;\n}\n\nif (process.env.ENABLE_COMPONENT_INDICATOR || process.env.ENABLE_COMPONENT_INDICATOR === undefined) {\n TYPE_MAP.indicator = Indicator;\n}\n\nif (process.env.ENABLE_COMPONENT_SLIDER || process.env.ENABLE_COMPONENT_SLIDER === undefined) {\n TYPE_MAP.slider = Slider;\n}\n\nif (process.env.ENABLE_COMPONENT_INPUT || process.env.ENABLE_COMPONENT_INPUT === undefined) {\n TYPE_MAP.input = Input;\n}\n\nif (process.env.ENABLE_COMPONENT_SELECT || process.env.ENABLE_COMPONENT_SELECT === undefined) {\n TYPE_MAP.select = Select;\n}\n\nif (process.env.ENABLE_COMPONENT_VIDEO || process.env.ENABLE_COMPONENT_VIDEO === undefined) {\n TYPE_MAP.video = Video;\n}\n","<script lang=\"ts\">\n import { getContext } from 'svelte';\n import type { SvelteComponent } from 'svelte';\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivBaseData } from '../../types/base';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { wrapError } from '../../utils/wrapError';\n import { TYPE_MAP } from '../typeMap';\n\n export let div: DivBaseData;\n export let templateContext: TemplateContext;\n export let origJson: DivBaseData | DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n let childJson: DivBaseData;\n let childContext: TemplateContext;\n\n let component: typeof SvelteComponent | undefined;\n\n $: {\n childJson = div;\n childContext = templateContext;\n\n component = childJson && TYPE_MAP[childJson.type] || undefined;\n\n if (!component) {\n ({\n templateContext: childContext,\n json: childJson\n } = rootCtx.processTemplate(childJson, childContext));\n\n component = childJson && TYPE_MAP[childJson.type] || undefined;\n if (!component) {\n let error: string;\n if (childJson?.type && rootCtx.hasTemplate(childJson.type)) {\n error = 'Recursive template';\n } else {\n error = 'Unknown component';\n }\n\n rootCtx.logError(wrapError(new Error(error), {\n additional: {\n component: childJson?.type || '<missing>'\n }\n }));\n }\n }\n }\n</script>\n\n{#if component}\n <svelte:component\n this={component}\n json={childJson}\n templateContext={childContext}\n {layoutParams}\n origJson={origJson || div}\n />\n{/if}\n","<script lang=\"ts\">\n import css from './RootSvgFilters.module.css';\n\n export let svgFiltersMap: Record<string, string>;\n</script>\n\n{#if Object.keys(svgFiltersMap).length}\n <svg\n class={css['root-svg-filters']}\n aria-hidden=\"true\"\n >\n <defs>\n {#each [...Object.keys(svgFiltersMap)] as filterKey}\n {@const [filterColor, filterMode] = filterKey.split(':')}\n <filter id={svgFiltersMap[filterKey]}>\n <feFlood flood-color={filterColor} />\n\n {#if filterMode === 'source_in' || filterMode === 'source_atop'}\n <feComposite in2=\"SourceGraphic\" operator={filterMode.split('_')[1]} />\n {:else if filterMode === 'multiply'}\n <feComposite in2=\"SourceGraphic\" operator=\"arithmetic\" k1=\"1\" k2=\"0\" k3=\"0\" k4=\"0\" />\n {:else}\n <feBlend in2=\"SourceGraphic\" mode={filterMode} />\n {/if}\n </filter>\n {/each}\n </defs>\n </svg>\n{/if}\n","// extracted by mini-css-extract-plugin\nexport default {\"root-svg-filters\":\"divkit-dc22b\"};","import { wrapError, WrappedError } from './wrapError';\nimport type { DivBase, TemplateContext } from '../../typings/common';\nimport type { DivBaseData } from '../types/base';\n\nexport function applyTemplate<T extends DivBase>(\n json: T,\n templateContext: TemplateContext,\n templates: Record<string, unknown>,\n logError: (error: WrappedError) => void\n): {\n json: T;\n templateContext: TemplateContext;\n};\nexport function applyTemplate(\n json: DivBaseData,\n templateContext: TemplateContext,\n templates: Record<string, unknown>,\n logError: (error: WrappedError) => void\n): {\n json: DivBaseData;\n templateContext: TemplateContext;\n} {\n const template = templates[json.type];\n\n if (!template) {\n logError(wrapError(new Error('No such template'), {\n additional: {\n template: json.type\n }\n }));\n\n return {\n json,\n templateContext\n };\n }\n\n let i;\n const newContext: TemplateContext = {};\n\n for (i in templateContext) {\n if (templateContext.hasOwnProperty(i)) {\n newContext[i] = templateContext[i];\n }\n }\n\n for (i in json) {\n if (i === 'type' || i === '__proto__') {\n continue;\n }\n\n if (json.hasOwnProperty(i)) {\n newContext[i] = json[i as keyof typeof json];\n }\n }\n\n function copyTemplated(base: any, extender: any) {\n const keys = Object.keys(extender).filter(key => key !== '__proto__');\n const simpleKeys = keys.filter(key => key.charAt(0) !== '$');\n const templateKeys = keys.filter(key => key.charAt(0) === '$');\n\n simpleKeys.forEach(key => {\n const item = extender[key];\n\n if (typeof item === 'object' && item !== null) {\n base[key] = Array.isArray(item) ? [] : {};\n copyTemplated(base[key], item);\n } else {\n base[key] = item;\n }\n });\n\n templateKeys.forEach(key => {\n const item = extender[key];\n\n const val = newContext[item];\n\n if (val !== undefined) {\n const prop = key.substring(1);\n base[prop] = val;\n }\n });\n\n return base;\n }\n\n const newJson = copyTemplated({}, template);\n\n for (i in json) {\n if (i === 'type' || i === '__proto__') {\n continue;\n }\n\n if (json.hasOwnProperty(i)) {\n newJson[i] = json[i as keyof typeof json];\n }\n }\n\n return {\n json: newJson,\n templateContext: newContext\n };\n}\n","import type { Readable } from 'svelte/store';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction voidUnsubscribe() {\n}\n\nexport function constStore<T>(val: T): Readable<T> {\n return {\n subscribe(cb) {\n cb(val);\n return voidUnsubscribe;\n }\n };\n}\n","// Generated by Peggy 3.0.2.\n//\n// https://peggyjs.org/\n\n\n import { MAX_INT, MIN_INT } from './const';\n import { toBigInt } from './bigint';\n\n function buildBinaryExpression(head, tail) {\n return tail.reduce((result, element) => {\n return {\n type: 'BinaryExpression',\n operator: element[1],\n left: result,\n right: element[3]\n };\n }, head);\n }\n\n function buildLogicalExpression(head, tail) {\n return tail.reduce((result, element) => {\n return {\n type: 'LogicalExpression',\n operator: element[1],\n left: result,\n right: element[3]\n };\n }, head);\n }\n\n function buildString(list) {\n if (list.every(it => typeof it === 'string')) {\n return {type: 'StringLiteral', value: list.join('')};\n }\n let res = list.reduce((result, element) => {\n if (typeof element === 'string' && typeof result[result.length - 1] === 'string') {\n result[result.length - 1] += element;\n } else {\n result.push(element);\n }\n return result;\n }, []).reduce((result, element) => {\n if (typeof element === 'string') {\n result.quasis.push({type: 'StringLiteral', value: element});\n } else {\n if (result.quasis.length === result.expressions.length) {\n result.quasis.push({type: 'StringLiteral', value: ''});\n }\n result.expressions.push(element);\n }\n return result;\n }, {\n type: 'TemplateLiteral',\n quasis: [],\n expressions: []\n });\n\n if (res.quasis.length === res.expressions.length) {\n res.quasis.push({type: 'StringLiteral', value: ''});\n }\n\n return res;\n }\n\n function convertToInt64(str) {\n try {\n return toBigInt(str);\n } catch (_err) {\n throw new Error(`Value ${str} can't be converted to Integer type.`);\n }\n }\n\n function escapeChar(char) {\n if (char === \"'\" || char === '\\\\') {\n return char;\n }\n throw new Error('Incorrect string escape');\n }\n\nfunction peg$subclass(child, parent) {\n function C() { this.constructor = child; }\n C.prototype = parent.prototype;\n child.prototype = new C();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n // istanbul ignore next Check is a necessary evil to support older environments\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\nfunction peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) { return str; }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n}\n\npeg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var offset_s = (this.location.source && (typeof this.location.source.offset === \"function\"))\n ? this.location.source.offset(s)\n : s;\n var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", offset_s.line.toString().length, ' ');\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = (last - s.column) || 1;\n str += \"\\n --> \" + loc + \"\\n\"\n + filler + \" |\\n\"\n + offset_s.line + \" | \" + line + \"\\n\"\n + filler + \" | \" + peg$padEnd(\"\", s.column - 1, ' ')\n + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n};\n\npeg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n },\n\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part)\n ? classEscape(part[0]) + \"-\" + classEscape(part[1])\n : classEscape(part);\n });\n\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n\n any: function() {\n return \"any character\";\n },\n\n end: function() {\n return \"end of input\";\n },\n\n other: function(expectation) {\n return expectation.description;\n }\n };\n\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, \"\\\\\\\"\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function classEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\]/g, \"\\\\]\")\n .replace(/\\^/g, \"\\\\^\")\n .replace(/-/g, \"\\\\-\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n var descriptions = expected.map(describeExpectation);\n var i, j;\n\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n\n default:\n return descriptions.slice(0, -1).join(\", \")\n + \", or \"\n + descriptions[descriptions.length - 1];\n }\n }\n\n function describeFound(found) {\n return found ? \"\\\"\" + literalEscape(found) + \"\\\"\" : \"end of input\";\n }\n\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n};\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n\n var peg$startRuleFunctions = { start: peg$parsestart, JsonStringContents: peg$parseJsonStringContents };\n var peg$startRuleFunction = peg$parsestart;\n\n var peg$c0 = \"@{\";\n var peg$c1 = \"}\";\n var peg$c2 = \"@{}\";\n var peg$c3 = \"\\\\\";\n var peg$c4 = \"?\";\n var peg$c5 = \":\";\n var peg$c6 = \"||\";\n var peg$c7 = \"&&\";\n var peg$c8 = \"==\";\n var peg$c9 = \"!=\";\n var peg$c10 = \">=\";\n var peg$c11 = \">\";\n var peg$c12 = \"<=\";\n var peg$c13 = \"<\";\n var peg$c14 = \"+\";\n var peg$c15 = \"-\";\n var peg$c16 = \"/\";\n var peg$c17 = \"*\";\n var peg$c18 = \"%\";\n var peg$c19 = \"!\";\n var peg$c20 = \"(\";\n var peg$c21 = \")\";\n var peg$c22 = \",\";\n var peg$c23 = \"'\";\n var peg$c24 = \".\";\n var peg$c25 = \"e\";\n var peg$c26 = \"E\";\n var peg$c27 = \"true\";\n var peg$c28 = \"false\";\n\n var peg$r0 = /^[^}]/;\n var peg$r1 = /^[^'}]/;\n var peg$r2 = /^[0-9]/;\n var peg$r3 = /^[a-zA-Z_0-9.]/;\n var peg$r4 = /^[a-zA-Z_]/;\n var peg$r5 = /^[ \\t\\r\\n]/;\n\n var peg$e0 = peg$literalExpectation(\"@{\", false);\n var peg$e1 = peg$literalExpectation(\"}\", false);\n var peg$e2 = peg$literalExpectation(\"@{}\", false);\n var peg$e3 = peg$literalExpectation(\"\\\\\", false);\n var peg$e4 = peg$anyExpectation();\n var peg$e5 = peg$classExpectation([\"}\"], true, false);\n var peg$e6 = peg$literalExpectation(\"?\", false);\n var peg$e7 = peg$literalExpectation(\":\", false);\n var peg$e8 = peg$literalExpectation(\"||\", false);\n var peg$e9 = peg$literalExpectation(\"&&\", false);\n var peg$e10 = peg$literalExpectation(\"==\", false);\n var peg$e11 = peg$literalExpectation(\"!=\", false);\n var peg$e12 = peg$literalExpectation(\">=\", false);\n var peg$e13 = peg$literalExpectation(\">\", false);\n var peg$e14 = peg$literalExpectation(\"<=\", false);\n var peg$e15 = peg$literalExpectation(\"<\", false);\n var peg$e16 = peg$literalExpectation(\"+\", false);\n var peg$e17 = peg$literalExpectation(\"-\", false);\n var peg$e18 = peg$literalExpectation(\"/\", false);\n var peg$e19 = peg$literalExpectation(\"*\", false);\n var peg$e20 = peg$literalExpectation(\"%\", false);\n var peg$e21 = peg$literalExpectation(\"!\", false);\n var peg$e22 = peg$literalExpectation(\"(\", false);\n var peg$e23 = peg$literalExpectation(\")\", false);\n var peg$e24 = peg$literalExpectation(\",\", false);\n var peg$e25 = peg$otherExpectation(\"string\");\n var peg$e26 = peg$literalExpectation(\"'\", false);\n var peg$e27 = peg$classExpectation([\"'\", \"}\"], true, false);\n var peg$e28 = peg$otherExpectation(\"integer\");\n var peg$e29 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n var peg$e30 = peg$otherExpectation(\"number\");\n var peg$e31 = peg$literalExpectation(\".\", false);\n var peg$e32 = peg$literalExpectation(\"e\", false);\n var peg$e33 = peg$literalExpectation(\"E\", false);\n var peg$e34 = peg$otherExpectation(\"boolean\");\n var peg$e35 = peg$literalExpectation(\"true\", false);\n var peg$e36 = peg$literalExpectation(\"false\", false);\n var peg$e37 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], \"_\", [\"0\", \"9\"], \".\"], false, false);\n var peg$e38 = peg$otherExpectation(\"identifier\");\n var peg$e39 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], \"_\"], false, false);\n var peg$e40 = peg$otherExpectation(\"whitespace\");\n var peg$e41 = peg$classExpectation([\" \", \"\\t\", \"\\r\", \"\\n\"], false, false);\n\n var peg$f0 = function(expr) { return expr; };\n var peg$f1 = function(list) { return buildString(list); };\n var peg$f2 = function(expr) { return expr; };\n var peg$f3 = function() { return ''; };\n var peg$f4 = function() { return text(); };\n var peg$f5 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n var peg$f6 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n var peg$f7 = function(str) { return str; };\n var peg$f8 = function(char) { return escapeChar(char); };\n var peg$f9 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n var peg$f10 = function(expr, first, second) { return {type: 'ConditionalExpression', test: expr, consequent: first, alternate: second}; };\n var peg$f11 = function(head, tail) { return buildLogicalExpression(head, tail); };\n var peg$f12 = function(head, tail) { return buildLogicalExpression(head, tail); };\n var peg$f13 = function(head, tail) { return buildBinaryExpression(head, tail); };\n var peg$f14 = function(head, tail) { return buildBinaryExpression(head, tail); };\n var peg$f15 = function(head, tail) { return buildBinaryExpression(head, tail); };\n var peg$f16 = function(head, tail) { return buildBinaryExpression(head, tail); };\n var peg$f17 = function(op, expr) { return {type: 'UnaryExpression', operator: op, argument: expr}; };\n var peg$f18 = function(id, args) { return {type: 'CallExpression', callee: id, arguments: args}; };\n var peg$f19 = function(id) { return {type: 'Variable', id}; };\n var peg$f20 = function(expr, list) { return [expr, ...list]; };\n var peg$f21 = function(expr) { return expr; };\n var peg$f22 = function(str) { return str; };\n var peg$f23 = function(list) { return buildString(list); };\n var peg$f24 = function(expr) { return expr; };\n var peg$f25 = function() { return ''; };\n var peg$f26 = function() { return text(); };\n var peg$f27 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n var peg$f28 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n var peg$f29 = function(str) { return str; };\n var peg$f30 = function(char) { return escapeChar(char); };\n var peg$f31 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n var peg$f32 = function() { return {type: 'IntegerLiteral', value: convertToInt64(text())}; };\n var peg$f33 = function() { return {type: 'NumberLiteral', value: parseFloat(text())}; };\n var peg$f34 = function() { return {type: 'NumberLiteral', value: parseFloat(text())}; };\n var peg$f35 = function() { return {type: 'BooleanLiteral', value: true}; };\n var peg$f36 = function() { return {type: 'BooleanLiteral', value: false}; };\n var peg$f37 = function() { return {type: 'Identifier', name: text()}; };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n\n var peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function offset() {\n return peg$savedPos;\n }\n\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: \"literal\", text: text, ignoreCase: ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n }\n\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n\n function peg$otherExpectation(description) {\n return { type: \"other\", description: description };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n\n return details;\n }\n }\n\n function peg$computeLocation(startPos, endPos, offset) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n\n var res = {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n if (offset && peg$source && (typeof peg$source.offset === \"function\")) {\n res.start = peg$source.offset(res.start);\n res.end = peg$source.offset(res.end);\n }\n return res;\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found),\n expected,\n found,\n location\n );\n }\n\n function peg$parsestart() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n s2 = peg$parseExpression();\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n peg$savedPos = s0;\n s0 = peg$f0(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseJsonStringContents() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseJsonStringChar();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseJsonStringChar();\n }\n peg$savedPos = s0;\n s1 = peg$f1(s1);\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseJsonStringChar() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n s3 = peg$parseExpression();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c1;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f2(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 3) === peg$c2) {\n s1 = peg$c2;\n peg$currPos += 3;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f3();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 92) {\n s2 = peg$c3;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s2 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s2 = peg$c0;\n peg$currPos += 2;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = undefined;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f4();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e5); }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e5); }\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f6();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s2 = peg$c0;\n peg$currPos += 2;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f7(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f8(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f9();\n }\n s0 = s1;\n }\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseExpression() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n\n s0 = peg$currPos;\n s1 = peg$parseOr();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 63) {\n s3 = peg$c4;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e6); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n s5 = peg$parseExpression();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 58) {\n s7 = peg$c5;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e7); }\n }\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n s9 = peg$parseExpression();\n if (s9 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f10(s1, s5, s9);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseOr();\n }\n\n return s0;\n }\n\n function peg$parseOr() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseAnd();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c6) {\n s5 = peg$c6;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseAnd();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c6) {\n s5 = peg$c6;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseAnd();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f11(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseAnd() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseEqual();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c7) {\n s5 = peg$c7;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e9); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseEqual();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c7) {\n s5 = peg$c7;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e9); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseEqual();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f12(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseEqual() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseComparison();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c8) {\n s5 = peg$c8;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e10); }\n }\n if (s5 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c9) {\n s5 = peg$c9;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e11); }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseComparison();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c8) {\n s5 = peg$c8;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e10); }\n }\n if (s5 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c9) {\n s5 = peg$c9;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e11); }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseComparison();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f13(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseComparison() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseSum();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c10) {\n s5 = peg$c10;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e12); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 62) {\n s5 = peg$c11;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e13); }\n }\n if (s5 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c12) {\n s5 = peg$c12;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e14); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 60) {\n s5 = peg$c13;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e15); }\n }\n }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseSum();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c10) {\n s5 = peg$c10;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e12); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 62) {\n s5 = peg$c11;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e13); }\n }\n if (s5 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c12) {\n s5 = peg$c12;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e14); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 60) {\n s5 = peg$c13;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e15); }\n }\n }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseSum();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f14(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseSum() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseFactor();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 43) {\n s5 = peg$c14;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s5 = peg$c15;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseFactor();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 43) {\n s5 = peg$c14;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s5 = peg$c15;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseFactor();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f15(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseFactor() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseUnary();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 47) {\n s5 = peg$c16;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e18); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 42) {\n s5 = peg$c17;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e19); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 37) {\n s5 = peg$c18;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e20); }\n }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseUnary();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 47) {\n s5 = peg$c16;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e18); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 42) {\n s5 = peg$c17;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e19); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 37) {\n s5 = peg$c18;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e20); }\n }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseUnary();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f16(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseUnary() {\n var s0, s1, s2, s3;\n\n s0 = peg$parseNumber();\n if (s0 === peg$FAILED) {\n s0 = peg$parseInteger();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 33) {\n s1 = peg$c19;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e21); }\n }\n if (s1 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 43) {\n s1 = peg$c14;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n if (s1 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n s3 = peg$parseUnary();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseCall();\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseCall() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 40) {\n s3 = peg$c20;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e22); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n s5 = peg$parseArguments();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 41) {\n s7 = peg$c21;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e23); }\n }\n if (s7 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f18(s1, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f19(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$parsePrimaryExpression();\n }\n }\n\n return s0;\n }\n\n function peg$parseArguments() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseExpression();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c22;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e24); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseExpression();\n if (s7 !== peg$FAILED) {\n s3 = s7;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c22;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e24); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseExpression();\n if (s7 !== peg$FAILED) {\n s3 = s7;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f20(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parse_();\n }\n\n return s0;\n }\n\n function peg$parsePrimaryExpression() {\n var s0, s1, s2, s3;\n\n s0 = peg$parseString();\n if (s0 === peg$FAILED) {\n s0 = peg$parseNumber();\n if (s0 === peg$FAILED) {\n s0 = peg$parseInteger();\n if (s0 === peg$FAILED) {\n s0 = peg$parseBoolean();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 40) {\n s1 = peg$c20;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e22); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseExpression();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s3 = peg$c21;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e23); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f21(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseString() {\n var s0, s1, s2, s3;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 39) {\n s1 = peg$c23;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e26); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseStringContents();\n if (input.charCodeAt(peg$currPos) === 39) {\n s3 = peg$c23;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e26); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f22(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e25); }\n }\n\n return s0;\n }\n\n function peg$parseStringContents() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseStringChar();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseStringChar();\n }\n peg$savedPos = s0;\n s1 = peg$f23(s1);\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseStringChar() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n s3 = peg$parseExpression();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c1;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f24(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 3) === peg$c2) {\n s1 = peg$c2;\n peg$currPos += 3;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f25();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 92) {\n s2 = peg$c3;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s2 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 39) {\n s2 = peg$c23;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e26); }\n }\n if (s2 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s2 = peg$c0;\n peg$currPos += 2;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = undefined;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f26();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e27); }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e27); }\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f27();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f28();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s2 = peg$c0;\n peg$currPos += 2;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f29(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f30(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f31();\n }\n s0 = s1;\n }\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseInteger() {\n var s0, s1, s2, s3;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f32();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e28); }\n }\n\n return s0;\n }\n\n function peg$parseNumber() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n }\n if (input.charCodeAt(peg$currPos) === 46) {\n s3 = peg$c24;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e31); }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s5 !== peg$FAILED) {\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n }\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 101) {\n s6 = peg$c25;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e32); }\n }\n if (s6 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 69) {\n s6 = peg$c26;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e33); }\n }\n }\n if (s6 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 43) {\n s7 = peg$c14;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n if (s7 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s7 = peg$c15;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n }\n if (s7 === peg$FAILED) {\n s7 = null;\n }\n s8 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s9 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s9 !== peg$FAILED) {\n while (s9 !== peg$FAILED) {\n s8.push(s9);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s9 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n }\n } else {\n s8 = peg$FAILED;\n }\n if (s8 !== peg$FAILED) {\n s6 = [s6, s7, s8];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f33();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 101) {\n s3 = peg$c25;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e32); }\n }\n if (s3 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 69) {\n s3 = peg$c26;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e33); }\n }\n }\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 43) {\n s4 = peg$c14;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n if (s4 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s4 = peg$c15;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n }\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n s5 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s6 !== peg$FAILED) {\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n }\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f34();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e30); }\n }\n\n return s0;\n }\n\n function peg$parseBoolean() {\n var s0, s1;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c27) {\n s1 = peg$c27;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e35); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f35();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c28) {\n s1 = peg$c28;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e36); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f36();\n }\n s0 = s1;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e34); }\n }\n\n return s0;\n }\n\n function peg$parseReservedWord() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c27) {\n s1 = peg$c27;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e35); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c28) {\n s1 = peg$c28;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e36); }\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n peg$silentFails++;\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e37); }\n }\n peg$silentFails--;\n if (s3 === peg$FAILED) {\n s2 = undefined;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseIdentifier() {\n var s0, s1, s2, s3, s4;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n s2 = peg$parseReservedWord();\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = undefined;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (peg$r4.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e39); }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e37); }\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e37); }\n }\n }\n peg$savedPos = s0;\n s0 = peg$f37();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e38); }\n }\n\n return s0;\n }\n\n function peg$parse_() {\n var s0, s1;\n\n peg$silentFails++;\n s0 = [];\n if (peg$r5.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e41); }\n }\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$r5.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e41); }\n }\n }\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e40); }\n\n return s0;\n }\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length\n ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n}\n\nexport {\n peg$SyntaxError as SyntaxError,\n\n peg$parse as parse\n};\n","import type { EvalTypes, EvalValue } from '../eval';\nimport type { EvalContext } from '../eval';\n\nexport type FuncArg = EvalTypes | {\n type: EvalTypes;\n isVararg?: boolean;\n}\n\nexport interface Func {\n args: FuncArg[];\n cb(ctx: EvalContext, ...args: EvalValue[]): EvalValue;\n}\n\nexport const funcs: Map<string, Func[]> = new Map();\nexport const funcByArgs: Map<string, Func> = new Map();\n\ntype FuncMatchError = {\n type: 'mismatch';\n expected: EvalTypes;\n found: EvalTypes;\n} | {\n type: 'few';\n expected: number;\n found: number;\n} | {\n type: 'many';\n expected: number;\n found: number;\n} | {\n type: 'missing';\n};\n\n// no args\nexport function registerFunc(name: string, args: [], cb: (ctx?: EvalContext) => EvalValue): void;\n// one specific arg\nexport function registerFunc<\n A0 extends EvalTypes\n>(\n name: string,\n args: [A0],\n cb: (\n ctx: EvalContext,\n arg0: Extract<EvalValue, { type: A0 }>\n ) => EvalValue\n): void;\n// two specific args\nexport function registerFunc<\n A0 extends EvalTypes,\n A1 extends EvalTypes\n>(\n name: string,\n args: [A0, A1],\n cb: (\n ctx: EvalContext,\n arg0: Extract<EvalValue, { type: A0 }>,\n arg1: Extract<EvalValue, { type: A1 }>\n ) => EvalValue\n): void;\n// three specific args\nexport function registerFunc<\n A0 extends EvalTypes,\n A1 extends EvalTypes,\n A2 extends EvalTypes\n>(\n name: string,\n args: [A0, A1, A2],\n cb: (\n ctx: EvalContext,\n arg0: Extract<EvalValue, { type: A0 }>,\n arg1: Extract<EvalValue, { type: A1 }>,\n arg2: Extract<EvalValue, { type: A2 }>\n ) => EvalValue\n): void;\n// any args\nexport function registerFunc(\n name: string,\n args: FuncArg[],\n cb: (ctx: EvalContext, ...args: any[]) => EvalValue\n): void;\n\nexport function registerFunc(\n name: string,\n args: FuncArg[],\n cb: (ctx: EvalContext, ...args: EvalValue[]) => EvalValue\n): void {\n const desc: Func = {\n args,\n cb\n };\n\n const arr = funcs.get(name) || [];\n\n if (!funcs.has(name)) {\n funcs.set(name, arr);\n }\n arr.push(desc);\n\n const funcKey = name + ':' + args.map(it => {\n if (typeof it === 'object') {\n return it.type;\n }\n return it;\n }).join('#');\n\n funcByArgs.set(funcKey, desc);\n}\n\nfunction matchFuncArgs(func: Func, args: EvalValue[]): {\n type: 'match';\n} | FuncMatchError {\n let minArgs = func.args.length;\n let maxArgs = func.args.length;\n const lastArg = func.args[func.args.length - 1];\n\n if (typeof lastArg === 'object' && lastArg.isVararg) {\n --minArgs;\n maxArgs = Infinity;\n }\n\n if (args.length < minArgs) {\n return {\n type: 'few',\n expected: minArgs,\n found: args.length\n };\n } else if (args.length > maxArgs) {\n return {\n type: 'many',\n expected: maxArgs,\n found: args.length\n };\n }\n\n for (let i = 0; i < args.length; ++i) {\n let funcArg = i >= func.args.length ? func.args[func.args.length - 1] : func.args[i];\n if (typeof funcArg !== 'object') {\n funcArg = {\n type: funcArg\n };\n }\n\n if (funcArg.type !== args[i].type) {\n return {\n type: 'mismatch',\n expected: funcArg.type,\n found: args[i].type\n };\n }\n }\n\n return {\n type: 'match'\n };\n}\n\nexport function findBestMatchedFunc(funcName: string, args: EvalValue[]): Func | FuncMatchError {\n const list = funcs.get(funcName);\n if (!list) {\n return {\n type: 'missing'\n };\n }\n\n let firstError: FuncMatchError | null = null;\n for (let i = 0; i < list.length; ++i) {\n const match = matchFuncArgs(list[i], args);\n if (match.type === 'match') {\n return list[i];\n }\n if (!firstError) {\n firstError = match;\n }\n }\n\n if (!firstError) {\n throw new Error('Missing function');\n }\n\n return firstError;\n}\n","import { Node } from './ast';\n\nexport function walk(ast: Node, visitors: {\n [Type in Node['type']]?: (node: Extract<Node, { type: Type }>) => void;\n}): void {\n visitors[ast.type]?.(ast as any);\n\n switch (ast.type) {\n case 'TemplateLiteral':\n ast.expressions.forEach(item => {\n walk(item, visitors);\n });\n break;\n case 'BinaryExpression':\n case 'LogicalExpression':\n walk(ast.left, visitors);\n walk(ast.right, visitors);\n break;\n case 'UnaryExpression':\n walk(ast.argument, visitors);\n break;\n case 'ConditionalExpression':\n walk(ast.test, visitors);\n walk(ast.consequent, visitors);\n walk(ast.alternate, visitors);\n break;\n case 'CallExpression':\n ast.arguments.forEach(item => {\n walk(item, visitors);\n });\n break;\n }\n}\n","import type { EvalContext, EvalValue, EvalValueBase } from './eval';\nimport type { Node, Variable } from './ast';\nimport type { EvalTypes } from './eval';\nimport type { VariablesMap } from './eval';\nimport { walk } from './walk';\nimport { parseColor, ParsedColor } from '../utils/correctColor';\nimport { padLeft } from '../utils/padLeft';\nimport { hasBigInt, MAX_INT, MIN_INT, toBigInt } from './bigint';\n\nexport function valToInternal(val: EvalValue): EvalValue {\n if (val.type === 'url' || val.type === 'color') {\n return {\n type: 'string',\n value: val.value\n };\n }\n\n return val;\n}\n\nexport function dateToString(date: Date): string {\n return date\n .toISOString()\n .replace('T', ' ')\n .replace(/\\.\\d{3}Z$/, '');\n}\n\nexport function valToString(val: EvalValue): string {\n if (val.type === 'string') {\n return val.value;\n } else if (val.type === 'integer') {\n return String(val.value);\n } else if (val.type === 'number') {\n let res = String(val.value);\n\n if (!res.includes('.')) {\n if (res.includes('e')) {\n res = res.replace('e', '.0e');\n } else {\n res += '.0';\n }\n }\n\n res = res.replace(/e\\+?/i, 'E');\n\n return res;\n } else if (val.type === 'boolean') {\n return val.value ? 'true' : 'false';\n } else if (val.type === 'datetime') {\n return dateToString(val.value);\n } else if (val.type === 'color') {\n return stringifyColor(safeConvertColor(val.value));\n } else if (val.type === 'url') {\n return val.value;\n } else if (val.type === 'dict') {\n return '<dict>';\n }\n\n // For purpose when new eval value types will be added\n throw new Error(`Unexpected type ${(val as EvalValueBase).type}`);\n}\n\nexport function valToPreview(val: EvalValue): string {\n let res = valToString(val);\n\n if (val.type === 'string') {\n res = \"'\" +\n res\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/'/g, '\\\\\\'') +\n \"'\";\n }\n\n return res;\n}\n\nexport function typeToString(type: EvalTypes): string {\n if (type === 'datetime') {\n return 'DateTime';\n }\n return type.charAt(0).toUpperCase() + type.substring(1);\n}\n\nexport function roundInteger(ctx: EvalContext, val: number | bigint): number | bigint {\n if (hasBigInt) {\n return toBigInt(val);\n }\n\n if (val < 0) {\n const res = -Math.floor(-val as number);\n if (res === 0) {\n // -0 => 0\n return 0;\n }\n return res;\n }\n\n return Math.floor(val as number);\n}\n\nexport function checkIntegerOverflow(ctx: EvalContext, val: number | bigint): void {\n if (val < MIN_INT || val > MAX_INT) {\n throw new Error('Integer overflow.');\n }\n\n if (!hasBigInt && (val > Number.MAX_SAFE_INTEGER || val < Number.MIN_SAFE_INTEGER)) {\n ctx.safeIntegerOverflow = true;\n }\n}\n\nexport function gatherVarsFromAst(ast: Node): string[] {\n const res: string[] = [];\n\n walk(ast, {\n Variable(node: Variable): void {\n res.push(node.id.name);\n }\n });\n\n return res;\n}\n\nexport function evalError(msg: string, details: string): never {\n throw new Error(`Failed to evaluate [${msg}]. ${details}`);\n}\n\nexport function containsUnsetVariables(ast: Node, variables: VariablesMap): boolean {\n let result = false;\n\n walk(ast, {\n Variable(node: Variable): void {\n if (!variables.has(node.id.name)) {\n result = true;\n }\n }\n });\n\n return result;\n}\n\nexport function safeConvertColor(color: string): ParsedColor {\n const res = parseColor(color);\n\n if (res) {\n return res;\n }\n\n throw new Error('Unable to convert value to Color, expected format #AARRGGBB.');\n}\n\nexport function stringifyColor(color: ParsedColor): string {\n return `#${[color.a, color.r, color.g, color.b].map(it => {\n if (it < 0 || it > 255) {\n throw new Error('Value out of range 0..1.');\n }\n\n return padLeft(Math.round(it).toString(16), 2);\n }).join('').toUpperCase()}`;\n}\n\nexport function transformColorValue(color: string): string {\n return stringifyColor(safeConvertColor(color));\n}\n","export const MAX_INT32 = 2147483647;\nexport const MIN_INT32 = -2147483648;\n\nexport const MAX_NUMBER = Number.MAX_VALUE;\nexport const MIN_NUMBER = Number.MIN_VALUE;\n\nexport const STRING = 'string';\nexport const INTEGER = 'integer';\nexport const NUMBER = 'number';\nexport const BOOLEAN = 'boolean';\nexport const COLOR = 'color';\nexport const URL = 'url';\nexport const DATETIME = 'datetime';\nexport const DICT = 'dict';\n","import type {\n BooleanValue,\n ColorValue,\n EvalContext,\n EvalValue,\n IntegerValue,\n NumberValue,\n StringValue,\n UrlValue\n} from '../eval';\nimport type { VariableType, VariableValue } from '../variable';\nimport { registerFunc } from './funcs';\nimport { BOOLEAN, COLOR, INTEGER, NUMBER, STRING, URL } from '../const';\nimport { transformColorValue, valToString } from '../utils';\nimport { MAX_INT, MIN_INT, toBigInt } from '../bigint';\n\nfunction toString(\n _ctx: EvalContext,\n arg: IntegerValue | NumberValue | BooleanValue | ColorValue | UrlValue\n): EvalValue {\n return {\n type: STRING,\n value: valToString(arg)\n };\n}\n\n\nfunction toNumber(_ctx: EvalContext, arg: IntegerValue | StringValue): EvalValue {\n const num = Number(arg.value);\n\n if (isNaN(num) || !Number.isFinite(num)) {\n throw new Error('Unable to convert value to Number.');\n }\n\n return {\n type: NUMBER,\n value: num\n };\n}\n\n\nfunction toIntegerNumber(_ctx: EvalContext, arg: NumberValue): EvalValue {\n if (arg.value > MAX_INT || arg.value < MIN_INT) {\n throw new Error('Unable to convert value to Integer.');\n }\n\n const num = arg.value - (arg.value % 1);\n\n return {\n type: INTEGER,\n value: toBigInt(num)\n };\n}\n\nfunction toIntegerString(_ctx: EvalContext, arg: StringValue): EvalValue {\n let num: number | bigint;\n try {\n num = toBigInt(arg.value);\n } catch (err) {\n throw new Error('Unable to convert value to Integer.');\n }\n\n if (\n (typeof num === 'number' && (isNaN(num) || num % 1 !== 0)) ||\n num > MAX_INT ||\n num < MIN_INT\n ) {\n throw new Error('Unable to convert value to Integer.');\n }\n\n return {\n type: INTEGER,\n value: num\n };\n}\n\nfunction toIntegerBoolean(_ctx: EvalContext, arg: BooleanValue): EvalValue {\n return {\n type: INTEGER,\n value: toBigInt(arg.value ? 1 : 0)\n };\n}\n\n\nfunction toBooleanInteger(_ctx: EvalContext, arg: IntegerValue): EvalValue {\n const intVal = Number(arg.value);\n if (intVal !== 1 && intVal !== 0) {\n throw new Error('Unable to convert value to Boolean.');\n }\n\n return {\n type: BOOLEAN,\n value: intVal\n };\n}\n\nfunction toBooleanString(_ctx: EvalContext, arg: StringValue): EvalValue {\n if (arg.value !== 'true' && arg.value !== 'false') {\n throw new Error('Unable to convert value to Boolean.');\n }\n\n return {\n type: BOOLEAN,\n value: arg.value === 'true' ? 1 : 0\n };\n}\n\nfunction toColor(_ctx: EvalContext, arg: StringValue): EvalValue {\n return {\n type: COLOR,\n value: transformColorValue(arg.value)\n };\n}\n\nfunction toUrl(_ctx: EvalContext, arg: StringValue): EvalValue {\n return {\n type: URL,\n value: arg.value\n };\n}\n\nfunction encodeUri(_ctx: EvalContext, str: StringValue): EvalValue {\n try {\n return {\n type: STRING,\n value: encodeURIComponent(str.value)\n };\n } catch (_err) {\n throw new Error('Unable to encodeUri string.');\n }\n}\n\nfunction decodeUri(_ctx: EvalContext, str: StringValue): EvalValue {\n try {\n return {\n type: STRING,\n value: decodeURIComponent(str.value)\n };\n } catch (_err) {\n throw new Error('Unable to decodeUri string.');\n }\n}\n\nfunction getValueForced(\n ctx: EvalContext,\n varName: StringValue,\n fallback: IntegerValue | NumberValue | StringValue | BooleanValue | UrlValue | ColorValue,\n type: VariableType\n): EvalValue {\n const variable = ctx.variables.get(varName.value);\n let value: VariableValue;\n\n if (variable && variable.getType() === type) {\n value = variable.getValue();\n } else {\n value = fallback.value;\n }\n\n if (type === 'color') {\n value = transformColorValue(value as string);\n }\n\n return {\n type,\n // value is synced with type by params\n value: value as any\n };\n}\n\nfunction getValue(\n ctx: EvalContext,\n varName: StringValue,\n fallback: IntegerValue | NumberValue | StringValue | BooleanValue | UrlValue | ColorValue\n): EvalValue {\n return getValueForced(ctx, varName, fallback, fallback.type);\n}\n\nfunction getColorValue(\n ctx: EvalContext,\n varName: StringValue,\n fallback: IntegerValue | NumberValue | StringValue | BooleanValue | UrlValue | ColorValue\n) {\n return getValueForced(ctx, varName, fallback, 'color');\n}\n\nfunction getUrlValue(\n ctx: EvalContext,\n varName: StringValue,\n fallback: IntegerValue | NumberValue | StringValue | BooleanValue | UrlValue | ColorValue\n) {\n return getValueForced(ctx, varName, fallback, 'url');\n}\n\nexport function registerStd(): void {\n registerFunc('toString', [INTEGER], toString);\n registerFunc('toString', [NUMBER], toString);\n registerFunc('toString', [BOOLEAN], toString);\n registerFunc('toString', [COLOR], toString);\n registerFunc('toString', [URL], toString);\n\n registerFunc('toNumber', [INTEGER], toNumber);\n registerFunc('toNumber', [STRING], toNumber);\n\n registerFunc('toInteger', [NUMBER], toIntegerNumber);\n registerFunc('toInteger', [STRING], toIntegerString);\n registerFunc('toInteger', [BOOLEAN], toIntegerBoolean);\n\n registerFunc('toBoolean', [INTEGER], toBooleanInteger);\n registerFunc('toBoolean', [STRING], toBooleanString);\n\n registerFunc('toColor', [STRING], toColor);\n\n registerFunc('toUrl', [STRING], toUrl);\n\n registerFunc('encodeUri', [STRING], encodeUri);\n registerFunc('decodeUri', [STRING], decodeUri);\n\n registerFunc('getIntegerValue', [STRING, INTEGER], getValue);\n registerFunc('getNumberValue', [STRING, NUMBER], getValue);\n registerFunc('getBooleanValue', [STRING, BOOLEAN], getValue);\n registerFunc('getStringValue', [STRING, STRING], getValue);\n registerFunc('getColorValue', [STRING, COLOR], getColorValue);\n registerFunc('getColorValue', [STRING, STRING], getColorValue);\n registerFunc('getUrlValue', [STRING, URL], getUrlValue);\n registerFunc('getUrlValue', [STRING, STRING], getUrlValue);\n}\n","import type { DatetimeValue, EvalContext, EvalValue, IntegerValue } from '../eval';\nimport { registerFunc } from './funcs';\nimport { DATETIME, INTEGER } from '../const';\nimport { valToString } from '../utils';\nimport { toBigInt } from '../bigint';\n\nfunction getMaxDate(date: Date): number {\n const copy = new Date(date);\n\n copy.setUTCMonth(copy.getUTCMonth() + 1);\n copy.setUTCDate(0);\n\n return copy.getUTCDate();\n}\n\nfunction parseUnixTime(_ctx: EvalContext, arg: IntegerValue): EvalValue {\n return {\n type: DATETIME,\n value: new Date(Number(arg.value) * 1000)\n };\n}\n\nfunction nowLocal(): EvalValue {\n return {\n type: DATETIME,\n value: new Date()\n };\n}\n\nfunction addMillis(_ctx: EvalContext, datetime: DatetimeValue, milliseconds: IntegerValue): EvalValue {\n return {\n type: DATETIME,\n value: new Date(datetime.value.getTime() + Number(milliseconds.value))\n };\n}\n\nfunction setYear(_ctx: EvalContext, datetime: DatetimeValue, year: IntegerValue): EvalValue {\n const copy = new Date(datetime.value);\n\n copy.setUTCFullYear(Number(year.value));\n\n return {\n type: DATETIME,\n value: copy\n };\n}\n\nfunction setMonth(_ctx: EvalContext, datetime: DatetimeValue, month: IntegerValue): EvalValue {\n const intVal = Number(month.value);\n\n if (intVal < 1 || intVal > 12) {\n throw new Error(`Expecting month in [1..12], instead got ${intVal}.`);\n }\n\n const copy = new Date(datetime.value);\n copy.setUTCMonth(intVal - 1);\n\n return {\n type: DATETIME,\n value: copy\n };\n}\n\nfunction setDay(_ctx: EvalContext, datetime: DatetimeValue, day: IntegerValue): EvalValue {\n const copy = new Date(datetime.value);\n const intVal = Number(day.value);\n\n if (intVal <= 0 && intVal !== -1 || intVal > getMaxDate(copy)) {\n throw new Error(`Unable to set day ${intVal} for date ${valToString(datetime)}.`);\n }\n\n copy.setUTCDate(intVal === -1 ? 0 : intVal);\n\n return {\n type: DATETIME,\n value: copy\n };\n}\n\nfunction setHours(_ctx: EvalContext, datetime: DatetimeValue, hours: IntegerValue): EvalValue {\n const intVal = Number(hours.value);\n\n if (intVal < 0 || intVal > 23) {\n throw new Error(`Expecting hours in [0..23], instead got ${intVal}.`);\n }\n\n const copy = new Date(datetime.value);\n copy.setUTCHours(intVal);\n\n return {\n type: DATETIME,\n value: copy\n };\n}\n\nfunction setMinutes(_ctx: EvalContext, datetime: DatetimeValue, minutes: IntegerValue): EvalValue {\n const intVal = Number(minutes.value);\n\n if (intVal < 0 || intVal > 59) {\n throw new Error(`Expecting minutes in [0..59], instead got ${intVal}.`);\n }\n\n const copy = new Date(datetime.value);\n\n copy.setUTCMinutes(intVal);\n\n return {\n type: DATETIME,\n value: copy\n };\n}\n\nfunction setSeconds(_ctx: EvalContext, datetime: DatetimeValue, seconds: IntegerValue): EvalValue {\n const intVal = Number(seconds.value);\n\n if (intVal < 0 || intVal > 59) {\n throw new Error(`Expecting seconds in [0..59], instead got ${intVal}.`);\n }\n\n const copy = new Date(datetime.value);\n copy.setUTCSeconds(intVal);\n\n return {\n type: DATETIME,\n value: copy\n };\n}\n\nfunction setMillis(_ctx: EvalContext, datetime: DatetimeValue, millis: IntegerValue): EvalValue {\n const intVal = Number(millis.value);\n\n if (intVal < 0 || intVal > 999) {\n throw new Error(`Expecting millis in [0..999], instead got ${intVal}.`);\n }\n\n const copy = new Date(datetime.value);\n copy.setUTCMilliseconds(intVal);\n\n return {\n type: DATETIME,\n value: copy\n };\n}\n\nconst getter = (\n method: 'getUTCFullYear' | 'getUTCMonth' | 'getUTCDate' | 'getUTCDay' | 'getUTCHours' | 'getUTCMinutes' |\n 'getUTCSeconds' | 'getUTCMilliseconds'\n) => {\n return (_ctx: EvalContext, datetime: DatetimeValue): EvalValue => {\n const copy = new Date(datetime.value.getTime());\n\n let value: number = copy[method]();\n\n if (method === 'getUTCMonth') {\n ++value;\n } else if (method === 'getUTCDay' && value === 0) {\n value = 7;\n }\n\n return {\n type: INTEGER,\n value: toBigInt(value)\n };\n };\n};\n\nconst getYear = getter('getUTCFullYear');\nconst getMonth = getter('getUTCMonth');\nconst getDay = getter('getUTCDate');\nconst getDayOfWeek = getter('getUTCDay');\nconst getHours = getter('getUTCHours');\nconst getMinutes = getter('getUTCMinutes');\nconst getSeconds = getter('getUTCSeconds');\nconst getMillis = getter('getUTCMilliseconds');\n\nexport function registerDatetime(): void {\n registerFunc('parseUnixTime', [INTEGER], parseUnixTime);\n registerFunc('nowLocal', [], nowLocal);\n registerFunc('addMillis', [DATETIME, INTEGER], addMillis);\n\n registerFunc('setYear', [DATETIME, INTEGER], setYear);\n registerFunc('setMonth', [DATETIME, INTEGER], setMonth);\n registerFunc('setDay', [DATETIME, INTEGER], setDay);\n registerFunc('setHours', [DATETIME, INTEGER], setHours);\n registerFunc('setMinutes', [DATETIME, INTEGER], setMinutes);\n registerFunc('setSeconds', [DATETIME, INTEGER], setSeconds);\n registerFunc('setMillis', [DATETIME, INTEGER], setMillis);\n\n registerFunc('getYear', [DATETIME], getYear);\n registerFunc('getMonth', [DATETIME], getMonth);\n registerFunc('getDay', [DATETIME], getDay);\n registerFunc('getDayOfWeek', [DATETIME], getDayOfWeek);\n registerFunc('getHours', [DATETIME], getHours);\n registerFunc('getMinutes', [DATETIME], getMinutes);\n registerFunc('getSeconds', [DATETIME], getSeconds);\n registerFunc('getMillis', [DATETIME], getMillis);\n}\n","import type { EvalContext, EvalValue, IntegerValue, StringValue } from '../eval';\nimport { registerFunc } from './funcs';\nimport { BOOLEAN, INTEGER, STRING } from '../const';\nimport { escapeRegExp } from '../../utils/escapeRegExp';\nimport { valToString } from '../utils';\nimport { wrapError } from '../../utils/wrapError';\nimport { toBigInt } from '../bigint';\n\nfunction len(_ctx: EvalContext, arg: StringValue): EvalValue {\n return {\n type: INTEGER,\n value: toBigInt(arg.value.length)\n };\n}\n\nfunction contains(_ctx: EvalContext, wholeStr: StringValue, partStr: StringValue): EvalValue {\n return {\n type: BOOLEAN,\n value: wholeStr.value.includes(partStr.value) ? 1 : 0\n };\n}\n\nfunction substring(_ctx: EvalContext, str: StringValue, start: IntegerValue, end: IntegerValue): EvalValue {\n if (end.value < start.value) {\n throw new Error('Indexes should be in ascending order.');\n }\n\n if (\n start.value < 0 || start.value > str.value.length ||\n end.value < 0 || end.value > str.value.length\n ) {\n throw new Error('Indexes are out of bounds.');\n }\n\n return {\n type: STRING,\n value: str.value.substring(Number(start.value), Number(end.value))\n };\n}\n\nfunction replaceAll(_ctx: EvalContext, str: StringValue, what: StringValue, replacer: StringValue): EvalValue {\n let res: string;\n\n if (what.value) {\n res = str.value.replace(new RegExp(escapeRegExp(what.value), 'g'), replacer.value);\n } else {\n // empty str\n res = str.value;\n }\n\n return {\n type: STRING,\n value: res\n };\n}\n\nfunction index(_ctx: EvalContext, str: StringValue, what: StringValue): EvalValue {\n return {\n type: INTEGER,\n value: toBigInt(str.value.indexOf(what.value))\n };\n}\n\nfunction lastIndex(_ctx: EvalContext, str: StringValue, what: StringValue): EvalValue {\n return {\n type: INTEGER,\n value: toBigInt(str.value.lastIndexOf(what.value))\n };\n}\n\nfunction trim(_ctx: EvalContext, str: StringValue): EvalValue {\n return {\n type: STRING,\n value: str.value.trim()\n };\n}\n\nfunction trimLeft(_ctx: EvalContext, str: StringValue): EvalValue {\n return {\n type: STRING,\n value: str.value.replace(/^\\s+/, '')\n };\n}\n\nfunction trimRight(_ctx: EvalContext, str: StringValue): EvalValue {\n return {\n type: STRING,\n value: str.value.replace(/\\s+$/, '')\n };\n}\n\nfunction toUpperCase(_ctx: EvalContext, str: StringValue): EvalValue {\n return {\n type: STRING,\n value: str.value.toUpperCase()\n };\n}\n\nfunction toLowerCase(_ctx: EvalContext, str: StringValue): EvalValue {\n return {\n type: STRING,\n value: str.value.toLowerCase()\n };\n}\n\nfunction calcPad(\n ctx: EvalContext,\n val: StringValue | IntegerValue,\n len: IntegerValue,\n pad: StringValue\n): string {\n if (!pad.value.length) {\n ctx.warnings.push(wrapError(new Error('String for padding is empty.'), {\n level: 'warn'\n }));\n return '';\n }\n\n let part = '';\n const str = val.type === STRING ? val.value : valToString(val);\n\n while (part.length + str.length < len.value) {\n part += pad.value;\n }\n if (part.length > 0 && part.length + str.length > len.value) {\n part = part.substring(0, Number(len.value) - Number(str.length));\n }\n\n return part;\n}\n\nfunction padStart(\n ctx: EvalContext,\n val: StringValue | IntegerValue,\n len: IntegerValue,\n pad: StringValue\n): EvalValue {\n const prefix = calcPad(ctx, val, len, pad);\n\n return {\n type: STRING,\n value: prefix + valToString(val)\n };\n}\n\nfunction padEnd(\n ctx: EvalContext,\n val: StringValue | IntegerValue,\n len: IntegerValue,\n pad: StringValue\n): EvalValue {\n const suffix = calcPad(ctx, val, len, pad);\n\n return {\n type: STRING,\n value: valToString(val) + suffix\n };\n}\n\nfunction testRegex(_ctx: EvalContext, str: StringValue, regex: StringValue): EvalValue {\n let re: RegExp;\n try {\n re = new RegExp(regex.value);\n } catch (err) {\n throw new Error('Invalid regular expression.');\n }\n\n return {\n type: BOOLEAN,\n value: re.test(str.value) ? 1 : 0\n };\n}\n\nexport function registerStrings(): void {\n registerFunc('len', [STRING], len);\n registerFunc('contains', [STRING, STRING], contains);\n registerFunc('substring', [STRING, INTEGER, INTEGER], substring);\n registerFunc('replaceAll', [STRING, STRING, STRING], replaceAll);\n registerFunc('index', [STRING, STRING], index);\n registerFunc('lastIndex', [STRING, STRING], lastIndex);\n registerFunc('trim', [STRING], trim);\n registerFunc('trimLeft', [STRING], trimLeft);\n registerFunc('trimRight', [STRING], trimRight);\n registerFunc('toUpperCase', [STRING], toUpperCase);\n registerFunc('toLowerCase', [STRING], toLowerCase);\n registerFunc('padStart', [STRING, INTEGER, STRING], padStart);\n registerFunc('padStart', [INTEGER, INTEGER, STRING], padStart);\n registerFunc('padEnd', [STRING, INTEGER, STRING], padEnd);\n registerFunc('padEnd', [INTEGER, INTEGER, STRING], padEnd);\n registerFunc('testRegex', [STRING, STRING], testRegex);\n}\n","import type { ColorValue, EvalContext, EvalValue, NumberValue, StringValue } from '../eval';\nimport type { ParsedColor } from '../../utils/correctColor';\nimport { registerFunc } from './funcs';\nimport { COLOR, NUMBER, STRING } from '../const';\nimport { safeConvertColor, stringifyColor } from '../utils';\n\nfunction colorGetter(\n field: keyof ParsedColor\n): (_ctx: EvalContext, color: StringValue | ColorValue) => EvalValue {\n return (_vars, color) => {\n const parsed = safeConvertColor(color.value);\n\n return {\n type: NUMBER,\n value: parsed[field] / 255\n };\n };\n}\n\nfunction colorSetter(\n field: keyof ParsedColor\n): (_ctx: EvalContext, color: StringValue | ColorValue, val: NumberValue) => EvalValue {\n return (_vars, color, val) => {\n const parsed = safeConvertColor(color.value);\n\n parsed[field] = val.value * 255;\n\n return {\n type: COLOR,\n value: stringifyColor(parsed)\n };\n };\n}\n\nconst getColorAlpha = colorGetter('a');\nconst getColorRed = colorGetter('r');\nconst getColorGreen = colorGetter('g');\nconst getColorBlue = colorGetter('b');\n\nconst setColorAlpha = colorSetter('a');\nconst setColorRed = colorSetter('r');\nconst setColorGreen = colorSetter('g');\nconst setColorBlue = colorSetter('b');\n\nfunction rgb(_ctx: EvalContext, red: NumberValue, green: NumberValue, blue: NumberValue): EvalValue {\n const parsed: ParsedColor = {\n a: 255,\n r: red.value * 255,\n g: green.value * 255,\n b: blue.value * 255\n };\n\n return {\n type: COLOR,\n value: stringifyColor(parsed)\n };\n}\n\nfunction argb(\n _ctx: EvalContext,\n alpha: NumberValue,\n red: NumberValue,\n green: NumberValue,\n blue: NumberValue\n): EvalValue {\n const parsed: ParsedColor = {\n a: alpha.value * 255,\n r: red.value * 255,\n g: green.value * 255,\n b: blue.value * 255\n };\n\n return {\n type: COLOR,\n value: stringifyColor(parsed)\n };\n}\n\nexport function registerColors(): void {\n registerFunc('getColorAlpha', [STRING], getColorAlpha);\n registerFunc('getColorAlpha', [COLOR], getColorAlpha);\n registerFunc('getColorRed', [STRING], getColorRed);\n registerFunc('getColorRed', [COLOR], getColorRed);\n registerFunc('getColorGreen', [STRING], getColorGreen);\n registerFunc('getColorGreen', [COLOR], getColorGreen);\n registerFunc('getColorBlue', [STRING], getColorBlue);\n registerFunc('getColorBlue', [COLOR], getColorBlue);\n\n registerFunc('setColorAlpha', [STRING, NUMBER], setColorAlpha);\n registerFunc('setColorAlpha', [COLOR, NUMBER], setColorAlpha);\n registerFunc('setColorRed', [STRING, NUMBER], setColorRed);\n registerFunc('setColorRed', [COLOR, NUMBER], setColorRed);\n registerFunc('setColorGreen', [STRING, NUMBER], setColorGreen);\n registerFunc('setColorGreen', [COLOR, NUMBER], setColorGreen);\n registerFunc('setColorBlue', [STRING, NUMBER], setColorBlue);\n registerFunc('setColorBlue', [COLOR, NUMBER], setColorBlue);\n\n registerFunc('rgb', [NUMBER, NUMBER, NUMBER], rgb);\n registerFunc('argb', [NUMBER, NUMBER, NUMBER, NUMBER], argb);\n}\n","import type { EvalContext, EvalValue, IntegerValue } from '../eval';\nimport { registerFunc } from './funcs';\nimport { INTEGER } from '../const';\nimport { toBigInt } from '../bigint';\nimport { checkIntegerOverflow } from '../utils';\n\nfunction getDuration(ctx: EvalContext, milliseconds: IntegerValue, delimiter: number, whole?: number): EvalValue {\n if (milliseconds.value < 0) {\n throw new Error('Expecting non-negative number of milliseconds.');\n }\n\n let val: number | bigint = (toBigInt(milliseconds.value) as bigint) /\n (toBigInt(delimiter) as bigint);\n\n checkIntegerOverflow(ctx, val);\n\n if (typeof val === 'number') {\n val = Math.floor(val);\n }\n\n if (whole) {\n val = (toBigInt(val) as bigint) % (toBigInt(whole) as bigint);\n }\n\n return {\n type: INTEGER,\n value: val\n };\n}\n\nconst MS_IN_SECOND = 1000;\nconst SECONDS_IN_MINUTE = 60;\nconst MS_IN_MINUTE = 1000 * 60;\nconst MINUTES_IN_HOUR = 60;\nconst MS_IN_HOUR = 1000 * 60 * 60;\nconst HOURS_IN_DAY = 24;\nconst MS_IN_DAY = 1000 * 60 * 60 * 24;\nconst MS_IN_WEEK = 1000 * 60 * 60 * 24 * 7;\n\nfunction getIntervalSeconds(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n return getDuration(ctx, milliseconds, MS_IN_SECOND, SECONDS_IN_MINUTE);\n}\n\nfunction getIntervalTotalSeconds(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n return getDuration(ctx, milliseconds, MS_IN_SECOND);\n}\n\nfunction getIntervalMinutes(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n return getDuration(ctx, milliseconds, MS_IN_MINUTE, MINUTES_IN_HOUR);\n}\n\nfunction getIntervalTotalMinutes(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n return getDuration(ctx, milliseconds, MS_IN_MINUTE);\n}\n\nfunction getIntervalHours(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n return getDuration(ctx, milliseconds, MS_IN_HOUR, HOURS_IN_DAY);\n}\n\nfunction getIntervalTotalHours(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n return getDuration(ctx, milliseconds, MS_IN_HOUR);\n}\n\nfunction getIntervalTotalDays(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n return getDuration(ctx, milliseconds, MS_IN_DAY);\n}\n\nfunction getIntervalTotalWeeks(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n return getDuration(ctx, milliseconds, MS_IN_WEEK);\n}\n\nexport function registerInterval(): void {\n registerFunc('getIntervalSeconds', [INTEGER], getIntervalSeconds);\n registerFunc('getIntervalTotalSeconds', [INTEGER], getIntervalTotalSeconds);\n registerFunc('getIntervalMinutes', [INTEGER], getIntervalMinutes);\n registerFunc('getIntervalTotalMinutes', [INTEGER], getIntervalTotalMinutes);\n registerFunc('getIntervalHours', [INTEGER], getIntervalHours);\n registerFunc('getIntervalTotalHours', [INTEGER], getIntervalTotalHours);\n registerFunc('getIntervalTotalDays', [INTEGER], getIntervalTotalDays);\n registerFunc('getIntervalTotalWeeks', [INTEGER], getIntervalTotalWeeks);\n}\n","import { BOOLEAN, COLOR, DICT, INTEGER, NUMBER, STRING, URL } from '../const';\nimport { BooleanValue, DictValue, EvalContext, EvalTypes, EvalValue, IntegerValue, NumberValue, StringValue } from '../eval';\nimport { checkIntegerOverflow, transformColorValue } from '../utils';\nimport { registerFunc } from './funcs';\n\nfunction getProp(obj: object, path: string[]): unknown {\n let current: object = obj;\n\n for (let i = 0; i < path.length; ++i) {\n if (!current) {\n throw new Error(`Missing property \"${path[i]}\" in the dict.`);\n }\n const val = current[path[i] as keyof typeof current];\n if (val === undefined) {\n throw new Error(`Missing property \"${path[i]}\" in the dict.`);\n }\n current = val;\n }\n\n return current;\n}\n\nfunction dictGetter(jsType: string, runtimeType: string) {\n return (ctx: EvalContext, dict: DictValue, ...path: StringValue[]): EvalValue => {\n let val = getProp(dict.value, path.map(it => it.value));\n\n let type: string = typeof val;\n if (type !== jsType) {\n if (type === 'object') {\n if (Array.isArray(val)) {\n type = 'array';\n } else if (val === null) {\n type = 'null';\n } else {\n type = 'dict';\n }\n }\n throw new Error(`Incorrect value type: expected \"${runtimeType}\", got \"${type}\".`);\n }\n if (jsType === 'number' && runtimeType === 'integer') {\n if (val !== Math.round(val as number)) {\n throw new Error('Cannot convert value to integer.');\n }\n checkIntegerOverflow(ctx, val);\n }\n if (jsType === 'string' && runtimeType === 'color') {\n val = transformColorValue(val as string);\n }\n\n return {\n type: runtimeType,\n value: val\n } as EvalValue;\n };\n}\n\nfunction optWrapper<ValueType extends EvalValue>(\n func: (ctx: EvalContext, dict: DictValue, ...path: StringValue[]) => EvalValue,\n fallbackType: EvalTypes\n) {\n return (ctx: EvalContext, fallback: ValueType, dict: DictValue, ...path: StringValue[]) => {\n try {\n return func(ctx, dict, ...path);\n } catch (_err) {\n // ignore error\n\n let value = fallback.value;\n if (fallbackType === 'color') {\n value = transformColorValue(value as string);\n }\n return {\n type: fallbackType,\n value\n } as unknown as EvalValue;\n }\n };\n}\n\nconst getDictString = dictGetter('string', 'string');\nconst getDictNumber = dictGetter('number', 'number');\nconst getDictInteger = dictGetter('number', 'integer');\nconst getDictBoolean = dictGetter('boolean', 'boolean');\nconst getDictColor = dictGetter('string', 'color');\nconst getDictUrl = dictGetter('string', 'url');\n\nconst getDictOptString = optWrapper<StringValue>(getDictString, 'string');\nconst getDictOptNumber = optWrapper<NumberValue>(getDictNumber, 'number');\nconst getDictOptInteger = optWrapper<IntegerValue>(getDictInteger, 'integer');\nconst getDictOptBoolean = optWrapper<BooleanValue>(getDictBoolean, 'boolean');\nconst getDictOptColor = optWrapper<BooleanValue>(getDictColor, 'color');\nconst getDictOptUrl = optWrapper<BooleanValue>(getDictUrl, 'url');\n\nexport function registerDict(): void {\n registerFunc('getDictString', [\n DICT, {\n type: STRING,\n isVararg: true\n }\n ], getDictString);\n registerFunc('getDictNumber', [\n DICT, {\n type: STRING,\n isVararg: true\n }\n ], getDictNumber);\n registerFunc('getDictInteger', [\n DICT, {\n type: STRING,\n isVararg: true\n }\n ], getDictInteger);\n registerFunc('getDictBoolean', [\n DICT, {\n type: STRING,\n isVararg: true\n }\n ], getDictBoolean);\n registerFunc('getDictColor', [\n DICT, {\n type: STRING,\n isVararg: true\n }\n ], getDictColor);\n registerFunc('getDictUrl', [\n DICT, {\n type: STRING,\n isVararg: true\n }\n ], getDictUrl);\n\n registerFunc('getDictOptString', [\n STRING, DICT, {\n type: STRING,\n isVararg: true\n }\n ], getDictOptString);\n registerFunc('getDictOptNumber', [\n NUMBER, DICT, {\n type: STRING,\n isVararg: true\n }\n ], getDictOptNumber);\n registerFunc('getDictOptInteger', [\n INTEGER, DICT, {\n type: STRING,\n isVararg: true\n }\n ], getDictOptInteger);\n registerFunc('getDictOptBoolean', [\n BOOLEAN, DICT, {\n type: STRING,\n isVararg: true\n }\n ], getDictOptBoolean);\n registerFunc('getDictOptColor', [\n COLOR, DICT, {\n type: STRING,\n isVararg: true\n }\n ], getDictOptColor);\n registerFunc('getDictOptColor', [\n STRING, DICT, {\n type: STRING,\n isVararg: true\n }\n ], getDictOptColor);\n registerFunc('getDictOptUrl', [\n STRING, DICT, {\n type: STRING,\n isVararg: true\n }\n ], getDictOptUrl);\n registerFunc('getDictOptUrl', [\n URL, DICT, {\n type: STRING,\n isVararg: true\n }\n ], getDictOptUrl);\n}\n","/* eslint-disable no-else-return */\n\nimport type {\n BinaryExpression, BooleanLiteral, CallExpression, CompareOperator,\n ConditionalExpression, EqualityOperator, FactorOperator, IntegerLiteral,\n LogicalExpression,\n Node, NumberLiteral, StringLiteral, SumOperator,\n TemplateLiteral,\n UnaryExpression, Variable\n} from './ast';\nimport type { WrappedError } from '../utils/wrapError';\nimport { findBestMatchedFunc, Func, funcByArgs } from './funcs/funcs';\nimport {\n checkIntegerOverflow,\n evalError,\n roundInteger,\n typeToString,\n valToInternal,\n valToPreview,\n valToString\n} from './utils';\nimport { BOOLEAN, DATETIME, INTEGER, NUMBER, STRING } from './const';\nimport { register } from './funcs';\nimport { Variable as VariableInstance, variableToValue } from './variable';\nimport { walk } from './walk';\nimport { toBigInt } from './bigint';\nimport { wrapError } from '../utils/wrapError';\n\nexport type VariablesMap = Map<string, VariableInstance>;\n\nexport type EvalTypes = 'string' | 'number' | 'integer' | 'boolean' | 'color' | 'url' | 'datetime' | 'dict';\n\nexport interface EvalValueBase {\n type: string;\n value: unknown;\n}\n\nexport interface StringValue extends EvalValueBase {\n type: 'string';\n value: string;\n}\n\nexport interface UrlValue extends EvalValueBase {\n type: 'url';\n value: string;\n}\n\nexport interface ColorValue extends EvalValueBase {\n type: 'color';\n value: string;\n}\n\nexport interface NumberValue extends EvalValueBase {\n type: 'number';\n value: number;\n}\n\nexport interface IntegerValue extends EvalValueBase {\n type: 'integer';\n value: number | bigint;\n}\n\nexport interface BooleanValue extends EvalValueBase {\n type: 'boolean';\n value: number;\n}\n\nexport interface DatetimeValue extends EvalValueBase {\n type: 'datetime';\n value: Date;\n}\n\nexport interface DictValue extends EvalValueBase {\n type: 'dict';\n value: object;\n}\n\nexport type EvalValue = StringValue | UrlValue | ColorValue | NumberValue | IntegerValue |\n BooleanValue | DatetimeValue | DictValue;\n\nexport interface EvalError {\n type: 'error';\n value: string;\n}\n\nexport type EvalResult = EvalValue | EvalError;\n\nexport interface EvalContext {\n variables: VariablesMap;\n warnings: WrappedError[];\n safeIntegerOverflow: boolean;\n}\n\nregister();\n\nfunction evalStringLiteral(ctx: EvalContext, expr: StringLiteral): EvalValue {\n return {\n type: STRING,\n value: expr.value\n };\n}\n\nfunction evalNumberLiteral(ctx: EvalContext, expr: NumberLiteral): EvalValue {\n return {\n type: NUMBER,\n value: expr.value\n };\n}\n\nfunction evalIntegerLiteral(ctx: EvalContext, expr: IntegerLiteral): EvalValue {\n checkIntegerOverflow(ctx, expr.value);\n\n return {\n type: INTEGER,\n value: expr.value\n };\n}\n\nfunction evalBooleanLiteral(ctx: EvalContext, expr: BooleanLiteral): EvalValue {\n return {\n type: BOOLEAN,\n value: expr.value ? 1 : 0\n };\n}\n\nfunction evalUnary(ctx: EvalContext, expr: UnaryExpression): EvalValue {\n const val = valToInternal(evalAny(ctx, expr.argument));\n\n switch (expr.operator) {\n case '!':\n if (val.type === BOOLEAN) {\n return {\n type: BOOLEAN,\n value: val.value ? 0 : 1\n };\n } else {\n evalError(`${expr.operator}${valToPreview(val)}`, 'A Boolean is expected after a unary not.');\n }\n case '+':\n case '-':\n const mul = expr.operator === '+' ? 1 : -1;\n\n if (val.type === INTEGER) {\n const value = (val.value as bigint) * (toBigInt(mul) as bigint);\n\n checkIntegerOverflow(ctx, value);\n\n return {\n type: INTEGER,\n value\n };\n } else if (val.type === NUMBER) {\n return {\n type: NUMBER,\n value: val.value * mul\n };\n } else {\n evalError(\n `${expr.operator}${valToPreview(val)}`,\n `A Number is expected after a unary ${expr.operator === '+' ? 'plus' : 'minus'}.`\n );\n }\n }\n}\n\nfunction evalConditional(ctx: EvalContext, expr: ConditionalExpression): EvalValue {\n const test = valToInternal(evalAny(ctx, expr.test));\n if (test.type === BOOLEAN) {\n if (test.value) {\n return evalAny(ctx, expr.consequent);\n } else {\n return evalAny(ctx, expr.alternate);\n }\n } else {\n evalError(\n `${valToPreview(test)} ? ${valToPreview(evalAny(ctx, expr.consequent))} : ${valToPreview(evalAny(ctx, expr.alternate))}`,\n 'Ternary must be called with a Boolean value as a condition.'\n );\n }\n}\n\nfunction evalTemplateLiteral(ctx: EvalContext, expr: TemplateLiteral): EvalValue {\n let result = '';\n\n if (expr.quasis.length === 2 && expr.quasis[0].value === '' && expr.quasis[1].value === '') {\n return evalAny(ctx, expr.expressions[0]);\n }\n\n for (let i = 0; i < expr.expressions.length; ++i) {\n result += expr.quasis[i].value;\n result += valToString(evalAny(ctx, expr.expressions[i]));\n }\n result += expr.quasis[expr.quasis.length - 1].value;\n\n return {\n type: STRING,\n value: result\n };\n}\n\nfunction evalLogicalExpression(ctx: EvalContext, expr: LogicalExpression): EvalValue {\n const left = valToInternal(evalAny(ctx, expr.left));\n if (left.type !== BOOLEAN) {\n evalError(\n `${valToPreview(left)} ${expr.operator} ...`,\n `'${expr.operator}' must be called with boolean operands.`\n );\n }\n\n if (expr.operator === '||' && left.value) {\n return left;\n }\n if (expr.operator === '&&' && !left.value) {\n return {\n type: BOOLEAN,\n value: 0\n };\n }\n\n const right = valToInternal(evalAny(ctx, expr.right));\n if (right.type !== BOOLEAN) {\n evalError(\n `${valToPreview(left)} ${expr.operator} ${valToPreview(right)}`,\n `Operator '${expr.operator}' cannot be applied to different types: Boolean and ${typeToString(right.type)}.`\n );\n }\n\n return {\n type: BOOLEAN,\n value: right.value\n };\n}\n\nfunction evalBinaryEquality<T extends EvalValue>(operator: EqualityOperator, left: T, right: T): EvalValue {\n let res: boolean;\n\n if (left.type === DATETIME && right.type === DATETIME) {\n res = left.value.getTime() === right.value.getTime();\n } else {\n res = left.value === right.value;\n }\n\n if (operator === '!=') {\n res = !res;\n }\n\n return {\n type: BOOLEAN,\n value: res ? 1 : 0\n };\n}\n\nfunction evalBinaryCompare<T extends EvalValue>(operator: CompareOperator, left: T, right: T): EvalValue {\n if (left.type !== NUMBER && left.type !== INTEGER && left.type !== DATETIME) {\n evalError(\n `${valToPreview(left)} ${operator} ${valToPreview(right)}`,\n `Operator '${operator}' cannot be applied to ${typeToString(left.type)} type.`\n );\n }\n\n let res: boolean;\n const leftVal = (left.type === DATETIME ? left.value.getTime() : left.value) as number;\n const rightVal = (right.type === DATETIME ? right.value.getTime() : right.value) as number;\n\n if (operator === '>') {\n res = leftVal > rightVal;\n } else if (operator === '>=') {\n res = leftVal >= rightVal;\n } else if (operator === '<') {\n res = leftVal < rightVal;\n } else {\n res = leftVal <= rightVal;\n }\n\n return {\n type: BOOLEAN,\n value: res ? 1 : 0\n };\n}\n\nfunction evalBinarySum<T extends EvalValue>(ctx: EvalContext, operator: SumOperator, left: T, right: T): EvalValue {\n if (left.type !== STRING && left.type !== NUMBER && left.type !== INTEGER) {\n evalError(\n `${valToPreview(left)} ${operator} ${valToPreview(right)}`,\n `Operator '${operator}' cannot be applied to ${typeToString(left.type)} type.`\n );\n }\n\n if (left.type === STRING) {\n if (operator === '-') {\n evalError(\n `${valToPreview(left)} - ${valToPreview(right)}`,\n `Operator '${operator}' cannot be applied to ${typeToString(left.type)} type.`\n );\n }\n return {\n type: STRING,\n value: left.value + right.value\n };\n }\n\n let res: number | bigint = operator === '+' ?\n (left.value as bigint) + (right.value as bigint) :\n (left.value as bigint) - (right.value as bigint);\n\n // integer\n if (left.type === INTEGER) {\n try {\n res = roundInteger(ctx, res);\n checkIntegerOverflow(ctx, res);\n } catch (err: any) {\n evalError(\n `${valToPreview(left)} ${operator} ${valToPreview(right)}`,\n err.message\n );\n }\n }\n\n return {\n type: left.type,\n value: res as any\n };\n}\n\nfunction evalBinaryFactor<T extends EvalValue>(\n ctx: EvalContext,\n operator: FactorOperator,\n left: T,\n right: T\n): EvalValue {\n if (left.type !== INTEGER && left.type !== NUMBER) {\n evalError(\n `${valToPreview(left)} ${operator} ${valToPreview(right)}`,\n `Operator '${operator}' cannot be applied to ${typeToString(left.type)} type.`\n );\n }\n\n let res: number | bigint;\n if (operator === '*') {\n // bigint | number actually\n res = (left.value as bigint) * (right.value as bigint);\n } else if (operator === '/' || operator === '%') {\n if (Number(right.value) === 0) {\n evalError(\n `${valToPreview(left)} ${operator} ${valToPreview(right)}`,\n 'Division by zero is not supported.'\n );\n }\n if (operator === '/') {\n // bigint | number actually\n res = (left.value as bigint) / (right.value as bigint);\n } else {\n // bigint | number actually\n res = (left.value as bigint) % (right.value as bigint);\n }\n } else {\n throw new Error(`Unsupported operation ${operator}`);\n }\n\n if (left.type === INTEGER) {\n try {\n res = roundInteger(ctx, res);\n checkIntegerOverflow(ctx, res);\n } catch (err: any) {\n evalError(\n `${valToPreview(left)} ${operator} ${valToPreview(right)}`,\n err.message\n );\n }\n }\n\n return {\n type: left.type,\n value: res as any\n };\n}\n\nfunction evalBinaryExpression(ctx: EvalContext, expr: BinaryExpression): EvalValue {\n const operator = expr.operator;\n const left = evalAny(ctx, expr.left);\n const right = evalAny(ctx, expr.right);\n\n if (left.type !== right.type) {\n evalError(\n `${valToPreview(left)} ${expr.operator} ${valToPreview(right)}`,\n `Operator '${operator}' cannot be applied to different types: ${typeToString(left.type)} and ${typeToString(right.type)}.`\n );\n }\n\n if (operator === '==' || operator === '!=') {\n return evalBinaryEquality(operator, left, right);\n } else if (operator === '>' || operator === '>=' || operator === '<' || operator === '<=') {\n return evalBinaryCompare(operator, left, right);\n } else if (operator === '+' || operator === '-') {\n return evalBinarySum(ctx, operator, left, right);\n } else if (operator === '/' || operator === '*' || operator === '%') {\n return evalBinaryFactor(ctx, operator, left, right);\n }\n\n throw new Error(`Unsupported operation ${operator}`);\n}\n\nfunction argsToStr(args: EvalValue[]): string {\n return args.map(valToPreview).join(', ');\n}\n\nfunction evalCallExpression(ctx: EvalContext, expr: CallExpression): EvalValue {\n const funcName = expr.callee.name;\n\n let func: Func | undefined;\n\n const args = expr.arguments.map(arg => evalAny(ctx, arg));\n const funcKey = funcName + ':' + args.map(arg => arg.type).join('#');\n\n if (!funcByArgs.has(funcKey)) {\n const findRes = findBestMatchedFunc(funcName, args);\n if ('expected' in findRes || 'type' in findRes && findRes.type === 'missing') {\n const argsType = args.map(arg => typeToString(arg.type)).join(', ');\n const prefix = `${funcName}(${argsToStr(args)})`;\n\n if (findRes.type === 'few' && args.length === 0) {\n evalError(prefix, `Non empty argument list is required for function '${funcName}'.`);\n } else if (findRes.type === 'many') {\n evalError(prefix, `Function '${funcName}' has no matching override for given argument types: ${argsType}.`);\n } else if (findRes.type === 'few' || findRes.type === 'mismatch') {\n evalError(prefix, `Function '${funcName}' has no matching override for given argument types: ${argsType}.`);\n } else {\n evalError(prefix, `Unknown function name: ${funcName}.`);\n }\n }\n func = findRes;\n } else {\n func = funcByArgs.get(funcKey);\n }\n\n if (!func) {\n throw new Error('Function not found');\n }\n\n try {\n return func.cb(ctx, ...args);\n } catch (err: any) {\n const prefix = `${funcName}(${argsToStr(args)})`;\n evalError(prefix, err.message);\n }\n}\n\nfunction evalVariable(ctx: EvalContext, expr: Variable): EvalValue {\n const varName = expr.id.name;\n const variable = ctx.variables.get(varName);\n\n if (variable) {\n return variableToValue(variable);\n }\n\n throw new Error(`Variable '${varName}' is missing.`);\n}\n\nconst EVAL_MAP = {\n StringLiteral: evalStringLiteral,\n NumberLiteral: evalNumberLiteral,\n IntegerLiteral: evalIntegerLiteral,\n BooleanLiteral: evalBooleanLiteral,\n UnaryExpression: evalUnary,\n ConditionalExpression: evalConditional,\n TemplateLiteral: evalTemplateLiteral,\n LogicalExpression: evalLogicalExpression,\n BinaryExpression: evalBinaryExpression,\n CallExpression: evalCallExpression,\n Variable: evalVariable\n};\n\nexport function evalAny(ctx: EvalContext, expr: Node): EvalValue {\n if (expr.type in EVAL_MAP) {\n return EVAL_MAP[expr.type](ctx, expr as any);\n }\n throw new Error('Unsupported expression');\n}\n\nfunction checkVariables(ctx: EvalContext, expr: Node): void {\n let unknownVariableName = '';\n\n walk(expr, {\n Variable(node) {\n if (!unknownVariableName && !ctx.variables.has(node.id.name)) {\n unknownVariableName = node.id.name;\n }\n }\n });\n\n if (unknownVariableName) {\n throw new Error(`Variable '${unknownVariableName}' is missing.`);\n }\n}\n\nexport function evalExpression(vars: VariablesMap, expr: Node): {\n result: EvalResult;\n warnings: WrappedError[];\n} {\n try {\n const ctx: EvalContext = {\n variables: vars,\n warnings: [],\n safeIntegerOverflow: false\n };\n\n checkVariables(ctx, expr);\n const result = evalAny(ctx, expr);\n\n if (ctx.safeIntegerOverflow) {\n ctx.warnings.push(wrapError(new Error('Safe integer overflow, values may lose accuracy.'), {\n level: 'warn'\n }));\n }\n\n return {\n result,\n warnings: ctx.warnings\n };\n } catch (err: any) {\n return {\n result: {\n type: 'error',\n value: err.message\n },\n warnings: []\n };\n }\n}\n","export function escapeRegExp(str: string): string {\n return str.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\n","import type { EvalContext, EvalValue, IntegerValue, NumberValue } from '../eval';\nimport { registerFunc } from './funcs';\nimport { INTEGER, MAX_NUMBER, MIN_NUMBER, NUMBER } from '../const';\nimport { checkIntegerOverflow, roundInteger } from '../utils';\nimport { absBigInt, bigIntZero, signBigInt, MAX_INT, MIN_INT } from '../bigint';\n\nfunction divInteger(ctx: EvalContext, arg0: IntegerValue, arg1: IntegerValue): EvalValue {\n if (arg1.value === bigIntZero) {\n throw new Error('Division by zero is not supported.');\n }\n\n // bigint | number actually\n let res: number | bigint = (arg0.value as bigint) / (arg1.value as bigint);\n res = roundInteger(ctx, res);\n checkIntegerOverflow(ctx, res);\n\n return {\n type: INTEGER,\n value: res\n };\n}\n\nfunction divNumber(_ctx: EvalContext, arg0: NumberValue, arg1: NumberValue): EvalValue {\n if (arg1.value === 0) {\n throw new Error('Division by zero is not supported.');\n }\n\n const res = arg0.value / arg1.value;\n\n return {\n type: NUMBER,\n value: res\n };\n}\n\nfunction modInteger(ctx: EvalContext, arg0: IntegerValue, arg1: IntegerValue): EvalValue {\n if (arg1.value === bigIntZero) {\n throw new Error('Division by zero is not supported.');\n }\n\n // bigint | number actually\n let res: number | bigint = (arg0.value as bigint) % (arg1.value as bigint);\n res = roundInteger(ctx, res);\n checkIntegerOverflow(ctx, res);\n\n return {\n type: INTEGER,\n value: res\n };\n}\n\nfunction modNumber(_ctx: EvalContext, arg0: NumberValue, arg1: NumberValue): EvalValue {\n if (arg1.value === 0) {\n throw new Error('Division by zero is not supported.');\n }\n\n const res = arg0.value % arg1.value;\n\n return {\n type: NUMBER,\n value: res\n };\n}\n\nfunction mulInteger(ctx: EvalContext, ...args: IntegerValue[]): EvalValue {\n // number | bigint actually\n let res: bigint = (args.length ? args[0].value : bigIntZero) as bigint;\n for (let i = 1; i < args.length; ++i) {\n res *= args[i].value as bigint;\n res = roundInteger(ctx, res) as bigint;\n checkIntegerOverflow(ctx, res);\n }\n\n return {\n type: INTEGER,\n value: res\n };\n}\n\nfunction mulNumber(_ctx: EvalContext, ...args: NumberValue[]): EvalValue {\n let res = args.length ? args[0].value : 0;\n for (let i = 1; i < args.length; ++i) {\n res *= args[i].value;\n }\n\n return {\n type: NUMBER,\n value: res\n };\n}\n\nfunction subInteger(ctx: EvalContext, ...args: IntegerValue[]): EvalValue {\n // number | bigint actually\n let res: bigint = (args.length ? args[0].value : bigIntZero) as bigint;\n for (let i = 1; i < args.length; ++i) {\n res -= args[i].value as bigint;\n res = roundInteger(ctx, res) as bigint;\n checkIntegerOverflow(ctx, res);\n }\n\n return {\n type: INTEGER,\n value: res\n };\n}\n\nfunction subNumber(_ctx: EvalContext, ...args: NumberValue[]): EvalValue {\n let res = args.length ? args[0].value : 0;\n for (let i = 1; i < args.length; ++i) {\n res -= args[i].value;\n }\n\n return {\n type: NUMBER,\n value: res\n };\n}\n\nfunction sumInteger(ctx: EvalContext, ...args: IntegerValue[]): EvalValue {\n // number | bigint actually\n let res = bigIntZero as bigint;\n for (let i = 0; i < args.length; ++i) {\n res += args[i].value as bigint;\n res = roundInteger(ctx, res) as bigint;\n checkIntegerOverflow(ctx, res);\n }\n\n return {\n type: INTEGER,\n value: res\n };\n}\n\nfunction sumNumber(_ctx: EvalContext, ...args: NumberValue[]): EvalValue {\n let res = 0;\n for (let i = 0; i < args.length; ++i) {\n res += args[i].value;\n }\n\n return {\n type: NUMBER,\n value: res\n };\n}\n\nfunction absInteger(ctx: EvalContext, arg: IntegerValue): EvalValue {\n const res = absBigInt(arg.value);\n\n checkIntegerOverflow(ctx, res);\n\n return {\n type: arg.type,\n value: res\n };\n}\n\nfunction absNumber(_ctx: EvalContext, arg: NumberValue): EvalValue {\n const res = Math.abs(arg.value);\n\n return {\n type: NUMBER,\n value: res\n };\n}\n\nfunction maxInt(_ctx: EvalContext, ...args: IntegerValue[]): EvalValue {\n if (!args.length) {\n throw new Error('Non empty argument list is required for function \\'max\\'.');\n }\n\n let max = args[0].value;\n for (let i = 1; i < args.length; ++i) {\n if (args[i].value > max) {\n max = args[i].value;\n }\n }\n\n return {\n type: INTEGER,\n value: max\n };\n}\n\nfunction maxNum(_ctx: EvalContext, ...args: NumberValue[]): EvalValue {\n if (!args.length) {\n throw new Error('Non empty argument list is required for function \\'max\\'.');\n }\n\n return {\n type: NUMBER,\n value: Math.max(...args.map(arg => arg.value))\n };\n}\n\nfunction minInt(_ctx: EvalContext, ...args: IntegerValue[]): EvalValue {\n if (!args.length) {\n throw new Error('Non empty argument list is required for function \\'min\\'.');\n }\n\n let min = args[0].value;\n for (let i = 1; i < args.length; ++i) {\n if (args[i].value < min) {\n min = args[i].value;\n }\n }\n\n return {\n type: INTEGER,\n value: min\n };\n}\n\nfunction minNum(_ctx: EvalContext, ...args: NumberValue[]): EvalValue {\n if (!args.length) {\n throw new Error('Non empty argument list is required for function \\'min\\'.');\n }\n\n return {\n type: NUMBER,\n value: Math.min(...args.map(arg => arg.value))\n };\n}\n\nfunction maxNumber(): EvalValue {\n return {\n type: NUMBER,\n value: MAX_NUMBER\n };\n}\n\nfunction minNumber(): EvalValue {\n return {\n type: NUMBER,\n value: MIN_NUMBER\n };\n}\n\nfunction maxInteger(ctx: EvalContext): EvalValue {\n checkIntegerOverflow(ctx, MAX_INT);\n\n return {\n type: INTEGER,\n value: MAX_INT\n };\n}\n\nfunction minInteger(ctx: EvalContext): EvalValue {\n checkIntegerOverflow(ctx, MIN_INT);\n\n return {\n type: INTEGER,\n value: MIN_INT\n };\n}\n\nfunction round(_ctx: EvalContext, arg: NumberValue): EvalValue {\n const sign = Math.sign(arg.value);\n\n return {\n type: NUMBER,\n // js treats Math.round(-0.5) as 0, which is different to other platforms\n value: sign * Math.round(Math.abs(arg.value))\n };\n}\n\nfunction floor(_ctx: EvalContext, arg: NumberValue): EvalValue {\n return {\n type: NUMBER,\n value: Math.floor(arg.value)\n };\n}\n\nfunction ceil(_ctx: EvalContext, arg: NumberValue): EvalValue {\n return {\n type: NUMBER,\n value: Math.ceil(arg.value)\n };\n}\n\nfunction signumInteger(_ctx: EvalContext, arg: IntegerValue): EvalValue {\n return {\n type: INTEGER,\n value: signBigInt(arg.value)\n };\n}\n\nfunction signumNumber(_ctx: EvalContext, arg: NumberValue): EvalValue {\n return {\n type: NUMBER,\n value: Math.sign(arg.value)\n };\n}\n\nfunction copySignInteger(ctx: EvalContext, arg0: IntegerValue, arg1: IntegerValue): EvalValue {\n let res: number | bigint;\n\n if (arg1.value === bigIntZero) {\n res = arg0.value;\n } else if (arg0.value === bigIntZero) {\n res = 0;\n } else {\n const sign = signBigInt(arg1.value);\n\n // number | bigint actually\n res = (absBigInt(arg0.value) as bigint) * (sign as bigint);\n }\n\n checkIntegerOverflow(ctx, res);\n\n return {\n type: INTEGER,\n value: res\n };\n}\n\nfunction copySignNumber(_ctx: EvalContext, arg0: NumberValue, arg1: NumberValue): EvalValue {\n let sign = Math.sign(arg1.value);\n\n if (sign === 0) {\n sign = Object.is(sign, 0) ? 1 : -1;\n }\n\n const res = Math.abs(arg0.value) * sign;\n\n return {\n type: NUMBER,\n value: res\n };\n}\n\nexport function registerMath(): void {\n registerFunc('div', [INTEGER, INTEGER], divInteger);\n registerFunc('div', [NUMBER, NUMBER], divNumber);\n\n registerFunc('mod', [INTEGER, INTEGER], modInteger);\n registerFunc('mod', [NUMBER, NUMBER], modNumber);\n\n registerFunc('mul', [{\n type: INTEGER,\n isVararg: true\n }], mulInteger);\n registerFunc('mul', [{\n type: NUMBER,\n isVararg: true\n }], mulNumber);\n\n registerFunc('sub', [{\n type: INTEGER,\n isVararg: true\n }], subInteger);\n registerFunc('sub', [{\n type: NUMBER,\n isVararg: true\n }], subNumber);\n\n registerFunc('sum', [{\n type: INTEGER,\n isVararg: true\n }], sumInteger);\n registerFunc('sum', [{\n type: NUMBER,\n isVararg: true\n }], sumNumber);\n\n registerFunc('abs', [INTEGER], absInteger);\n registerFunc('abs', [NUMBER], absNumber);\n\n registerFunc('max', [{\n type: INTEGER,\n isVararg: true\n }], maxInt);\n registerFunc('max', [{\n type: NUMBER,\n isVararg: true\n }], maxNum);\n\n registerFunc('min', [{\n type: INTEGER,\n isVararg: true\n }], minInt);\n registerFunc('min', [{\n type: NUMBER,\n isVararg: true\n }], minNum);\n\n registerFunc('maxNumber', [], maxNumber);\n registerFunc('minNumber', [], minNumber);\n\n registerFunc('maxInteger', [], maxInteger);\n registerFunc('minInteger', [], minInteger);\n\n registerFunc('round', [NUMBER], round);\n registerFunc('floor', [NUMBER], floor);\n registerFunc('ceil', [NUMBER], ceil);\n\n registerFunc('signum', [INTEGER], signumInteger);\n registerFunc('signum', [NUMBER], signumNumber);\n\n registerFunc('copySign', [INTEGER, INTEGER], copySignInteger);\n registerFunc('copySign', [NUMBER, NUMBER], copySignNumber);\n}\n","import type { Node } from './ast';\nimport type { VariableValue } from './variable';\nimport { uniq } from '../utils/uniq';\nimport { parse } from './expressions';\nimport { evalExpression, VariablesMap } from './eval';\nimport { containsUnsetVariables, dateToString, gatherVarsFromAst, stringifyColor } from './utils';\nimport { LogError, wrapError } from '../utils/wrapError';\nimport { parseColor } from '../utils/correctColor';\nimport { MAX_INT32, MIN_INT32 } from './const';\nimport { simpleUnescapeString } from './simpleUnescapeString';\n\nclass ExpressionBinding {\n private readonly ast: Node;\n\n constructor(ast: Node) {\n this.ast = ast;\n }\n\n /**\n * Applies variables into ast\n * @param variables\n * @param logError\n */\n apply(variables: VariablesMap, logError: LogError): VariableValue | string | undefined {\n if (containsUnsetVariables(this.ast, variables)) {\n return undefined;\n }\n\n try {\n const res = evalExpression(variables, this.ast);\n res.warnings.forEach(logError);\n const result = res.result;\n\n if (result.type === 'error') {\n logError(wrapError(new Error('Expression execution error'), {\n additional: {\n message: result.value\n }\n }));\n return undefined;\n }\n\n const value = result.value;\n if (value instanceof Date) {\n return dateToString(value);\n }\n if (result.type === 'boolean') {\n return Boolean(value);\n }\n if (result.type === 'color') {\n const parsed = parseColor(String(value));\n if (parsed) {\n return stringifyColor(parsed);\n }\n logError(wrapError(new Error('Expression execution error')));\n }\n if (result.type === 'integer') {\n if ((value as number) > MAX_INT32 || (value as number) < MIN_INT32) {\n logError(wrapError(new Error('Expression result is out of 32-bit int range')));\n return undefined;\n }\n return Number(value);\n }\n return value;\n } catch (err) {\n logError(wrapError(new Error('Expression execution error')));\n return undefined;\n }\n }\n}\n\nclass VariableBinding {\n private readonly variable: string;\n\n constructor(variable: string) {\n this.variable = variable;\n }\n\n /**\n * Applies variables into ast\n * @param variables\n * @param logError\n */\n apply(variables: VariablesMap, logError: LogError): VariableValue | string | undefined {\n const varInstance = variables.get(this.variable);\n if (varInstance) {\n return varInstance.getValue();\n }\n\n return undefined;\n }\n}\n\nexport type MaybeMissing<T> = T | (\n T extends (infer U)[] ?\n MaybeMissing<U>[] :\n (\n T extends object ?\n {\n [P in keyof T]: MaybeMissing<T[P]>;\n } :\n T | undefined\n )\n);\n\nfunction hasExpressions(str: string): boolean {\n return str.indexOf('@{') > -1 || str.indexOf('\\\\') > -1;\n}\n\nfunction prepareVarsObj<T>(\n jsonProp: T,\n store: {\n vars: string[];\n hasExpression: boolean;\n },\n logError: LogError\n): unknown {\n if (jsonProp) {\n if (typeof jsonProp === 'string') {\n if (hasExpressions(jsonProp)) {\n store.hasExpression = true;\n\n if (process.env.ENABLE_EXPRESSIONS || process.env.ENABLE_EXPRESSIONS === undefined) {\n try {\n const ast = parse(jsonProp, {\n startRule: 'JsonStringContents'\n });\n const propVars = gatherVarsFromAst(ast);\n store.vars.push(...propVars);\n\n return new ExpressionBinding(ast);\n } catch (err) {\n logError(wrapError(new Error('Unable to parse expression'), {\n additional: {\n expression: jsonProp\n }\n }));\n return undefined;\n }\n } else {\n if (jsonProp === '@{}') {\n return '';\n } else if (jsonProp.startsWith('@{') && jsonProp.endsWith('}')) {\n return new VariableBinding(jsonProp.substring(2, jsonProp.length - 1));\n }\n try {\n return simpleUnescapeString(jsonProp);\n } catch (err: any) {\n logError(wrapError(err as Error, {\n additional: {\n expression: jsonProp\n }\n }));\n return undefined;\n }\n }\n }\n } else if (Array.isArray(jsonProp)) {\n return jsonProp.map(item => prepareVarsObj(item, store, logError));\n } else if (typeof jsonProp === 'object') {\n const res: Record<string, unknown> = {};\n for (const key in jsonProp) {\n res[key] = prepareVarsObj(jsonProp[key], store, logError);\n }\n return res;\n }\n }\n return jsonProp;\n}\n\nfunction applyVars(jsonProp: unknown, variables: VariablesMap, logError: LogError): unknown {\n if (jsonProp) {\n if (\n (process.env.ENABLE_EXPRESSIONS || process.env.ENABLE_EXPRESSIONS === undefined) &&\n jsonProp instanceof ExpressionBinding\n ) {\n return jsonProp.apply(variables, logError);\n } else if (\n (!process.env.ENABLE_EXPRESSIONS && process.env.ENABLE_EXPRESSIONS !== undefined) &&\n jsonProp instanceof VariableBinding\n ) {\n return jsonProp.apply(variables, logError);\n } else if (Array.isArray(jsonProp)) {\n return jsonProp.map(it => applyVars(it, variables, logError));\n } else if (typeof jsonProp === 'object') {\n const res: Record<string, unknown> = {};\n for (const key in jsonProp) {\n res[key] = applyVars(jsonProp[key as keyof typeof jsonProp], variables, logError);\n }\n return res;\n }\n }\n return jsonProp;\n}\n\nexport function prepareVars<T>(jsonProp: T, logError: LogError): {\n vars: string[];\n hasExpression: boolean;\n applyVars: (variables: VariablesMap) => MaybeMissing<T>;\n} {\n const store: {\n vars: string[];\n hasExpression: boolean;\n } = {\n vars: [],\n hasExpression: false\n };\n const root = prepareVarsObj(jsonProp, store, logError);\n\n const vars = uniq(store.vars);\n\n return {\n vars,\n hasExpression: store.hasExpression,\n applyVars(variables: VariablesMap) {\n return applyVars(root, variables, logError) as MaybeMissing<T>;\n }\n };\n}\n","export function uniq(list: string[]): string[] {\n return [...new Set(list)];\n}\n","import type { Writable } from 'svelte/store';\nimport { createPagersStore } from './pagers';\n\nexport const storesMap: Record<string, () => Writable<any>> = {\n pagers: createPagersStore\n};\n","import { writable } from 'svelte/store';\n\nexport interface PagerData {\n instId: string;\n size: number;\n currentItem: number;\n scrollToPagerItem(index: number): void;\n}\n\nexport function createPagersStore() {\n return writable(new Map<string, PagerData>());\n}\n","import type { Writable } from 'svelte/store';\nimport { writable } from 'svelte/store';\nimport type { Variable } from './variable';\n\nconst controllerToStore = new Map<GlobalVariablesController, Writable<string>>();\nconst controllerToVars = new Map<GlobalVariablesController, Map<string, Variable>>();\n\nexport function getControllerStore(controller: GlobalVariablesController): Writable<string> {\n const store = controllerToStore.get(controller) || writable('');\n\n if (!controllerToStore.has(controller)) {\n controllerToStore.set(controller, store);\n }\n\n return store;\n}\n\nexport function getControllerVars(controller: GlobalVariablesController): Map<string, Variable> {\n const map = controllerToVars.get(controller) || new Map();\n\n if (!controllerToVars.has(controller)) {\n controllerToVars.set(controller, map);\n }\n\n return map;\n}\n\nexport class GlobalVariablesController {\n setVariable(variable: Variable): void {\n const name = variable.getName();\n const vars = getControllerVars(this);\n\n if (vars.has(name)) {\n throw new Error('Variable with the same name already exist');\n } else {\n vars.set(name, variable);\n const store = getControllerStore(this);\n store.set(name);\n }\n }\n\n getVariable(variableName: string): Variable | undefined {\n const vars = getControllerVars(this);\n\n return vars.get(variableName);\n }\n}\n\nexport function createGlobalVariablesController() {\n return new GlobalVariablesController();\n}\n","import { Action, DivTimer } from '../../typings/common';\nimport { LogError, wrapError } from './wrapError';\nimport { MaybeMissing } from '../expressions/json';\nimport { VariableType } from '../expressions/variable';\n\ninterface TimerState {\n state: 'stopped' | 'running' | 'paused';\n definition: DivTimer;\n duration?: number;\n tick?: number;\n durationTimeout?: number;\n tickTimeout?: number;\n tickStarted?: number;\n tickPassed?: number;\n tickCount?: number;\n tickCountPredict?: number;\n durationStarted?: number;\n durationPassed?: number;\n hold?: boolean;\n}\n\nconst AVAIL_ACTIONS_NAMES = ['start', 'stop', 'pause', 'resume', 'cancel', 'reset'] as const;\n\ntype AVAIL_ACTIONS_LIST = typeof AVAIL_ACTIONS_NAMES[number];\n\nconst AVAIL_ACTIONS = new Set<string>(AVAIL_ACTIONS_NAMES);\n\ntype ApplyVarsFunc = <T>(json: T) => MaybeMissing<T>;\n\ntype HasVariableWithTypeFunc = (name: string, type: VariableType) => boolean;\n\ntype SetVariableValueFunc = (name: string, value: unknown) => void;\n\ntype ExecAnyActionsFunc = (actions: MaybeMissing<Action[]> | undefined, processUrls?: boolean) => Promise<void>;\n\nexport class TimersController {\n private readonly timers: Map<string, TimerState> = new Map();\n private readonly logError: LogError;\n private readonly applyVars: ApplyVarsFunc;\n private readonly hasVariableWithType: HasVariableWithTypeFunc;\n private readonly setVariableValue: SetVariableValueFunc;\n private readonly execAnyActions: ExecAnyActionsFunc;\n private readonly visibilityHandler: () => void;\n private awaitActions: {\n id: string;\n action: AVAIL_ACTIONS_LIST;\n }[] = [];\n\n constructor(opts: {\n logError: LogError;\n applyVars: ApplyVarsFunc;\n hasVariableWithType: HasVariableWithTypeFunc;\n setVariableValue: SetVariableValueFunc;\n execAnyActions: ExecAnyActionsFunc;\n }) {\n this.logError = opts.logError;\n this.applyVars = opts.applyVars;\n this.hasVariableWithType = opts.hasVariableWithType;\n this.setVariableValue = opts.setVariableValue;\n this.execAnyActions = opts.execAnyActions;\n\n this.visibilityHandler = () => {\n if (document.visibilityState === 'visible') {\n this.awaitActions.forEach(({ id, action }) => {\n this.execTimerAction(id, action);\n });\n this.awaitActions = [];\n this.unholdAll();\n } else {\n this.holdAll();\n }\n };\n\n document.addEventListener('visibilitychange', this.visibilityHandler);\n }\n\n destroy(): void {\n document.removeEventListener('visibilitychange', this.visibilityHandler);\n\n for (const [_id, timer] of this.timers) {\n this.stopTimerTimeouts(timer);\n }\n }\n\n createTimer(timer: DivTimer) {\n if (!timer?.id) {\n this.logError(wrapError(new Error('Missing timer id')));\n return;\n }\n if (!(timer.duration || timer.tick_interval && (timer.value_variable || timer.tick_actions))) {\n this.logError(wrapError(new Error('Misconfigured timer'), {\n additional: {\n id: timer.id\n }\n }));\n return;\n }\n\n this.timers.set(timer.id, {\n state: 'stopped',\n definition: timer\n });\n }\n\n execTimerAction(id: string | null, action: string | null) {\n if (!id || !action || !this.timers.has(id) || !AVAIL_ACTIONS.has(action)) {\n this.logError(wrapError(new Error('Incorrect timer action'), {\n additional: {\n id,\n action\n }\n }));\n return;\n }\n const actionTyped = action as AVAIL_ACTIONS_LIST;\n\n if (document.visibilityState !== 'visible') {\n // wait till the page is visible\n this.awaitActions.push({\n id,\n action: actionTyped\n });\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const timer = this.timers.get(id)!;\n this[actionTyped](timer);\n }\n\n private stopTimerTimeouts(timer: TimerState): void {\n if (timer.durationTimeout) {\n clearTimeout(timer.durationTimeout);\n timer.durationTimeout = undefined;\n }\n if (timer.tickTimeout) {\n clearTimeout(timer.tickTimeout);\n timer.tickTimeout = undefined;\n }\n }\n\n private tickOrUnholdAction(timer: TimerState): void {\n const now = performance.now();\n const value = (timer.durationPassed || 0) + now - (timer.durationStarted || 0);\n if (timer.duration && value > timer.duration) {\n return;\n }\n this.updateVariable(timer, value);\n this.callActions(timer, 'tick');\n\n if (timer.tickCount !== undefined) {\n ++timer.tickCount;\n }\n }\n\n private startOrResume(timer: TimerState): void {\n timer.state = 'running';\n timer.hold = false;\n\n timer.durationStarted = performance.now();\n\n const duration = timer.duration;\n if (duration) {\n timer.durationTimeout = window.setTimeout(() => {\n this.updateVariable(timer, duration);\n if (\n timer.tickCountPredict &&\n timer.tickCount !== undefined &&\n timer.tickCount < timer.tickCountPredict\n ) {\n this.callActions(timer, 'tick');\n }\n this.stop(timer);\n }, Math.max(0, duration - (timer.durationPassed || 0)));\n }\n const tick = timer.tick;\n if (tick) {\n const startTick = () => {\n const started = timer.tickStarted = performance.now();\n const duration = Math.max(0, tick - (timer.tickPassed || 0));\n timer.tickTimeout = window.setTimeout(() => {\n this.tickOrUnholdAction(timer);\n timer.tickPassed = ((performance.now() - started) - duration) % tick;\n startTick();\n }, duration);\n };\n\n startTick();\n }\n }\n\n private start(timer: TimerState): void {\n if (timer.state === 'running') {\n this.logError(wrapError(new Error('The timer is already running')));\n return;\n } else if (timer.state === 'paused') {\n this.logError(wrapError(new Error('The timer is paused')));\n return;\n }\n\n const variableName = timer.definition.value_variable;\n if (variableName && !this.hasVariableWithType(variableName, 'integer')) {\n this.logError(wrapError(new Error('Cannot find variable'), {\n additional: {\n name: variableName\n }\n }));\n return;\n }\n\n if (variableName) {\n this.setVariableValue(variableName, 0);\n }\n\n if (timer.definition.duration) {\n timer.duration = this.applyVars(timer.definition.duration);\n }\n if (timer.definition.tick_interval) {\n timer.tick = this.applyVars(timer.definition.tick_interval);\n }\n // duration < 0 is incorrect\n // tick_interval <= is incorrect\n if (\n timer.duration !== undefined && timer.duration < 0 ||\n timer.tick !== undefined && timer.tick <= 0\n ) {\n this.logError(wrapError(new Error('Incorrect timer properties'), {\n additional: {\n id: timer.definition.id\n }\n }));\n return;\n }\n\n if (timer.duration !== undefined && timer.tick !== undefined) {\n timer.tickCount = 0;\n timer.tickCountPredict = Math.floor(timer.duration / timer.tick);\n }\n\n this.startOrResume(timer);\n }\n\n private stop(timer: TimerState): void {\n if (timer.state === 'stopped') {\n this.logError(wrapError(new Error('The timer has already been stopped')));\n return;\n }\n\n timer.state = 'stopped';\n timer.durationPassed = 0;\n timer.tickPassed = 0;\n this.stopTimerTimeouts(timer);\n this.callActions(timer, 'end');\n }\n\n private pause(timer: TimerState): void {\n if (timer.state === 'stopped') {\n this.logError(wrapError(new Error('The timer has already been stopped')));\n return;\n } else if (timer.state === 'paused') {\n this.logError(wrapError(new Error('The timer has already been paused')));\n return;\n }\n\n timer.state = 'paused';\n\n this.stopTimerTimeouts(timer);\n\n const now = performance.now();\n\n if (timer.durationStarted) {\n timer.durationPassed = (timer.durationPassed || 0) + now - timer.durationStarted;\n }\n if (timer.tickStarted) {\n timer.tickPassed = (timer.tickPassed || 0) + now - timer.tickStarted;\n }\n\n const variableName = timer.definition.value_variable;\n if (variableName && timer.durationPassed) {\n this.setVariableValue(variableName, Math.round(timer.durationPassed));\n }\n }\n\n private resume(timer: TimerState): void {\n if (timer.state === 'stopped') {\n this.logError(wrapError(new Error('The timer has already been stopped')));\n return;\n } else if (timer.state === 'running') {\n this.logError(wrapError(new Error('The timer is already running')));\n return;\n }\n\n this.startOrResume(timer);\n }\n\n private cancel(timer: TimerState): void {\n if (timer.state === 'stopped') {\n return;\n }\n\n timer.state = 'stopped';\n timer.durationPassed = 0;\n timer.tickPassed = 0;\n this.stopTimerTimeouts(timer);\n }\n\n private reset(timer: TimerState): void {\n this.cancel(timer);\n this.start(timer);\n }\n\n private updateVariable(timer: TimerState, value: number): void {\n const variableName = timer.definition.value_variable;\n if (variableName) {\n this.setVariableValue(variableName, Math.round(value));\n }\n }\n\n private callActions(timer: TimerState, type: 'tick' | 'end'): void {\n const actions = timer.definition[type === 'end' ? 'end_actions' : 'tick_actions'];\n\n if (actions) {\n const actionsWithExpressions = this.applyVars(actions);\n this.execAnyActions(actionsWithExpressions, false);\n }\n }\n\n private holdAll(): void {\n for (const [_id, timer] of this.timers) {\n if (timer.state === 'running') {\n timer.hold = true;\n this.stopTimerTimeouts(timer);\n }\n }\n }\n\n private unholdAll(): void {\n for (const [_id, timer] of this.timers) {\n if (timer.state === 'running' && timer.hold) {\n // All timeouts were canceled, but the time is not stopped\n const now = performance.now();\n\n if (timer.durationStarted) {\n timer.durationPassed = (timer.durationPassed || 0) + now - timer.durationStarted;\n }\n if (timer.tickStarted) {\n timer.tickPassed = (timer.tickPassed || 0) + now - timer.tickStarted;\n }\n\n if (timer.tick) {\n // Run tick actions and update variable instantly after the page is shown, if:\n // Timer has the tick_interval\n // Timer is not done yet (check inside function)\n this.tickOrUnholdAction(timer);\n }\n\n this.startOrResume(timer);\n }\n }\n }\n}\n","<script lang=\"ts\" context=\"module\">\n import { type Readable, type Writable, writable } from 'svelte/store';\n\n let isPointerFocus = writable(true);\n let rootInstancesCount = 0;\n\n function onWindowKeyDown() {\n isPointerFocus.set(false);\n }\n\n function onWindowPointerDown() {\n isPointerFocus.set(true);\n }\n</script>\n\n<script lang=\"ts\">\n import { onDestroy, onMount, setContext, tick } from 'svelte';\n import { derived } from 'svelte/store';\n\n import css from './Root.module.css';\n\n import type {\n Action,\n VisibilityAction,\n ComponentCallback,\n CustomActionCallback,\n DivBase,\n DivJson,\n ErrorCallback,\n Platform,\n StatCallback,\n TemplateContext,\n Theme,\n Customization,\n DivExtension,\n DivExtensionContext,\n DivExtensionClass,\n TypefaceProvider,\n DisappearAction,\n FetchInit\n } from '../../typings/common';\n import type { AppearanceTransition, DivBaseData, Tooltip, TransitionChange } from '../types/base';\n import type { SwitchElements, Overflow } from '../types/switch-elements';\n import type { TintMode } from '../types/image';\n import type { VideoElements } from '../types/video';\n import type { Patch } from '../types/patch';\n import Unknown from './utilities/Unknown.svelte';\n import RootSvgFilters from './utilities/RootSvgFilters.svelte';\n import { ParentMethods, ROOT_CTX, RootCtxValue, Running } from '../context/root';\n import { applyTemplate } from '../utils/applyTemplate';\n import { wrapError, WrappedError } from '../utils/wrapError';\n import { simpleCheckInput } from '../utils/simpleCheckInput';\n import { ACTION_CTX, ActionCtxValue } from '../context/action';\n import { STATE_CTX, StateCtxValue, StateInterface } from '../context/state';\n import { constStore } from '../utils/constStore';\n import {\n MaybeMissing,\n prepareVars\n } from '../expressions/json';\n import { storesMap } from '../stores';\n import { evalExpression } from '../expressions/eval';\n import { parse } from '../expressions/expressions';\n import { gatherVarsFromAst } from '../expressions/utils';\n import { Truthy } from '../utils/truthy';\n import { createVariable, TYPE_TO_CLASS, Variable, VariableType } from '../expressions/variable';\n import {\n getControllerStore,\n getControllerVars,\n GlobalVariablesController\n } from '../expressions/globalVariablesController';\n import { getUrlSchema, isBuiltinSchema } from '../utils/url';\n import { TimersController } from '../utils/timers';\n import TooltipView from './tooltip/Tooltip.svelte';\n\n export let id: string;\n export let json: Partial<DivJson> = {};\n export let platform: Platform = 'auto';\n export let theme: Theme = 'system';\n export let globalVariablesController: GlobalVariablesController = new GlobalVariablesController();\n export let mix = '';\n export let customization: Customization = {};\n export let builtinProtocols: string[] = ['http', 'https', 'tel', 'mailto', 'intent'];\n export let extensions: Map<string, DivExtensionClass> = new Map();\n export let onError: ErrorCallback | undefined = undefined;\n export let onStat: StatCallback | undefined = undefined;\n export let onCustomAction: CustomActionCallback | undefined = undefined;\n export let onComponent: ComponentCallback | undefined = undefined;\n export let typefaceProvider: TypefaceProvider = _fontFamily => '';\n export let fetchInit: FetchInit = {};\n export let tooltipRoot: HTMLElement | undefined = undefined;\n\n let isDesktop = writable(platform === 'desktop');\n if (platform === 'auto' && typeof matchMedia !== 'undefined') {\n const touchQuery = matchMedia('(any-pointer: coarse)');\n isDesktop.set(!touchQuery.matches);\n touchQuery.addListener(() => {\n isDesktop.set(!touchQuery.matches);\n });\n }\n\n let currentTheme: 'light' | 'dark' = 'light';\n let themeQuery: MediaQueryList | null = null;\n $: if (theme === 'light' || theme === 'dark') {\n currentTheme = theme;\n } else if (theme === 'system') {\n if (typeof matchMedia !== 'undefined') {\n if (!themeQuery) {\n themeQuery = matchMedia('(prefers-color-scheme: dark)');\n themeQuery.addListener(themeQueryListener);\n }\n currentTheme = themeQuery.matches ? 'dark' : 'light';\n } else {\n currentTheme = 'light';\n }\n } else {\n logError(wrapError(new Error('Unsupported theme')));\n }\n\n $: if (currentTheme) {\n updateTheme();\n }\n\n function themeQueryListener(): void {\n if (theme !== 'system' || !themeQuery) {\n return;\n }\n\n currentTheme = themeQuery.matches ? 'dark' : 'light';\n }\n\n export function setTheme(newTheme: Theme): void {\n theme = newTheme;\n }\n\n export function getDebugVariables() {\n if (!process.env.DEVTOOL) {\n return;\n }\n\n return localVariables;\n }\n\n const builtinSet = new Set(builtinProtocols);\n\n let hasError = false;\n\n if (!json) {\n hasError = true;\n logError(wrapError(new Error('\"json\" prop is required')));\n }\n\n if (!id) {\n hasError = true;\n logError(wrapError(new Error('\"id\" prop is required')));\n }\n\n let initialError = simpleCheckInput(json);\n let templateContext: TemplateContext = {};\n const templates = json.templates || {};\n\n if (initialError) {\n hasError = true;\n logError(initialError);\n }\n\n const running: Record<Running, boolean> = {\n stateChange: false\n };\n\n // Will notify about new global variables\n const globalVariablesStore = getControllerStore(globalVariablesController);\n // Global variables only\n const globalVariables = getControllerVars(globalVariablesController);\n // Local variables only\n const localVariables = new Map<string, Variable>();\n // Local and global variables combined, with local in precedence\n const variables = new Map<string, Variable>();\n // Stores for notify unset global variables\n const awaitingGlobalVariables = new Map<string, Writable<any>>();\n let timersController: TimersController | null = null;\n\n let tooltipCounter = 0;\n let tooltips: {\n internalId: number;\n ownerNode: HTMLElement;\n desc: Tooltip;\n timeoutId: number | null;\n }[] = [];\n\n function getVariableInstance(name: string, type: VariableType): Variable | undefined {\n const variable = variables.get(name);\n\n if (variable) {\n const foundType = variable.getType();\n\n if (foundType !== type) {\n logError(wrapError(new Error(`Variable should have type \"${type}\"`), {\n additional: {\n name,\n foundType\n }\n }));\n return;\n }\n }\n\n return variable;\n }\n\n function getCustomization<K extends keyof Customization>(prop: K): Customization[K] | undefined {\n return customization?.[prop];\n }\n\n function getDerivedFromVars<T>(jsonProp: T): Readable<MaybeMissing<T>> {\n if (!jsonProp) {\n return constStore(jsonProp);\n }\n\n const prepared = prepareVars(jsonProp, logError);\n if (!prepared.vars.length) {\n if (prepared.hasExpression) {\n return constStore(prepared.applyVars(variables));\n }\n return constStore(jsonProp);\n }\n const stores = prepared.vars.map(name => {\n return variables.get(name) || awaitVariableChanges(name);\n }).filter(Truthy);\n\n return derived(stores, () => prepared.applyVars(variables));\n }\n\n function getJsonWithVars<T>(jsonProp: T): MaybeMissing<T> {\n const prepared = prepareVars(jsonProp, logError);\n\n if (!prepared.hasExpression) {\n return jsonProp;\n }\n\n return prepared.applyVars(variables);\n }\n\n function logError(error: WrappedError): void {\n if (onError) {\n onError({\n error\n });\n } else if (error?.level === 'warn') {\n console.warn(error);\n } else {\n console.error(error);\n }\n }\n\n function logStat(type: string, action: Action): void {\n if (onStat) {\n onStat({\n type,\n action\n });\n }\n }\n\n function hasTemplate(templateName: string): boolean {\n return templateName in templates;\n }\n\n function processTemplate(json: DivBaseData, templateContext: TemplateContext): {\n json: DivBaseData;\n templateContext: TemplateContext;\n } {\n if (!json) {\n return {\n json,\n templateContext\n };\n }\n\n const usedTypes = new Set([json.type]);\n\n while (json.type in templates) {\n ({\n json,\n templateContext\n } = applyTemplate(json as DivBase, templateContext, templates, logError));\n\n if (usedTypes.has(json.type)) {\n return {\n json,\n templateContext\n };\n }\n usedTypes.add(json.type);\n }\n\n return {\n json,\n templateContext\n };\n }\n\n function registerComponentReal({\n node,\n json,\n origJson,\n templateContext\n }: {\n node: HTMLElement;\n json: Partial<DivBaseData>;\n origJson: DivBase | undefined;\n templateContext: TemplateContext;\n }): void {\n if (onComponent) {\n onComponent({\n type: 'mount',\n node,\n json: json as DivBase,\n origJson,\n templateContext\n });\n }\n }\n function unregisterComponentReal({\n node\n }: {\n node: HTMLElement;\n }): void {\n if (onComponent) {\n onComponent({\n type: 'destroy',\n node\n });\n }\n }\n\n let idCounter = 0;\n function genId(key: string): string {\n if (process.env.IS_PROD) {\n return `${id}-${idCounter++}`;\n }\n return `${id}-${key}-${idCounter++}`;\n }\n\n function genClass(key: string): string {\n return `divkit-${genId(key)}`;\n }\n\n let svgFiltersMap: Record<string, string> = {};\n let svgFilterUsages: Record<string, number> = {};\n\n function addSvgFilter(color: string, mode: TintMode): string {\n const key = `${color}:${mode}`;\n svgFilterUsages[key] = svgFilterUsages[key] || 0;\n ++svgFilterUsages[key];\n\n if (svgFiltersMap[key]) {\n return svgFiltersMap[key];\n }\n\n const filterId = `${genId('root')}-svg-filter`;\n svgFiltersMap = {\n ...svgFiltersMap,\n [key]: filterId\n };\n\n return filterId;\n }\n\n function removeSvgFilter(color: string | undefined, mode: TintMode): void {\n if (!color) {\n return;\n }\n\n const key = `${color}:${mode}`;\n if (!svgFilterUsages[key]) {\n return;\n }\n\n if (--svgFilterUsages[key] === 0) {\n svgFiltersMap = Object.keys(svgFiltersMap).reduce((acc, item) => {\n if (svgFilterUsages[item]) {\n acc[item] = svgFiltersMap[item];\n }\n return acc;\n }, {} as typeof svgFiltersMap);\n }\n }\n\n function setState(stateId: string | null): void {\n if (!process.env.ENABLE_COMPONENT_STATE && process.env.ENABLE_COMPONENT_STATE !== undefined) {\n throw new Error('State is not supported');\n }\n\n if (!stateId) {\n throw new Error('Missing state id');\n }\n\n let state: StateInterface = stateInterface;\n let parts = stateId.split('/');\n\n parts = ['root', ...parts];\n if (parts.length < 2 || parts.length % 2 !== 0) {\n throw new Error('Incorrect state id format');\n }\n\n for (let i = 0; i < parts.length; i += 2) {\n const divId = parts[i];\n const selectedStateId = parts[i + 1];\n\n let childState = state.getChild(divId);\n if (childState) {\n childState.setState(selectedStateId);\n state = childState;\n } else {\n return;\n }\n }\n }\n\n function setCurrentItem(id: string | null, item: string | null): void {\n if (!id || !item) {\n throw new Error('Missing data for \"set-current-item\" action');\n }\n\n if (isNaN(Number(item))) {\n throw new Error('Incorrect item for \"set-current-item\" action');\n }\n\n const instance = getInstance<SwitchElements>(id);\n\n if (instance) {\n instance.setCurrentItem(Number(item));\n }\n }\n\n function setPreviousItem(id: string | null, overflow: string | null): void {\n if (!id) {\n throw new Error('Missing id for \"set-previous-item\" action');\n }\n\n if (overflow && overflow !== 'clamp' && overflow !== 'ring') {\n throw new Error('Incorrect overflow value for \"set-previous-item\" action');\n }\n\n overflow = overflow || 'clamp';\n\n const instance = getInstance<SwitchElements>(id);\n\n if (instance) {\n instance.setPreviousItem(overflow as Overflow);\n }\n }\n\n function setNextItem(id: string | null, overflow: string | null): void {\n if (!id) {\n throw new Error('Missing id for \"set-next-item\" action');\n }\n\n if (overflow && overflow !== 'clamp' && overflow !== 'ring') {\n throw new Error('Incorrect overflow value for \"set-next-item\" action');\n }\n\n overflow = overflow || 'clamp';\n\n const instance = getInstance<SwitchElements>(id);\n\n if (instance) {\n instance.setNextItem(overflow as Overflow);\n }\n }\n\n function callVideoAction(id: string | null, action: string | null): void {\n if (id) {\n const instance = getInstance<VideoElements>(id);\n\n if (instance) {\n if (action === 'start') {\n instance.start();\n } else if (action === 'pause') {\n instance.pause();\n } else {\n logError(wrapError(new Error('Unknown video action'), {\n additional: {\n id,\n action\n }\n }));\n }\n } else {\n logError(wrapError(new Error('Video component is not found'), {\n additional: {\n id,\n action\n }\n }));\n }\n } else {\n logError(wrapError(new Error('Missing id in video action'), {\n additional: {\n action\n }\n }));\n }\n }\n\n function callDownloadAction(\n url: string | null,\n action: MaybeMissing<Action | VisibilityAction | DisappearAction>\n ): void {\n if (url) {\n let init;\n if (typeof fetchInit === 'function') {\n init = fetchInit(url);\n } else {\n init = fetchInit;\n }\n fetch(url, init).then(res => {\n if (!res.ok) {\n throw new Error('Response is not ok');\n }\n return res.json();\n }).then((json: Patch) => {\n if (!json) {\n logError(wrapError(new Error('Incorrect patch'), {\n additional: {\n url\n }\n }));\n return;\n }\n if (json.templates) {\n for (const name in json.templates) {\n if (!templates.hasOwnProperty(name)) {\n templates[name] = json.templates[name];\n }\n }\n }\n if (Array.isArray(json.patch?.changes)) {\n if (json.patch.mode === 'transactional') {\n const failed = json.patch.changes.find(change => !parentOfMap.has(change.id));\n if (failed) {\n logError(wrapError(new Error('Skipping transactional, child is not found'), {\n additional: {\n url,\n id: failed.id\n }\n }));\n execAnyActions(action.download_callbacks?.on_fail_actions);\n return;\n }\n }\n json.patch.changes.forEach(change => {\n const methods = parentOfMap.get(change.id);\n if (methods) {\n methods.replaceWith(change.id, change.items);\n }\n });\n execAnyActions(action.download_callbacks?.on_success_actions);\n }\n }).catch(err => {\n logError(wrapError(new Error('Failed to download the patch'), {\n additional: {\n url,\n originalError: err\n }\n }));\n execAnyActions(action.download_callbacks?.on_fail_actions);\n });\n } else {\n logError(wrapError(new Error('Missing url in download action'), {\n additional: {\n url\n }\n }));\n }\n }\n\n function callShowTooltip(id: string | null, multiple: string | null): void {\n if (!id) {\n logError(wrapError(new Error('Missing id in show_tooltip action')));\n return;\n }\n const item = tooltipMap.get(id);\n if (!item) {\n logError(wrapError(new Error('Tooltip with the provided id is not found'), {\n additional: {\n id\n }\n }));\n return;\n }\n if (multiple !== 'true' && tooltips.some(it => it.desc.id === id)) {\n return;\n }\n\n const info = {\n internalId: ++tooltipCounter,\n ownerNode: item.onwerNode,\n desc: item.tooltip,\n timeoutId: 0\n };\n tooltips = [...tooltips, info];\n\n const duration = item.tooltip.duration ?? 5000;\n if (duration) {\n info.timeoutId = window.setTimeout(() => {\n info.timeoutId = 0;\n tooltips = tooltips.filter(it => it.internalId !== info.internalId);\n }, duration);\n }\n }\n\n function callHideTooltip(id: string | null): void {\n if (!id) {\n logError(wrapError(new Error('Missing id in hide_tooltip action')));\n return;\n }\n tooltips = tooltips.filter(it => {\n const res = it.desc.id !== id;\n\n if (!res && it.timeoutId) {\n clearTimeout(it.timeoutId);\n it.timeoutId = null;\n }\n\n return res;\n });\n }\n\n export function execAction(action: MaybeMissing<Action | VisibilityAction | DisappearAction>): void {\n const actionUrl = action.url ? String(action.url) : '';\n\n if (actionUrl) {\n try {\n const url = actionUrl.replace(/div-action:\\/\\//, '');\n const parts = /([^?]+)\\?(.+)/.exec(url);\n if (!parts) {\n return;\n }\n const params = new URLSearchParams(parts[2]);\n\n switch (parts[1]) {\n case 'set_state':\n setState(params.get('state_id'));\n break;\n case 'set_current_item':\n setCurrentItem(params.get('id'), params.get('item'));\n break;\n case 'set_previous_item':\n setPreviousItem(params.get('id'), params.get('overflow'));\n break;\n case 'set_next_item':\n setNextItem(params.get('id'), params.get('overflow'));\n break;\n case 'set_variable':\n const name = params.get('name');\n const value = params.get('value');\n\n if (name && value !== null) {\n const variableInstance = variables.get(name);\n if (variableInstance) {\n if (variableInstance.getType() === 'dict') {\n logError(wrapError(new Error('Setting dict variables is not supported'), {\n additional: {\n name\n }\n }));\n } else {\n variableInstance.set(value);\n }\n } else {\n logError(wrapError(new Error('Cannot find variable'), {\n additional: {\n name\n }\n }));\n }\n } else {\n logError(wrapError(new Error('Incorrect set_variable_action'), {\n additional: {\n url\n }\n }));\n }\n break;\n case 'timer':\n const timerAction = params.get('action');\n const id = params.get('id');\n\n if (timersController) {\n timersController.execTimerAction(id, timerAction);\n } else {\n logError(wrapError(new Error('Incorrect timer action'), {\n additional: {\n id,\n action: timerAction\n }\n }));\n }\n break;\n case 'video':\n callVideoAction(params.get('id'), params.get('action'));\n break;\n case 'download':\n callDownloadAction(params.get('url'), action);\n break;\n case 'show_tooltip':\n callShowTooltip(params.get('id'), params.get('multiple'));\n break;\n case 'hide_tooltip':\n callHideTooltip(params.get('id'));\n break;\n default:\n logError(wrapError(new Error('Unknown type of action'), {\n additional: {\n url: actionUrl\n }\n }));\n }\n } catch (err: any) {\n logError(wrapError(err, {\n additional: {\n url: actionUrl\n }\n }));\n }\n }\n }\n\n async function execAnyActions(actions: MaybeMissing<Action[]> | undefined, processUrls?: boolean): Promise<void> {\n if (!actions || !Array.isArray(actions)) {\n return;\n }\n\n for (let i = 0; i < actions.length; ++i) {\n let action = actions[i];\n\n const actionUrl = action.url;\n if (actionUrl) {\n const schema = getUrlSchema(actionUrl);\n if (schema) {\n if (isBuiltinSchema(schema, builtinSet)) {\n if (processUrls) {\n if (action.target === '_blank') {\n const win = window.open('', '_blank');\n if (win) {\n win.opener = null;\n win.location = actionUrl;\n }\n } else {\n location.href = actionUrl;\n }\n }\n } else if (schema === 'div-action') {\n execAction(action);\n await tick();\n } else if (action.log_id) {\n execCustomAction(action as Action & { url: string });\n await tick();\n }\n }\n }\n }\n actions.forEach(action => {\n if (action.log_id) {\n logStat('click', action as Action);\n }\n });\n }\n\n function execCustomAction(action: (Action | VisibilityAction) & { url: string }): void {\n onCustomAction?.(action);\n }\n\n function isRunning(type: Running): boolean {\n return running[type];\n }\n\n function setRunning(type: Running, val: boolean): void {\n running[type] = val;\n }\n\n const instancesMap: Map<string, unknown> = new Map();\n const parentOfMap: Map<string, ParentMethods> = new Map();\n const tooltipMap: Map<string, {\n onwerNode: HTMLElement;\n tooltip: Tooltip;\n }> = new Map();\n function registerInstance<T>(id: string, block: T) {\n if (instancesMap.has(id)) {\n logError(wrapError(new Error('Duplicate instance id'), {\n additional: {\n id\n }\n }));\n return;\n }\n\n instancesMap.set(id, block);\n }\n function unregisterInstance(id: string) {\n instancesMap.delete(id);\n }\n\n function getInstance<T>(id: string): T | undefined {\n if (!instancesMap.has(id)) {\n logError(wrapError(new Error('Missing instance with id'), {\n additional: {\n id\n }\n }));\n return;\n }\n\n return instancesMap.get(id) as T;\n }\n\n function registerParentOf(id: string, methods: ParentMethods): void {\n parentOfMap.set(id, methods);\n }\n\n function unregisterParentOf(id: string): void {\n parentOfMap.delete(id);\n }\n\n function registerTooltip(onwerNode: HTMLElement, tooltip: Tooltip): void {\n if (tooltipMap.has(tooltip.id)) {\n logError(wrapError(new Error('Duplicate tooltip id'), {\n additional: {\n id: tooltip.id\n }\n }));\n }\n\n tooltipMap.set(tooltip.id, {\n onwerNode,\n tooltip\n });\n }\n\n function unregisterTooltip(tooltip: Tooltip): void {\n tooltipMap.delete(tooltip.id);\n\n if (tooltips.some(it => it.desc.id === tooltip.id)) {\n tooltips = tooltips.filter(it => it.desc.id !== tooltip.id);\n }\n }\n\n const stores = new Map<string, Writable<any>>();\n\n function setStore(id: string) {\n if (stores.has(id)) {\n return;\n }\n\n stores.set(id, storesMap[id]());\n }\n\n function getStore<T>(id: string): Writable<T> {\n if (!stores.has(id)) {\n setStore(id);\n }\n\n return stores.get(id) as Writable<T>;\n }\n\n function filterDefinedVars(vars: Set<string>): Set<string> {\n for (const varName of vars) {\n if (variables.has(varName)) {\n vars.delete(varName);\n }\n }\n\n return vars;\n }\n\n function awaitVariableChanges(variableName: string): Readable<any> {\n const store = awaitingGlobalVariables.get(variableName) || writable(undefined);\n\n if (!awaitingGlobalVariables.has(variableName)) {\n awaitingGlobalVariables.set(variableName, store);\n }\n\n return store;\n }\n\n function waitForVars(vars: string[]): Promise<void> {\n const remaining = new Set(vars);\n\n filterDefinedVars(remaining);\n\n if (!remaining.size) {\n return Promise.resolve();\n }\n\n return new Promise(resolve => {\n const unsubscribe = globalVariablesStore.subscribe(() => {\n filterDefinedVars(remaining);\n\n if (!remaining.size) {\n unsubscribe();\n resolve();\n }\n });\n });\n }\n\n function updateTheme(): void {\n if (!palette) {\n return;\n }\n\n const list = palette[currentTheme];\n list.forEach(item => {\n const varInstance = variables.get(item.name);\n\n if (varInstance) {\n varInstance.setValue(item.color);\n }\n });\n }\n\n function getBuiltinProtocols(): Set<string> {\n return builtinSet;\n }\n\n function getExtension(id: string, params: object | undefined): DivExtension | undefined {\n const Builder = extensions.get(id);\n if (Builder) {\n return new Builder(params || {});\n }\n }\n\n function getExtensionContext(): DivExtensionContext {\n return {\n variables,\n logError\n };\n }\n\n setContext<RootCtxValue>(ROOT_CTX, {\n logError,\n logStat,\n hasTemplate,\n processTemplate,\n genId,\n genClass,\n execAction,\n execAnyActions,\n execCustomAction,\n isRunning,\n setRunning,\n registerInstance,\n unregisterInstance,\n registerParentOf,\n unregisterParentOf,\n registerTooltip,\n unregisterTooltip,\n onTooltipClose,\n tooltipRoot,\n addSvgFilter,\n removeSvgFilter,\n getDerivedFromVars,\n getJsonWithVars,\n getStore,\n getVariable: getVariableInstance,\n getCustomization,\n getBuiltinProtocols,\n getExtension,\n getExtensionContext,\n typefaceProvider,\n isDesktop,\n isPointerFocus,\n registerComponent: process.env.DEVTOOL ? registerComponentReal : undefined,\n unregisterComponent: process.env.DEVTOOL ? unregisterComponentReal : undefined\n });\n\n setContext<ActionCtxValue>(ACTION_CTX, {\n hasAction(): boolean {\n return false;\n }\n });\n\n const stateInterface: StateInterface = {\n setState(_stateId: string): void {\n throw new Error('Not implemented');\n },\n getChild(id: string): StateInterface | undefined {\n if (childStateMap && childStateMap.has(id)) {\n return childStateMap.get(id);\n }\n\n logError(wrapError(new Error('Missing state block with id'), {\n additional: {\n id\n }\n }));\n\n return undefined;\n }\n };\n\n let childStateMap: Map<string, StateInterface> | null = null;\n setContext<StateCtxValue>(STATE_CTX, {\n registerInstance(id: string, block: StateInterface) {\n if (!childStateMap) {\n childStateMap = new Map();\n }\n\n if (childStateMap.has(id)) {\n logError(wrapError(new Error('Duplicate state with id'), {\n additional: {\n id\n }\n }));\n } else {\n childStateMap.set(id, block);\n }\n },\n unregisterInstance(id: string) {\n childStateMap?.delete(id);\n },\n runVisibilityTransition(\n _json: DivBaseData,\n _templateContext: TemplateContext,\n _transitions: AppearanceTransition,\n _node: HTMLElement,\n _direction: 'in' | 'out'\n ) {\n return Promise.resolve();\n },\n registerChildWithTransitionIn(\n _json: DivBaseData,\n _templateContext: TemplateContext,\n _transitions: AppearanceTransition,\n _node: HTMLElement\n ) {\n return Promise.resolve();\n },\n registerChildWithTransitionOut(\n _json: DivBaseData,\n _templateContext: TemplateContext,\n _transitions: AppearanceTransition,\n _node: HTMLElement\n ) {\n return Promise.resolve();\n },\n registerChildWithTransitionChange(\n _json: DivBaseData,\n _templateContext: TemplateContext,\n _transitions: TransitionChange,\n _node: HTMLElement\n ) {\n return Promise.resolve();\n },\n hasTransitionChange(_id?: string): boolean {\n return false;\n },\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n registerChild(_id: string) {\n },\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n unregisterChild(_id: string) {\n }\n });\n\n function hasVariableWithType(name: string, type: VariableType): boolean {\n const instance = variables.get(name);\n\n return instance?.getType() === type;\n }\n\n function setVariableValue(name: string, value: unknown): void {\n const variableInstance = variables.get(name);\n if (variableInstance) {\n variableInstance.setValue(value);\n } else {\n logError(wrapError(new Error('Cannot find variable'), {\n additional: {\n name\n }\n }));\n }\n }\n\n const startVariables = json?.card?.variables;\n if (Array.isArray(startVariables)) {\n startVariables.forEach(variable => {\n if (variable && variable.type in TYPE_TO_CLASS && variable.name) {\n if (localVariables.has(variable.name)) {\n logError(wrapError(new Error('Duplicate variable'), {\n additional: {\n name: variable.name\n }\n }));\n\n return;\n }\n\n if (\n variable.type === 'integer' && typeof variable.value === 'number' &&\n (variable.value > Number.MAX_SAFE_INTEGER || variable.value < Number.MIN_SAFE_INTEGER)\n ) {\n logError(wrapError(new Error('The value of the integer variable could lose accuracy'), {\n level: 'warn',\n additional: {\n name: variable.name,\n value: variable.value\n }\n }));\n }\n\n try {\n const varInstance = createVariable(variable.name, variable.type, variable.value);\n\n localVariables.set(variable.name, varInstance);\n variables.set(variable.name, varInstance);\n } catch (err: any) {\n logError(wrapError(err, {\n additional: {\n name: variable.name\n }\n }));\n }\n }\n });\n }\n\n const palette = json.palette;\n if (palette) {\n const list = palette[currentTheme];\n list.forEach(item => {\n if (localVariables.has(item.name)) {\n logError(wrapError(new Error('Duplicate variable'), {\n additional: {\n name: item.name\n }\n }));\n\n return;\n }\n\n try {\n const varInstance = createVariable(item.name, 'color', item.color);\n\n localVariables.set(item.name, varInstance);\n variables.set(item.name, varInstance);\n } catch (err: any) {\n logError(wrapError(err, {\n additional: {\n name: item.name\n }\n }));\n }\n });\n }\n\n for (const [varName, variable] of globalVariables) {\n if (!variables.has(varName)) {\n variables.set(varName, variable);\n }\n }\n\n globalVariablesStore.subscribe(newVarName => {\n if (newVarName && !variables.has(newVarName)) {\n const varInstance = globalVariables.get(newVarName) as Variable;\n variables.set(newVarName, varInstance);\n\n const awaitingStore = awaitingGlobalVariables.get(newVarName);\n\n if (awaitingStore) {\n let counter = 0;\n varInstance.subscribe(() => {\n awaitingStore.set(++counter);\n });\n }\n }\n });\n\n const variableTriggers = json?.card?.variable_triggers;\n if (Array.isArray(variableTriggers)) {\n if (process.env.ENABLE_EXPRESSIONS) {\n variableTriggers.forEach(trigger => {\n let prevConditionResult = false;\n\n if (typeof trigger.condition !== 'string') {\n logError(wrapError(new Error('variable_trigger has a condition that is not a string'), {\n additional: {\n condition: trigger.condition\n }\n }));\n return;\n }\n\n const mode = trigger.mode || 'on_condition';\n\n if (mode !== 'on_variable' && mode !== 'on_condition') {\n logError(wrapError(new Error('variable_trigger has an unsupported mode'), {\n additional: {\n mode\n }\n }));\n return;\n }\n\n try {\n const ast = parse(trigger.condition, {\n startRule: 'JsonStringContents'\n });\n const exprVars = gatherVarsFromAst(ast);\n if (!exprVars.length) {\n logError(wrapError(new Error('variable_trigger must have variables in the condition'), {\n additional: {\n condition: trigger.condition\n }\n }));\n return;\n }\n\n waitForVars(exprVars).then(() => {\n const stores = exprVars.map(name => variables.get(name)).filter(Truthy);\n\n derived(stores, () => {\n const res = evalExpression(variables, ast);\n\n res.warnings.forEach(logError);\n\n return res.result;\n }).subscribe(conditionResult => {\n if (conditionResult.type === 'error') {\n logError(wrapError(new Error('variable_trigger condition execution error'), {\n additional: {\n message: conditionResult.value\n }\n }));\n return;\n }\n\n if (\n // if condition is truthy\n conditionResult.value &&\n // and trigger mode matches\n (mode === 'on_variable' || mode === 'on_condition' && prevConditionResult === false)\n ) {\n trigger.actions.forEach(action => {\n const resultAction = getJsonWithVars(action);\n if (resultAction.log_id) {\n execAction(resultAction as Action);\n }\n });\n }\n\n prevConditionResult = Boolean(conditionResult.value);\n });\n });\n } catch (err) {\n logError(wrapError(new Error('Unable to parse variable_trigger'), {\n additional: {\n condition: trigger.condition\n }\n }));\n }\n });\n } else {\n logError(wrapError(new Error('variable_trigger is not supported')));\n }\n }\n\n const timers = json?.card?.timers;\n if (timers) {\n const controller = timersController = new TimersController({\n logError,\n applyVars: getJsonWithVars,\n hasVariableWithType,\n setVariableValue,\n execAnyActions\n });\n timers.forEach(timer => controller.createTimer(timer));\n }\n\n const states = json?.card?.states;\n let rootStateDiv: DivBaseData | undefined;\n if (states && !hasError) {\n rootStateDiv = (process.env.ENABLE_COMPONENT_STATE || process.env.ENABLE_COMPONENT_STATE === undefined) ? {\n type: 'state',\n id: 'root',\n width: {\n type: 'match_parent',\n },\n height: {\n type: 'match_parent',\n },\n states: states.map(state => ({\n state_id: state.state_id.toString(),\n div: state.div\n }))\n } : states[0].div;\n }\n\n function onTooltipClose(internalId: number): void {\n tooltips = tooltips.filter(it => it.internalId !== internalId);\n }\n\n /**\n * Fix for the :active pseudo-class on iOS\n */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n function emptyTouchstartHandler() {}\n\n onMount(() => {\n rootInstancesCount++;\n\n if (rootInstancesCount === 1) {\n window.addEventListener('keydown', onWindowKeyDown);\n window.addEventListener('pointerdown', onWindowPointerDown);\n }\n });\n\n onDestroy(() => {\n rootInstancesCount--;\n\n if (!rootInstancesCount) {\n window.removeEventListener('keydown', onWindowKeyDown);\n window.removeEventListener('pointerdown', onWindowPointerDown);\n }\n\n if (timersController) {\n timersController.destroy();\n }\n\n tooltips.forEach(info => {\n if (info.timeoutId) {\n clearTimeout(info.timeoutId);\n info.timeoutId = null;\n }\n });\n });\n</script>\n\n{#if !hasError && rootStateDiv}\n <div\n class=\"{css.root}{$isDesktop ? ` ${css.root_platform_desktop}` : ''}{mix ? ` ${mix}` : ''}\"\n on:touchstart={emptyTouchstartHandler}\n >\n <RootSvgFilters {svgFiltersMap} />\n <Unknown\n div={rootStateDiv}\n {templateContext}\n layoutParams={{\n tooltips\n }}\n />\n </div>\n{/if}\n","import type { DivJson } from '../../typings/common';\nimport { wrapError, WrappedError } from './wrapError';\nimport { TYPE_MAP } from '../components/typeMap';\n\n/**\n * Simple check for json card\n * @param json\n * @returns Error string or null if everything fine\n */\nexport function simpleCheckInput(json?: Partial<DivJson>): WrappedError | null {\n if (!json) {\n return wrapError(new Error('Missing object'));\n }\n\n const card = json.card;\n const templates = json.templates || {};\n\n if (!card) {\n return wrapError(new Error('Missing card'));\n }\n\n if (!card.states || !card.states.length) {\n return wrapError(new Error('Missing states'));\n }\n\n for (const templateName in templates) {\n if (templates.hasOwnProperty(templateName)) {\n if (templateName in TYPE_MAP) {\n return wrapError(new Error('Template name collision'), {\n additional: {\n templateName\n }\n });\n }\n }\n }\n\n for (let i = 0; i < card.states.length; ++i) {\n if (!card.states[i].div) {\n return wrapError(new Error('Missing state div'), {\n additional: {\n stateId: card.states[i].state_id\n }\n });\n }\n if (typeof card.states[i].state_id !== 'number') {\n return wrapError(new Error('Missing state_id'), {\n additional: {\n index: i\n }\n });\n }\n }\n\n return null;\n}\n","import Root from './components/Root.svelte';\nimport type { Platform, TypefaceProvider } from '../typings/common';\nimport type { GlobalVariablesController } from './expressions/globalVariablesController';\n\nexport function render(opts: {\n json: unknown;\n id: string;\n globalVariablesController?: GlobalVariablesController;\n mix?: string;\n customization?: unknown;\n builtinProtocols?: unknown;\n onError?: unknown;\n typefaceProvider?: TypefaceProvider;\n platform?: Platform;\n}) {\n // Root has client-side typings, not a server one\n return (Root as any).render({\n id: opts.id,\n json: opts.json,\n globalVariablesController: opts.globalVariablesController,\n mix: opts.mix,\n customization: opts.customization,\n builtinProtocols: opts.builtinProtocols,\n onError: opts.onError,\n typefaceProvider: opts.typefaceProvider,\n platform: opts.platform\n }).html;\n}\n\nexport {\n createGlobalVariablesController\n} from './expressions/globalVariablesController';\n\nexport {\n createVariable\n} from './expressions/variable';\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Set","globals","window","globalThis","global","ResizeObserverSingleton","constructor","options","_defineProperty","WeakMap","undefined","this","observe","element","listener","_listeners","set","_getObserver","delete","_observer","unobserve","_this$_observer","ResizeObserver","entries","entry","_this$_listeners$get","target","noop","run","fn","run_all","fns","forEach","subscribe","store","callbacks","callback","unsub","unsubscribe","set_store_value","ret","value","current_component","set_current_component","component","get_current_component","Error","onDestroy","$$","on_destroy","push","setContext","context","getContext","Map","dirty_components","binding_callbacks","render_callbacks","flush_callbacks","resolved_promise","Promise","resolve","update_scheduled","tick","then","flush","add_render_callback","seen_callbacks","flushidx","saved_component","length","update","e","pop","i","has","add","clear","fragment","before_update","dirty","p","ctx","after_update","boolean_attributes","invalid_attribute_name_character","spread","args","attrs_to_add","attributes","assign","classes_to_add","classes","styles_to_add","styles","class","style","style_object_to_string","style_attribute","style_directive","style_object","individual_style","split","colon_index","indexOf","name","slice","trim","merge_ssr_styles","str","keys","test","toLowerCase","ATTR_REGEX","CONTENT_REGEX","escape","is_attr","String","pattern","lastIndex","escaped","last","ch","substring","escape_attribute_value","escape_object","result","each","items","array_like_or_iterator","Array","from","missing_component","$$render","validate_component","SvelteElement","create_ssr_component","props","bindings","slots","parent_component","on_mount","create","html","render","$$slots","title","head","css","code","map","join","add_attribute","boolean","filter","add_styles","get_custom_element_value","props_definition","transform","_props_definition$pro","type","JSON","stringify","parse","HTMLElement","$$componentCtor","use_shadow_dom","super","$$ctor","$$s","attachShadow","mode","addEventListener","$$l","$$c","$on","$$l_u","removeEventListener","async","$$cn","create_slot","node","c","document","createElement","attribute","removeAttribute","getAttribute","setAttribute","attr","m","anchor","insertBefore","insert","d","detaching","parentNode","removeChild","detach","existing_slots","childNodes","slot","get_custom_elements_slots","$$g_p","$$d","$$p_d","shadowRoot","_objectSpread","$$scope","reflect_attributes","$$r","reflect","attribute_value","attributeChangedCallback","_oldValue","newValue","_this$$$c","$set","disconnectedCallback","$destroy","attribute_name","find","subscriber_queue","writable","start","stop","subscribers","new_value","b","a","run_queue","subscriber","invalidate","size","derived","stores","initial_value","single","isArray","stores_array","every","Boolean","auto","started","values","pending","cleanup","sync","unsubscribers","ROOT_CTX","Symbol","wrapError","error","params","wrapped","level","additional","makeStyle","res","pxToEm","casted","Number","isNaN","Math","ceil","pxToEmWithUnits","padLeft","val","count","correctColor","color","alpha","defaultColor","charAt","parsedColor","parseColor","r","g","it","round","toString","toFixed","stringifyColorToCss","colorMatch","match","_","redPart","greenPart","bluePart","alphaPart","parseInt","htmlFilter","str2","replace","Truthy","getBackground","bgs","position","bg","opts","pos","image","solid","_opts$bg","colors","angle","gradient","_opts$bg3","image_url","imageSize","scale","imagePos","_opts$bg2","sizeVal","radius","RELATIVE_SIZE_MAP","radialCenterToCss","center_x","center_y","radial","reverse","reduce","acc","item","nearest_corner","farthest_corner","nearest_side","farthest_side","center","hpos","vpos","content_alignment_horizontal","content_alignment_vertical","getUrlSchema","url","exec","isBuiltinSchema","schema","builtinSchemas","checkPercentage","isVisibility","defaultVal","list","genClassName","mods","STATE_CTX","edgeInsertsToCss","edgeInsets","top","right","bottom","left","isNumber","num","isNonNegativeNumber","correctEdgeInserts","correctNonNegativeNumber","isDeepEqual","is","keysA","keysB","assignIfDifferent","newVal","correctCSSInterpolator","interpolator","correctNumber","flattenAnimation","animation","correctEdgeInsertsObject","borderRadius","cornersRadius","defaultRadius","fontSize","doNothing","ACTION_CTX","actions","$$props","doubleTapActions","longTapActions","cls","attrs","use","customAction","isNativeActionAnimation","rootCtx","actionCtx","hasAction","href","hasJSAction","logError","getBuiltinProtocols","rootCss","default","isPositiveNumber","getCssFilter","filters","background","stl","insets","opacity","_a","_b","_c","_d","_e","_f","json","origJson","templateContext","layoutParams","customDescription","customPaddings","customActions","additionalPaddings","heightByAspect","parentOf","replaceItems","HORIZONTAL_ALIGN_TO_GENERAL","VERTICAL_ALIGN_TO_GENERAL","baseline","stateCtx","currentNode","extensions","prevChilds","replaceWith","id","index","findIndex","newItems","splice","width","widthMin","widthMax","height","heightMin","heightMax","backgroundStyle","hasSeparateBg","borderStyle","borderElemStyle","hasBorder","strokeWidth","strokeColor","cornerRadius","backgroundRadius","selfPadding","margin","widthMods","widthNum","widthFlexGrow","widthFlexShrink","widthFill","hasWidthError","heightMods","heightNum","heightFlexGrow","heightFlexShrink","heightFill","hasHeightError","jsonTransitionTriggers","fakeElement","transition_triggers","hasStateChangeTrigger","hasVisibilityChangeTrigger","stateChangingInProgress","visibilityChangingInProgress","transitionChangeInProgress","animationOpacityStart","animationOpacityEnd","animationScaleStart","animationScaleEnd","transformOrigin","hasCustomFocus","focusActions","blurActions","actionAnimationList","actionAnimationTransition","isVisibilityInited","visibility","pivotXNum","pivotYNum","focusHandler","focus","$isPointerFocus","execAnyActions","blurHandler","unregisterParentOf","tooltips","tooltip","unregisterTooltip","registerParentOf","jsonFocus","getDerivedFromVars","jsonBorder","border","$jsonFocus","$jsonBorder","newBorderStyle","newBorderElemStyle","newHasBorder","newBackgroundRadius","has_shadow","shadow","offset","x","y","blur","stroke","corners_radius","correctBorderRadiusObject","corner_radius","corner","jsonPaddings","paddings","$jsonPaddings","padding","side","aVal","bVal","sumEdgeInsets","jsonMargins","margins","$jsonMargins","jsonWidth","jsonAlignmentHorizontal","alignment_horizontal","widthType","newWidth","newWidthMin","newWidthMax","newWidthMods","newFlexGrow","newFlexShrink","newWidthFill","newWidthError","$jsonWidth","overlapParent","parentHorizontalWrapContent","parentContainerOrientation","parentContainerWrap","parentLayoutOrientation","weight","constrained","min_size","max_size","align","$jsonAlignmentHorizontal","parentHAlign","jsonHeight","jsonAlignmentVertical","alignment_vertical","heightType","newHeight","newHeightMin","newHeightMax","newHeightMods","newHeightFill","newHeightError","$jsonHeight","parentVerticalWrapContent","$jsonAlignmentVertical","parentVAlign","parentOverlapMod","parentOverlapAbsoluteMod","gridArea","rowSpan","colSpan","jsonAlpha","$jsonAlpha","jsonAccessibility","accessibility","$jsonAccessibility","description","jsonBackground","$jsonBackground","some","transition_in","isRunning","transition_change","hasTransitionChange","jsonAction","action","jsonActions","jsonDoubleTapActions","doubletap_actions","jsonLongTapActions","longtap_actions","newActions","$jsonActions","$jsonAction","newDoubleTapActions","$jsonDoubleTapActions","newLongTapActions","$jsonLongTapActions","newFocusActions","on_focus","newBlurActions","on_blur","jsonActionAnimation","action_animation","$jsonActionAnimation","startValue","start_value","endValue","end_value","delay","start_delay","duration","jsonVisibility","prevVisibility","nextVisibility","correctVisibility","$jsonVisibility","direction","transition","transition_out","runVisibilityTransition","catch","onVisibilityChange","scrollSnap","jsonTransform","$jsonTransform","rotation","pivotX","pivot_x","pivotXCSSValue","pivotY","pivot_y","flexBasis","isPointerFocus","registerChildWithTransitionIn","registerChildWithTransitionOut","registerChildWithTransitionChange","visibilityActions","visibility_actions","visibility_action","disappearActions","disappear_actions","visibilityStatus","visible","finished","calcedList","calced","getJsonWithVars","visibility_percentage","visibility_duration","disappear_duration","log_limit","thresholds","IntersectionObserver","status","calcedParams","nowVisible","intersectionRatio","shouldProc","shouldClear","timer","setTimeout","limit","Infinity","calcedAction","actionUrl","execAction","log_id","execCustomAction","logStat","clearTimeout","threshold","visibilityAction","registerChild","registerTooltip","dev","getExtensionContext","instance","getExtension","mountView","destroy","unregisterChild","unmountView","correctPositiveNumber","fontWeightToCss","fontWeight","correctFontWeight","text","rootFontSize","textStyles","singleline","decoration","lineHeight","letterSpacing","fontFamily","newDecoration","underline","strike","font_size","line_height","letter_spacing","font_weight","font_family","typefaceProvider","text_color","topOffset","top_offset","correctAlignmentHorizontal","orientation","correctAlignmentVertical","correctBooleanInt","correctTintMode","tintMode","hasError","customLineHeight","maxHeight","lineClamp","multiline","halign","valign","rootTextColor","focusTextColor","selectable","renderList","usedTintColors","removeSvgFilter","jsonText","$jsonText","jsonRanges","ranges","jsonImages","images","jsonRootTextStyles","jsonTextSize","$jsonTextSize","jsonLineHeight","newLineHeight","$jsonLineHeight","jsonMaxLines","max_lines","$jsonMaxLines","newMaxHeight","newLineClamp","newMultiline","lines","$jsonRanges","$jsonImages","jsonHAlign","text_alignment_horizontal","$jsonHAlign","jsonVAlign","text_alignment_vertical","$jsonVAlign","isAllTextSameColor","end","jsonTextColor","isOnlyOneColorDefined","$jsonTextColor","newRootTextColor","jsonFocusTextColor","focused_text_color","$jsonFocusTextColor","jsonTruncate","truncate","$jsonTruncate","jsonTextGradient","text_gradient","newGradient","$jsonTextGradient","jsonSelectable","$jsonSelectable","textRanges","textImages","newRenderList","content","prevIndex","activeRanges","range","isStart","arrayIndex","sort","$jsonRootTextStyles","textStyles2","imageWidth","imageHeight","wrapperStyle","svgFilterId","tintColor","tint_color","tint_mode","addSvgFilter","updateRenderList","innerMods","prepareMargins","setAdditionalPadding","separator","crossAxis","hMargin","vMargin","show_at_start","show_at_end","calcItemsGap","lineSeparator","vals","separatorHMargins","separatorVMargins","lineSeparatorHMargins","lineSeparatorVMargins","show_between","correctDrawableStyle","drawable","availShapes","defaultValue","shape","includes","_shape$item_width","item_width","_shape$item_height","item_height","_shape$corner_radius$","_shape$corner_radius","_shape$radius","calcCircleSize","old","_stroke$width","borderColor","borderWidth","bgColor","background_color","boxShadow","calcDrawableStyle","hasGapSupport","flex","display","flexDirection","gap","appendChild","body","scrollHeight","appendSeparator","separators","separatorStyle","box0","box1","containingBox","leftMargin","rightMargin","topMargin","bottomMargin","max","appendSeparators","boxes","min","lastBox","throttledUpdated","timeout","prevRes","runTs","awaits","now","Date","abs","apply","arguments","simpleThrottle","parentElement","parentBbox","getBoundingClientRect","children","classList","contains","outerCss","rows","row","firstChild","shift","bbox","first","rowBoxes","elem","computed","getComputedStyle","parseFloat","marginTop","marginRight","marginBottom","marginLeft","getMarginBox","rowBox","mounted","mutationObserver","resizeObserver","disconnect","MutationObserver","records","record","childList","characterData","subtree","HALIGN_MAP","VALIGN_MAP","AVAIL_SEPARATOR_SHAPES","aspect","hasItemsError","contentVAlign","contentHAlign","childLayoutParams","jsonItems","childJson","childContext","processTemplate","jsonOrientation","correctContainerOrientation","$jsonOrientation","jsonContentVAlign","correctContentAlignmentVertical","$jsonContentVAlign","jsonContentHAlign","correctContentAlignmentHorizontal","$jsonContentHAlign","jsonLayoutMode","layout_mode","wrap","$jsonLayoutMode","jsonSeparator","$jsonSeparator","jsonLineSeparator","line_separator","$jsonLineSeparator","calcAdditionalPaddings","jsonAspect","newRatio","$jsonAspect","ratio","newChildLayoutParams","correctGeneralOrientation","jsonDelimiterStyle","delimiter_style","$jsonDelimiterStyle","hasContent","prepareBase64","data","startsWith","state","placeholderColor","backgroundImage","aspectPaddingBottom","animationInterpolator","animationFadeStart","animationDelay","animationDuration","filterClipPath","jsonImageUrl","jsonGifUrl","gif_url","imageUrl","$jsonImageUrl","$jsonGifUrl","isWidthContent","isHeightContent","jsonPreview","preview","$jsonPreview","jsonPlaceholderColor","placeholder_color","$jsonPlaceholderColor","jsonScale","$jsonScale","jsonPosition","correctImagePosition","$jsonPosition","jsonA11y","alt","$jsonA11y","jsonTintColor","jsonTintMode","newTintColor","$jsonTintColor","newTintMode","$jsonTintMode","jsonAppearanceAnimation","appearance_animation","$jsonAppearanceAnimation","jsonFilters","newFilter","newClipPath","$jsonFilters","loaded","isSpannedWeight","formatWeight","gridCalcTemplates","weights","minSizes","multiply","minSize","totalWeight","template","minTrackSize","childStore","resultItems","columnCount","columnsWeight","rowsWeight","columnsMinWidth","rowsMinHeight","rowCount","hasLayoutError","jsonColumnCount","column_count","$jsonColumnCount","row_span","columnSpan","column_span","used","childInfo","$childStore","widthWeight","heightWeight","j","joinTemplateSizes","sizes","temp","counter","debounce","scroller","itemsGridElem","galleryItemsWrappers","hasScrollLeft","hasScrollRight","leftClass","getCustomization","rightClass","isDesktop","gridGap","crossGridGap","crossSpacing","columns","itemSpacing","templateSizes","scrollerStyle","defaultItem","updateArrowsVisibilityDebounced","scrollLeft","scrollWidth","containerWidth","offsetWidth","getItems","maxLen","scrollToGalleryItem","galleryElements","behavior","isHorizontal","elementOffset","scrollDirection","scroll","calculateCurrentElementIndex","scrollerRect","firstFullyVisibleElement","el","checkIsFullyIntersecting","visibleElementsMap","checkIsIntersecting","firstVisibleElement","registerInstance","setCurrentItem","setPreviousItem","overflow","currentElementIndex","previousItem","setNextItem","isEdgeScroll","scrollTop","offsetHeight","nextItem","unregisterInstance","shouldCheckArrows","$isDesktop","itemsGrid","column","rebuildItemsGrid","jsonCrossContentAlignment","cross_content_alignment","correctAlignment","$jsonCrossContentAlignment","jsonItemSpacing","item_spacing","$jsonItemSpacing","jsonCrossSpacing","cross_spacing","$jsonCrossSpacing","gridTemplate","itemSize","jsonScrollMode","scroll_mode","newScrollerStyle","$jsonScrollMode","jsonRestrictParentScroll","restrict_parent_scroll","gridStyle","columnStyle","jsonDefaultItem","default_item","$jsonDefaultItem","$jsonRestrictParentScroll","itemsRow","rowIndex","instId","genId","tabsElem","panelsWrapper","swiperElem","jsonSelectedTab","selected_tab","tabActiveFontWeight","tabInactiveFontWeight","selected","tabFontSize","tabPaddings","tabLineHeight","tabLetterSpacing","tabBorderRadius","tabActiveFontFamily","tabInactiveFontFamily","tabActiveTextColor","tabInactiveTextColor","tabActiveBackground","tabInactiveBackground","tabItemSpacing","separatorBackground","separatorMargins","titlePadding","isSwipeInitialized","isAnimated","previousSelected","showedPanels","visiblePanels","setSelected","clientHeight","updateTransform","around","isShowed","updateShowedPanels","activePanel","getElementById","updateWrapperHeight","hidePanelsTimeout","currentTransform","clientWidth","selectedTab","querySelector","part","title_click_action","newLayoutParams","jsonTabStyle","tab_title_style","tabStyle","$jsonTabStyle","adjustedPaddings","correctBorderRadius","active_font_weight","inactive_font_weight","active_text_color","inactive_text_color","active_background_color","inactive_background_color","has_separator","jsonSeparatorColor","separator_color","jsonSeparatorPaddings","separator_paddings","$jsonSeparatorColor","$jsonSeparatorPaddings","jsonSwipeEnabled","switch_tabs_by_content_swipe_enabled","isSwipeEnabled","$jsonSwipeEnabled","jsonTitlePaddings","title_paddings","$jsonTitlePaddings","isSelected","actionable","role","tabindex","event","_event","selectItem","inited","animated","div","interpolateEasing","table","t","floor","t2","ownerNode","internalId","offsetX","offsetY","animationIn","animation_in","animationOut","animation_out","tooltipNode","Unknown","$$result","transitionChangeBoxes","childrenIds","childStateMap","animationList","childrenWithTransitionIn","childrenWithTransitionOut","childrenWithTransitionChange","stateId","div_id","selectedId","setRunning","resolvePromise","child","newState","state_id","selectedState","getChild","block","transitions","jsonDefaultStateId","default_state_id","states","initDefaultState","_selectedState","animationRoot","offsetLeft","offsetTop","desc","_g","pagerItemsWrapper","currentItem","prevSelectedItem","hasLayoutModeError","scrollToPagerItem","nextPagerItem","pagerElements","wrapperRect","gridAuto","neighbourPageWidth","neighbour_page_width","pageWidth","page_width","pagers","getStore","pagerId","newPagersMap","$pagers","pagerDataUpdate","selected_actions","runSelectedActions","AVAIL_SHAPES","indicatorItemsWrapper","pagerData","activeStyle","inactiveStyle","placement","spaceBetweenCenters","maxVisibleItems","jsonShape","jsonActiveItemColor","active_item_color","jsonInactiveItemColor","inactive_item_color","jsonActiveItemSize","active_item_size","jsonActiveShape","active_shape","jsonInactiveShape","inactive_shape","$jsonActiveShape","$jsonInactiveShape","$jsonShape","activeSize","$jsonActiveItemSize","$jsonInactiveItemColor","$jsonActiveItemColor","jsonSpaceBetweenCenters","space_between_centers","jsonItemsPlacement","items_placement","$jsonItemsPlacement","$jsonSpaceBetweenCenters","max_visible_items","pagersMap","pager_id","currentItemOffsetLeft","onPagerDataUpdate","isActiveItem","active","correctSliderTextStyle","textStyle","convertedColor","_offset$x","_offset$y","textColor","clamp","hasBigInt","BigInt","toBigIntNoCheck","MAX_INT","MIN_INT","toBigInt","bigIntZero","absBigInt","signBigInt","Variable","convertValue","getName","cb","fromString","setValue","converted","getValue","TYPE_TO_CLASS","string","getType","number","isFinite","integer","dict","_val","createVariable","fillTicks","to","minValue","maxValue","inside","DEFAULT_DRAWABLE_STYLE","THUMB_MARK_SHAPES","TRACK_SHAPES","tracksInner","firstVariable","thumb_value_variable","secondVariable","thumb_secondary_value_variable","getVariable","markActiveTicks","markInactiveTicks","$valueVariable","value2","$value2Variable","thumbStyle","thumbSecondaryStyle","trackInactiveStyle","trackActiveStyle","markActiveStyle","markInactiveStyle","textSecondaryStyle","secondaryDescription","isTicksWarning","checkTicks","ticksCount","activeTickWidth","inactiveTickWidth","jsonMinValue","min_value","jsonMaxValue","max_value","$jsonMinValue","$jsonMaxValue","newVal2","jsonThumbStyle","thumb_style","$jsonThumbStyle","jsonThumbSecondaryStyle","thumb_secondary_style","$jsonThumbSecondaryStyle","jsonTrackInactiveStyle","track_inactive_style","$jsonTrackInactiveStyle","jsonTrackActiveStyle","track_active_style","$jsonTrackActiveStyle","jsonMarkActiveStyle","tick_mark_active_style","newStyle","$jsonMarkActiveStyle","jsonMarkInactiveStyle","tick_mark_inactive_style","$jsonMarkInactiveStyle","jsonTextStyle","thumb_text_style","$jsonTextStyle","jsonSecondaryTextStyle","thumb_secondary_text_style","$jsonSecondaryTextStyle","jsonSecondaryAccessibility","secondary_value_accessibility","$jsonSecondaryAccessibility","newHasError","maxThumbWidth","maxThumbHeight","trackPart","trackSecondaryPart","trackActivePart","trackActiveOffset","_textStyle","_textStyle2","_textStyle3","_textSecondaryStyle","_textSecondaryStyle2","_textSecondaryStyle3","textDiff","added","removed","diff","leftIndex","rightIndex","lengthDiff","MaskCharStatic","char","MaskCharDynamic","placeholder","BaseInputMask","initialMaskData","maskData","updateMaskData","cursorPosition","cursorPos","rawValue","collectValueRange","destructedValue","alwaysVisible","firstEmptyHolderIndex","maskChar","newMaskData","restoreValue","previousRawValue","decoding","maskKey","regexp","RegExp","err","onException","mappingItem","overrideRawValue","newRawValue","clearRange","replaceChars","applyChangeFrom","buildBodySubstring","tail","buildTailSubstring","fehi","maxShift","calculateMaxShift","tailStart","calculateCursorPosition","dynamicLeft","initialInsertableSubstring","calculateInsertableSubstring","holder","positionByDiff","firstHolderAfter","moveToAndGetNextHolderFilter","_this$destructedValue","maskCharFilter","trimmedSubstring","insertableCharIndex","FixedLengthInputMask","exception","CurrencyInputMask","locale","Intl","NumberFormat","initFormatter","updateCurrencyParams","currentValue","parseFormat","decimalSeparator","currencyFormatter","minimumFractionDigits","maximumFractionDigits","format","localeDigits","fill","trimZeroRegExp","invalidateMaskDataForFormatted","forValue","formatted","formatPattern","parsed","oldSeparatorIndex","lastIndexOf","newSeparatorIndex","needInvalidateMask","clearedValue","validFormat","isDigit","separatorOutOfDiffIndex","inDiff","replaceCharInDiff","maxSeparatorOffset","resolvedOptions","leftToInsert","oldSeparatorLeft","containsSeparator","separatorInserted","canInsertSeparator","countNodeChars","textContent","tagName","setSelectionOffset","nodeType","sel","getSelection","removeAllRanges","createRange","parent","setStart","setEnd","addRange","len","input","inputMask","variable","text_variable","rawVariable","mask","raw_text_variable","valueVariable","rawValueVariable","contentEditableValue","hint_text","hint_color","hintColor","highlight_color","highlightColor","alignmentHorizontal","alignmentVertical","keyboard_type","KEYBOARD_MAP","email","phone","single_line_text","multi_line_text","uri","keyboardType","inputType","isSupportInputMode","inputMode","max_visible_lines","verticalPadding","setCursorPosition","HTMLInputElement","selectionStart","selectionEnd","runRawValueMask","$rawValueVariable","activeElement","select_all_on_focus","$jsonMask","oldValue","pattern_elements","always_visible","regex","updateFixedMask","updateCurrencyMask","$jsonHintText","$jsonHintColor","$jsonFontSize","$jsonFontWeight","$jsonFontFamily","$jsonLetterSpacing","$jsonHighlightColor","$jsonKeyboardType","isMultiline","$jsonVisibleMaxLines","paddingStl","verticalPaddingStl","$$value","value_variable","filteredItems","selectText","hint","innerStl","selectStl","isSelfVariableSet","video_sources","sources","repeatable","loop","autostart","autoplay","muted","poster","elapsedVariableName","elapsed_time_variable","pause","$jsonSource","mime_type","src","$jsonRepeatable","$jsonAutostart","$jsonMuted","videoElem","source","TYPE_MAP","Text","container","Container","Separator","Image","gif","grid","Grid","gallery","Gallery","tabs","Tabs","State","pager","Pager","indicator","Indicator","slider","Slider","Input","select","Select","video","Video","hasTemplate","svgFiltersMap","filterKey","filterColor","filterMode","applyTemplate","templates","newContext","newJson","copyTemplated","base","extender","simpleKeys","templateKeys","voidUnsubscribe","constStore","buildBinaryExpression","operator","buildLogicalExpression","buildString","quasis","expressions","convertToInt64","_err","escapeChar","peg$SyntaxError","message","expected","found","location","self","setPrototypeOf","peg$padEnd","targetLength","padString","repeat","peg$parse","peg$result","peg$FAILED","peg$source","grammarSource","peg$startRuleFunctions","peg$parsestart","JsonStringContents","s0","s1","s2","peg$currPos","peg$parseJsonStringChar","peg$savedPos","peg$f1","peg$startRuleFunction","peg$c0","peg$c1","peg$c2","peg$c3","peg$c4","peg$c5","peg$c6","peg$c7","peg$c8","peg$c9","peg$c10","peg$c11","peg$c12","peg$c13","peg$c14","peg$c15","peg$c16","peg$c17","peg$c18","peg$c19","peg$c20","peg$c21","peg$c22","peg$c23","peg$c24","peg$c25","peg$c26","peg$c27","peg$c28","peg$r0","peg$r1","peg$r2","peg$r3","peg$r4","peg$r5","peg$e0","peg$literalExpectation","peg$e1","peg$e2","peg$e3","peg$e4","peg$e5","peg$classExpectation","peg$e6","peg$e7","peg$e8","peg$e9","peg$e10","peg$e11","peg$e12","peg$e13","peg$e14","peg$e15","peg$e16","peg$e17","peg$e18","peg$e19","peg$e20","peg$e21","peg$e22","peg$e23","peg$e24","peg$e25","peg$otherExpectation","peg$e26","peg$e27","peg$e28","peg$e29","peg$e30","peg$e31","peg$e32","peg$e33","peg$e34","peg$e35","peg$e36","peg$e37","peg$e38","peg$e39","peg$e40","peg$e41","peg$f0","expr","peg$f2","peg$f3","peg$f4","peg$f5","peg$f6","peg$f7","peg$f8","peg$f9","peg$f10","second","consequent","alternate","peg$f11","peg$f12","peg$f13","peg$f14","peg$f15","peg$f16","peg$f17","op","argument","peg$f18","callee","peg$f19","peg$f20","peg$f21","peg$f22","peg$f23","peg$f24","peg$f25","peg$f26","peg$f27","peg$f28","peg$f29","peg$f30","peg$f31","peg$f32","peg$f33","peg$f34","peg$f35","peg$f36","peg$f37","peg$posDetailsCache","line","peg$maxFailPos","peg$maxFailExpected","peg$silentFails","startRule","ignoreCase","parts","inverted","peg$computePosDetails","details","charCodeAt","peg$computeLocation","startPos","endPos","startPosDetails","endPosDetails","peg$fail","peg$parse_","peg$parseExpression","s3","s5","substr","s7","s9","peg$parseOr","s4","s6","peg$parseAnd","peg$parseEqual","peg$parseComparison","peg$parseSum","peg$parseFactor","peg$parseUnary","peg$parseNumber","peg$parseInteger","peg$parseIdentifier","peg$parseArguments","peg$parseStringChar","peg$parseStringContents","peg$parseString","peg$parseBoolean","peg$parsePrimaryExpression","peg$parseCall","s8","peg$parseReservedWord","buildMessage","peg$buildStructuredError","C","peg$subclass","k","s","offset_s","loc","filler","hatLen","DESCRIBE_EXPECTATION_FNS","literal","expectation","literalEscape","escapedParts","classEscape","any","other","hex","toUpperCase","describeExpectation","descriptions","describeExpected","describeFound","funcs","funcByArgs","registerFunc","arr","funcKey","matchFuncArgs","func","minArgs","maxArgs","lastArg","isVararg","funcArg","walk","ast","visitors","_visitors$ast$type","valToInternal","dateToString","date","toISOString","valToString","stringifyColor","safeConvertColor","valToPreview","typeToString","roundInteger","checkIntegerOverflow","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","safeIntegerOverflow","gatherVarsFromAst","evalError","msg","transformColorValue","MAX_NUMBER","MAX_VALUE","MIN_NUMBER","MIN_VALUE","STRING","INTEGER","NUMBER","BOOLEAN","COLOR","URL","DATETIME","DICT","_ctx","arg","toNumber","getValueForced","varName","fallback","variables","getColorValue","getUrlValue","getter","method","datetime","getTime","getYear","getMonth","getDay","getDayOfWeek","getHours","getMinutes","getSeconds","getMillis","calcPad","pad","warnings","padStart","prefix","padEnd","suffix","colorGetter","field","_vars","colorSetter","getColorAlpha","getColorRed","getColorGreen","getColorBlue","setColorAlpha","setColorRed","setColorGreen","setColorBlue","getDuration","milliseconds","delimiter","whole","MS_IN_HOUR","dictGetter","jsType","runtimeType","path","current","getProp","optWrapper","fallbackType","getDictString","getDictNumber","getDictInteger","getDictBoolean","getDictColor","getDictUrl","getDictOptString","getDictOptNumber","getDictOptInteger","getDictOptBoolean","getDictOptColor","getDictOptUrl","argsToStr","intVal","encodeURIComponent","decodeURIComponent","year","copy","setUTCFullYear","month","setUTCMonth","day","getUTCMonth","setUTCDate","getUTCDate","getMaxDate","hours","setUTCHours","minutes","setUTCMinutes","seconds","setUTCSeconds","millis","setUTCMilliseconds","wholeStr","partStr","what","replacer","escapeRegExp","re","arg0","arg1","sign","red","green","blue","EVAL_MAP","StringLiteral","NumberLiteral","IntegerLiteral","BooleanLiteral","UnaryExpression","evalAny","mul","ConditionalExpression","TemplateLiteral","LogicalExpression","BinaryExpression","evalBinaryEquality","leftVal","rightVal","evalBinaryCompare","evalBinarySum","evalBinaryFactor","CallExpression","funcName","findRes","firstError","findBestMatchedFunc","argsType","variableToValue","evalExpression","vars","unknownVariableName","checkVariables","ExpressionBinding","containsUnsetVariables","prepareVarsObj","jsonProp","hasExpression","propVars","expression","applyVars","prepareVars","root","storesMap","controllerToStore","controllerToVars","getControllerStore","controller","getControllerVars","GlobalVariablesController","setVariable","variableName","createGlobalVariablesController","AVAIL_ACTIONS","TimersController","hasVariableWithType","setVariableValue","visibilityHandler","visibilityState","awaitActions","execTimerAction","unholdAll","holdAll","_id","timers","stopTimerTimeouts","createTimer","tick_interval","tick_actions","actionTyped","durationTimeout","tickTimeout","tickOrUnholdAction","performance","durationPassed","durationStarted","updateVariable","callActions","tickCount","startOrResume","hold","tickCountPredict","startTick","tickStarted","tickPassed","resume","cancel","reset","actionsWithExpressions","rootInstancesCount","onWindowKeyDown","onWindowPointerDown","platform","theme","globalVariablesController","mix","customization","builtinProtocols","onError","onStat","onCustomAction","onComponent","_fontFamily","fetchInit","tooltipRoot","matchMedia","touchQuery","matches","addListener","currentTheme","themeQuery","setTheme","newTheme","getDebugVariables","builtinSet","initialError","card","templateName","simpleCheckInput","running","stateChange","globalVariablesStore","globalVariables","localVariables","awaitingGlobalVariables","timersController","tooltipCounter","prepared","console","warn","idCounter","svgFilterUsages","URLSearchParams","stateInterface","divId","selectedStateId","childState","setState","getInstance","variableInstance","timerAction","callVideoAction","init","fetch","ok","patch","changes","failed","change","parentOfMap","download_callbacks","on_fail_actions","methods","on_success_actions","originalError","callDownloadAction","multiple","tooltipMap","info","onwerNode","timeoutId","callShowTooltip","callHideTooltip","processUrls","win","open","opener","instancesMap","filterDefinedVars","usedTypes","genClass","onTooltipClose","filterId","awaitVariableChanges","setStore","foundType","Builder","registerComponent","unregisterComponent","_stateId","_json","_templateContext","_transitions","_node","_direction","startVariables","varInstance","palette","newVarName","awaitingStore","variableTriggers","variable_triggers","trigger","prevConditionResult","condition","exprVars","remaining","waitForVars","conditionResult","resultAction","rootStateDiv","RootSvgFilters","Root"],"sourceRoot":""}
|