@fiddle-digital/string-tune 0.0.29 → 0.0.30
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/dist/3D/Modules/String3DModel.d.ts +13 -0
- package/dist/3D/String3DCamera.d.ts +37 -0
- package/dist/3D/String3DObject.d.ts +17 -0
- package/dist/3D/String3DRenderer.d.ts +18 -0
- package/dist/3D/String3DScene.d.ts +25 -0
- package/dist/IStringModule.d.ts +3 -0
- package/dist/Objects/StringObject.d.ts +8 -0
- package/dist/Scroll/Modules/StringGlide.d.ts +30 -0
- package/dist/Scroll/Modules/StringLerp.d.ts +8 -0
- package/dist/Scroll/Modules/StringProgress.d.ts +2 -0
- package/dist/Scroll/Types/StringScroll.d.ts +3 -0
- package/dist/Scroll/Types/StringScrollDefault.d.ts +1 -1
- package/dist/Scroll/Types/StringScrollSmooth.d.ts +7 -3
- package/dist/Scroll/Types/StringTypeSettings.d.ts +1 -4
- package/dist/StringFPS.d.ts +2 -1
- package/dist/StringModule.d.ts +7 -2
- package/dist/Tracker/StringDelayLerpTracker.d.ts +16 -0
- package/dist/Tracker/StringLerpTracker.d.ts +15 -0
- package/dist/Utils/StringData.d.ts +3 -0
- package/dist/Utils/StringLerpCalc.d.ts +3 -0
- package/dist/Utils/StringToCanvas.d.ts +7 -0
- package/dist/index.d.ts +10 -4
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +78 -78
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAoB,WAAID,IAExBD,EAAiB,WAAIC,GACtB,CATD,CASGK,MAAM,I,mBCRT,IAAIC,EAAsB,CCA1BA,EAAwB,CAACL,EAASM,KACjC,IAAI,IAAIC,KAAOD,EACXD,EAAoBG,EAAEF,EAAYC,KAASF,EAAoBG,EAAER,EAASO,IAC5EE,OAAOC,eAAeV,EAASO,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDF,EAAwB,CAACQ,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFT,EAAyBL,IACH,oBAAXkB,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeV,EAASkB,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeV,EAAS,aAAc,CAAEoB,OAAO,GAAO,G,gVCKvD,MAAMC,EAaX,QAAWC,GACT,OAAOlB,KAAKmB,KACd,CACA,WAAAC,CAAYC,EAAcC,EAAgB,MAR1C,KAAAA,SAAgB,KACN,KAAAC,WAAwC,IAAIC,IAC5C,KAAAC,QAA+B,IAAIC,MACnC,KAAAC,QAAkB,GAClB,KAAAR,MAAgB,EAKxBnB,KAAK4B,KAAOP,EAAQO,KACpB5B,KAAK6B,KAAOR,EAAQQ,KACpB7B,KAAK8B,UAAYT,EAAQS,UACzB9B,KAAK+B,mBAAqBV,EAAQU,mBAClC/B,KAAKgC,SAAWX,EAAQW,SACxBhC,KAAKiC,cAAgBZ,EAAQY,cAC7BjC,KAAKkC,OAASb,EAAQa,OACtBlC,KAAKsB,SAAWA,CAClB,CACA,UAAAa,GAAe,CAEf,oBAAAC,GAA8B,CAE9B,UAAAC,CAAWC,GACT,IAAIC,EAAmBvC,KAAK8B,UAAUU,QAAQF,EAAOG,GAAI,SAAU,IAAIC,MAAM,KAEzE1B,GAAQ,EAMZ,OALAuB,EAAiBI,SAASxC,IACpBA,GAAOH,KAAK2B,UACdX,GAAQ,E,IAGLA,CACT,CACA,OAAA4B,CAAQN,GACNA,EAAOM,QAAQ5C,MACfA,KAAK6C,UAAUP,EACjB,CACA,SAAAQ,CAAUC,EAAYT,GACpBtC,KAAKuB,WAAWyB,IAAID,EAAIT,GACxBtC,KAAKyB,QAAUC,MAAMuB,KAAKjD,KAAKuB,YAAY2B,KAAI,EAAEC,EAAMnC,KAAWA,GACpE,CACA,YAAAoC,CAAaL,GACX/C,KAAKuB,WAAW8B,OAAON,GACvB/C,KAAKyB,QAAUC,MAAMuB,KAAKjD,KAAKuB,YAAY2B,KAAI,EAAEC,EAAMnC,KAAWA,GACpE,CAEA,OAAAsC,GAAiB,CACjB,QAAAC,CAAS3B,GAAyB,CAClC,QAAA4B,GAAkB,CAClB,SAAAX,CAAUP,GAA6B,CACvC,SAAAmB,GAAmB,CACnB,QAAAC,CAAS9B,GAAyB,CAClC,WAAA+B,CAAYC,GAAsB,CAClC,OAAAC,CAAQD,GAAsB,CAC9B,cAAAE,GAAwB,CACxB,uBAAAC,GAAiC,CACjC,kBAAAC,CAAmBC,EAAiBC,GAA0B,ECvEzD,MAAMC,UAAmBlD,EAC9B,WAAAG,CAAYC,GACV+C,MAAM/C,GACNrB,KAAK2B,QAAU,MACjB,CAEA,OAAA2B,GACoBe,SAASC,iBAAiB,oBAClC3B,SAAS4B,IACjBvE,KAAKwE,aAAaD,EAASA,EAAQE,aAAa,gBAChDF,EAAQG,UAAUC,IAAI,YACtBJ,EAAQK,IAAML,EAAQE,aAAa,eACnCF,EAAQM,iBAAiB,QAAQ,KAC/BN,EAAQG,UAAUC,IAAI,UAAU,GAChC,GAEN,CAEA,SAAA9B,CAAUP,GACQA,EAAOG,EACzB,CAEQ,YAAA+B,CAAaD,EAAsBO,GACzC,OAAO,IAAIC,SAAQ,CAACC,EAASC,KAC3B,MAAMC,EAAM,IAAIC,eAChBD,EAAIE,KAAK,MAAON,GAAK,GACrBI,EAAIG,aAAe,cACnBH,EAAII,OAAS,KACX,GAAmB,MAAfJ,EAAIK,QAAiC,MAAfL,EAAIK,OAAgB,CAC5C,MAAMC,EAASN,EAAIO,SACbC,EAAO,IAAIC,KAAK,CAACH,IACjBI,EAAM,IAAIC,MAChBD,EAAIN,OAAS,KACXf,EAAQuB,MAAMC,YAAc,GAAGH,EAAII,WAAWJ,EAAIK,SAClDjB,EAAQ,CAAEgB,MAAOJ,EAAII,MAAOC,OAAQL,EAAIK,SACxCC,IAAIC,gBAAgBP,EAAIhB,IAAI,EAE9BgB,EAAIQ,QAAU,KACZnB,EAAO,IAAIoB,MAAM,wBAAwB,EAE3CT,EAAIhB,IAAMsB,IAAII,gBAAgBZ,E,MAE9BT,EAAO,IAAIoB,MAAM,wB,EAGrBnB,EAAIkB,QAAU,KACZnB,EAAO,IAAIoB,MAAM,iBAAiB,EAEpCnB,EAAIqB,iBAAiB,QAAS,YAC9BrB,EAAIsB,MAAM,GAEd,EClDK,MAAMC,UAAsBxF,EAGjC,WAAAG,CAAYC,EAAcC,EAAgB,MACxC8C,MAAM/C,GAHR,KAAAqF,eAAyB,EAIvB1G,KAAKmB,MAAQ,EAEG,MAAZG,GACsB,MAApBA,EAASqF,UACX3G,KAAK0G,eAAiBpF,EAASqF,QAGrC,CACA,OAAArD,GACEsD,YAAW,KACWvC,SAASwC,gBACjBnC,UAAUC,IAAI,UAAU,GACnC3E,KAAK0G,eAEV,ECpBK,MAAMI,UAA4B7F,EACvC,WAAAG,CAAYC,GACV+C,MAAM/C,GACNrB,KAAK2B,QAAU,UACjB,CAEA,SAAAkB,CAAUP,GACR,MAAMyE,EAAezE,EAAOG,GACtBuE,EAAWhH,KAAK8B,UAAUU,QAAQuE,EAAc,aAAc,IAC9DE,EAA0E,MAAhEjH,KAAK8B,UAAUU,QAAQuE,EAAc,iBAAkB,MAC5B,UAAvCA,EAAaG,QAAQC,eAA6BH,GAAuB,GAAXC,GAChEF,EAAaK,aAAa,QAAS,SACnCL,EAAaK,aAAa,cAAe,IACzCL,EAAaK,aAAa,OAAQ,IAClCL,EAAaK,aAAa,WAAY,IACtCL,EAAanC,IAAMoC,EACnBD,EAAaM,OAAQ,EACrBN,EAAalC,iBAAiB,kBAAkB,KAE/B,IADiE,MAAhE7E,KAAK8B,UAAUU,QAAQuE,EAAc,iBAAkB,QAErE/G,KAAKsH,QAAQhF,EAAQyE,E,GAEtB,CAAEQ,MAAM,IACXR,EAAaS,QAEbC,QAAQC,KACN,8EACApF,EAAOG,GAGb,CAEQ,OAAA6E,CAAQhF,EAAsBiC,GACpCA,EAAQoD,OAAOC,OAAOC,IACpBJ,QAAQC,KAAK,mBAAoBG,GACjCvF,EAAO2E,SAAU,CAAK,IACrBa,MAAK,KACNxF,EAAO2E,SAAU,EACjB1C,EAAQ6C,aAAa,iBAAkB,GAAG,GAE9C,ECvCK,MAAMW,UAAqB9G,EAQhC,WAAAG,CAAYC,EAAcC,EAAgB,MACxC8C,MAAM/C,GARA,KAAA2G,WAAqB,GACrB,KAAAC,KAAO,EACP,KAAAC,KAAO,EACL,KAAAC,gBAA6C,IAAI3G,IACjD,KAAA4G,aAAoC,IAAI1G,MAKhD1B,KAAK2B,QAAU,SACf3B,KAAKqI,OAAShE,SAASiE,cAAc,kBACvC,CAEA,QAAA/E,CAAS3B,GACP,GAAI5B,KAAKiC,cAAcsG,SAAWvI,KAAKiI,MAAQjI,KAAKiC,cAAcuG,SAAWxI,KAAKkI,KAAM,CACtF,IAAIO,EAAa,CACfC,MAAO1I,KAAKiC,cAAcyG,MAC1BC,MAAO3I,KAAKiC,cAAc0G,MAC1BC,EAAG5I,KAAKiC,cAAc2G,EACtBC,EAAG7I,KAAKiC,cAAc4G,GAExB7I,KAAKkC,OAAO4G,KAAK,SAAUL,GAE3BzI,KAAKqI,OAAOvC,MAAMiD,YAAY,MAAO/I,KAAKiC,cAAcsG,SACxDvI,KAAKqI,OAAOvC,MAAMiD,YAAY,MAAO/I,KAAKiC,cAAcuG,SAExDxI,KAAKiI,KAAOjI,KAAKiC,cAAcsG,QAC/BvI,KAAKkI,KAAOlI,KAAKiC,cAAcuG,O,CAGjCxI,KAAKyB,QAAQkB,SAASL,IACpB,GAAIA,EAAO0G,YAAa,CACtB,IAAIC,EAAO3G,EAAOG,GAAGyG,wBACrB,MAAMC,EAAUnJ,KAAKoJ,gBAAgB,SAAUpJ,KAAKiC,cAAc2G,EAAIK,EAAKI,KAAMJ,EAAKjD,OAChFsD,EAAUtJ,KAAKoJ,gBAAgB,SAAUpJ,KAAKiC,cAAc4G,EAAII,EAAKM,IAAKN,EAAKhD,QACrF3D,EAAOkH,QAAUxJ,KAAK6B,KAAKW,QAAQF,EAAOkH,OAAQL,EAAS7G,EAAOT,MAClES,EAAOmH,QAAUzJ,KAAK6B,KAAKW,QAAQF,EAAOmH,OAAQH,EAAShH,EAAOT,MAClE7B,KAAK0J,oBAAoBpH,EAAQA,EAAOkH,OAAQlH,EAAOmH,O,MAEvD,GAAqB,GAAjBnH,EAAOkH,QAAgC,GAAjBlH,EAAOmH,OAAa,CAC5C,IAAIR,EAAO3G,EAAOG,GAAGyG,wBACrB,MAAMC,EAAUnJ,KAAKoJ,gBAAgB,SAAU9G,EAAOqH,UAAWV,EAAKjD,OAChEsD,EAAUtJ,KAAKoJ,gBAAgB,SAAU9G,EAAOsH,WAAYX,EAAKhD,QACvE3D,EAAOkH,QAAUxJ,KAAK6B,KAAKW,QAAQF,EAAOkH,OAAQL,EAAS7G,EAAOT,MAClES,EAAOmH,QAAUzJ,KAAK6B,KAAKW,QAAQF,EAAOmH,OAAQH,EAAShH,EAAOT,MAClE7B,KAAK0J,oBAAoBpH,EAAQA,EAAOkH,OAAQlH,EAAOmH,O,IAI/D,CAEA,SAAA5G,CAAUP,GACR,IAAIiC,EAAUjC,EAAOG,GAEA,MAAjBzC,KAAKsB,UAC6B,MAAhCtB,KAAKsB,SAAS,iBAChBgB,EAAOT,KAAO7B,KAAKsB,SAAS,gBAIhC,IAAIuI,EAAwB,KAC1BtF,EAAQM,iBAAiB,YAAaiF,GACtCvF,EAAQM,iBAAiB,aAAckF,GACvCzH,EAAO0G,aAAc,EACM,MAAvB1G,EAAO0H,cACT1H,EAAO0H,aAAatF,UAAUC,IAAI,Q,EAGlCmF,EAAwBG,IAAD,EACvBF,EAAwB,KAC1BxF,EAAQ2F,oBAAoB,YAAaJ,GACzCvF,EAAQ2F,oBAAoB,aAAcH,GAC1CzH,EAAO0G,aAAc,EACM,MAAvB1G,EAAO0H,cACT1H,EAAO0H,aAAatF,UAAUyF,OAAO,Q,EAIzC7H,EAAO8H,QAAU,KACf7F,EAAQM,iBAAiB,aAAcgF,EAAsB,EAE/DvH,EAAO+H,QAAU,KACf9F,EAAQ2F,oBAAoB,aAAcL,GAC1CtF,EAAQ2F,oBAAoB,YAAaJ,GACzCvF,EAAQ2F,oBAAoB,aAAcH,EAAsB,CAEpE,CAEQ,mBAAAL,CAAoBpH,EAAsBsG,EAAWC,GACjC,GAAtBvG,EAAOgI,cACThI,EAAOG,GAAGqD,MAAMiD,YAAY,YAAaH,EAAE2B,QAAQ,IACnDjI,EAAOG,GAAGqD,MAAMiD,YAAY,YAAaF,EAAE0B,QAAQ,KAErDjI,EAAOkI,SAAS7H,SAAS4B,IACvBA,EAAQuB,MAAMiD,YAAY,YAAaH,EAAE2B,QAAQ,IACjDhG,EAAQuB,MAAMiD,YAAY,YAAaF,EAAE0B,QAAQ,GAAG,GAExD,CAEQ,eAAAnB,CAAgBpH,EAAkByI,EAAkBC,GAC1D,OAAQ1I,GACN,IAAK,QACH,OAAOyI,EAAWC,EACpB,IAAK,MACH,OAAQD,EAAWC,GAAQA,EAE7B,QACE,OAAQD,EAAWC,EAAO,IAAMA,EAAO,GAE7C,EC9GK,MAAMC,UAAuB1J,EAClC,WAAAG,CAAYC,GACV+C,MAAM/C,GACNrB,KAAK2B,QAAU,UACjB,CAEA,SAAAkB,CAAUP,GACQA,EAAOG,GAEF,MAAjBzC,KAAKsB,WACiC,MAApCtB,KAAKsB,SAAS,qBAChBgB,EAAOsI,SAAW5K,KAAKsB,SAAS,oBAEI,MAAlCtB,KAAKsB,SAAS,mBAChBgB,EAAOuI,OAAS7K,KAAKsB,SAAS,kBAEI,MAAhCtB,KAAKsB,SAAS,iBAChBgB,EAAOT,KAAO7B,KAAKsB,SAAS,gBAGlC,CAEA,WAAAqC,CAAYC,GACV5D,KAAKyB,QAAQkB,SAASL,IACpB,MACM2G,EADU3G,EAAOG,GACFyG,wBACf4B,EAAiB7B,EAAKI,KAAO/G,EAAOqH,UACpCoB,EAAiB9B,EAAKM,IAAMjH,EAAOsH,WACnCoB,EAAQpH,EAAEqH,QAAUH,EACpBI,EAAQtH,EAAEuH,QAAUJ,EACpBK,EAAWC,KAAKC,KAAKN,GAAS,EAAIE,GAAS,GAE7CE,EAAW9I,EAAOuI,QACpBvI,EAAOiJ,gBAAkBP,EAAQ1I,EAAOsI,WAAatI,EAAOuI,OAASO,GAAY9I,EAAOuI,QACxFvI,EAAOkJ,gBAAkBN,EAAQ5I,EAAOsI,WAAatI,EAAOuI,OAASO,GAAY9I,EAAOuI,QACxFvI,EAAOmJ,aAAc,IAErBnJ,EAAOiJ,gBAAkB,EACzBjJ,EAAOkJ,gBAAkB,E,GAG/B,CAEA,QAAAjI,CAAS3B,GACP5B,KAAKyB,QAAQkB,SAASL,IACpB,GAAIA,EAAOmJ,YAAa,CACtB,IAAI/C,EAAQ1I,KAAK6B,KAAKW,QAAQF,EAAOoJ,UAAWpJ,EAAOiJ,gBAAiBjJ,EAAOT,MAC3E8G,EAAQ3I,KAAK6B,KAAKW,QAAQF,EAAOqJ,UAAWrJ,EAAOkJ,gBAAiBlJ,EAAOT,MAC3E6G,GAAS,KAAQA,EAAQ,MAC3BA,EAAQ,EACRpG,EAAOoJ,UAAYpJ,EAAOiJ,iBAExB5C,GAAS,KAAQA,EAAQ,MAC3BA,EAAQ,EACRrG,EAAOqJ,UAAYrJ,EAAOkJ,iBAE5BlJ,EAAOoJ,WAAahD,EACpBpG,EAAOqJ,WAAahD,EACpBrG,EAAOG,GAAGqD,MAAMiD,YAAY,eAAgBzG,EAAOoJ,UAAUE,YAC7DtJ,EAAOG,GAAGqD,MAAMiD,YAAY,eAAgBzG,EAAOqJ,UAAUC,YACzDtJ,EAAOiJ,iBAAmBjJ,EAAOoJ,WAAapJ,EAAOkJ,iBAAmBlJ,EAAOqJ,YACjFrJ,EAAOmJ,aAAc,E,IAI7B,ECrEK,MAAMI,EACX,OAAArJ,CAAQsJ,EAAeC,EAAaC,GAClC,OAAOA,GAAOD,EAAMD,EACtB,ECCK,MAAMG,EAAb,cACU,KAAAC,IAAM,GACN,KAAArK,KAAO,IAAIgK,EAEX,KAAAM,GAAa,EACb,KAAAC,GAAa,EACb,KAAAC,OAAiB,EACjB,KAAAC,OAAiB,EAEjB,KAAAC,QAAkB,EAClB,KAAAC,QAAkB,CAmC5B,CAjCE,KAAW5D,GACT,OAAO5I,KAAKuM,OACd,CACA,KAAW1D,GACT,OAAO7I,KAAKwM,OACd,CACA,WAAWjE,GACT,OAAOvI,KAAKmM,EACd,CACA,WAAW3D,GACT,OAAOxI,KAAKoM,EACd,CACA,SAAW1D,GACT,OAAO1I,KAAKqM,MACd,CACA,SAAW1D,GACT,OAAO3I,KAAKsM,MACd,CAGA,WAAA3I,CAAYC,GACV5D,KAAKuM,QAAU3I,EAAEqH,QACjBjL,KAAKwM,QAAU5I,EAAEuH,OACnB,CACA,QAAA5H,GACEvD,KAAKqM,OAASrM,KAAK6B,KAAKW,QAAQxC,KAAKmM,GAAInM,KAAKuM,QAASvM,KAAKkM,KAC5DlM,KAAKsM,OAAStM,KAAK6B,KAAKW,QAAQxC,KAAKoM,GAAIpM,KAAKwM,QAASxM,KAAKkM,KAE5DlM,KAAKmM,GAAKd,KAAKoB,MAAMzM,KAAKmM,GAAKnM,KAAKqM,QACpCrM,KAAKoM,GAAKf,KAAKoB,MAAMzM,KAAKoM,GAAKpM,KAAKsM,OACtC,EC5CF,MAAMI,EAAK,MACLC,EAAK,SACLC,EAAK,OACLC,EAAK,QAEJ,MAAMC,EA+DX,WAAA1L,CAAYmD,GA7DL,KAAAxB,GAAa,GACb,KAAAgK,OAAiB,EACjB,KAAAC,KAAe,EACf,KAAAtC,KAAe,EAEf,KAAAuC,SAAmB,EACnB,KAAAC,OAAiB,EACjB,KAAAC,cAAwB,EACxB,KAAAC,OAAiB,EAEjB,KAAAC,UAAoB,EACpB,KAAAC,aAAuB,EAEvB,KAAAC,OAAiB,GACjB,KAAAC,QAAkB,GAClB,KAAAC,OAAiB,GACjB,KAAAC,QAAkB,GAElB,KAAA/D,UAAoB,EACpB,KAAAC,WAAqB,EAErB,KAAAkC,MAAgB,EAChB,KAAAC,IAAc,EAEd,KAAAvC,OAAiB,EACjB,KAAAC,OAAiB,EAEjB,KAAA8B,gBAA0B,EAC1B,KAAAC,gBAA0B,EAE1B,KAAAE,UAAoB,EACpB,KAAAC,UAAoB,EAEpB,KAAA9J,KAAe,EACf,KAAA+I,SAAmB,EACnB,KAAAC,OAAiB,EACjB,KAAA8C,sBAAgC,EAChC,KAAAC,oBAA8B,EAE9B,KAAApD,SAA+B,IAAI9I,MACnC,KAAAsI,aAAoB,KAEpB,KAAA7J,IAAc,aAEd,KAAA0N,aAA4C,KAC5C,KAAAC,iBAAgD,KAChD,KAAAC,eAA8C,KAE9C,KAAAC,QAAkB,EAClB,KAAA1D,aAAuB,EACvB,KAAA2D,QAAkB,EAClB,KAAAC,KAAe,EACf,KAAAlF,aAAuB,EACvB,KAAA/B,SAAmB,EACnB,KAAAwE,aAAuB,EAEvB,KAAArB,QAAU,OACV,KAAAC,QAAU,OAET,KAAA8D,QAAgC,IAAIzM,MAG1C1B,KAAKyC,GAAK8B,CACZ,CAEA,KAAA6J,GACEpO,KAAKiO,QAAS,EACdjO,KAAKmO,QAAQxL,SAAS9C,IACpBA,EAAOiD,UAAU9C,KAAK+C,GAAI/C,KAAK,IAEjCA,KAAKoK,SACP,CACA,KAAAiE,GACErO,KAAKiO,QAAS,EACdjO,KAAKmO,QAAQxL,SAAS9C,IACpBA,EAAOuD,aAAapD,KAAK+C,GAAG,IAE9B/C,KAAKqK,SACP,CACA,IAAAiE,GACEtO,KAAKyC,GAAGiC,UAAUC,IAAI,UACxB,CACA,IAAA4J,GACMvO,KAAKgO,QACPhO,KAAKyC,GAAGiC,UAAUyF,OAAO,UAE7B,CAEA,OAAAvH,CAAQ/C,GACNG,KAAKmO,QAAQK,KAAK3O,EACpB,CAGO,kBAAA4O,CAAmBC,GACnB1O,KAAKuN,SAAWb,GAAM1M,KAAKwN,UAAYd,GAAQ1M,KAAKuN,SAAWX,GAAM5M,KAAKwN,UAAYZ,EACzF5M,KAAKiN,SAAWjN,KAAK8L,MAAQ9L,KAAKgN,KACxBhN,KAAKuN,SAAWb,GAAM1M,KAAKwN,UAAYb,GAAQ3M,KAAKuN,SAAWX,GAAM5M,KAAKwN,UAAYX,EAChG7M,KAAKiN,SAAWjN,KAAK8L,MAAQ4C,EAAa1O,KAAKgN,KACrChN,KAAKuN,SAAWZ,GAAM3M,KAAKwN,UAAYd,GAAQ1M,KAAKuN,SAAWV,GAAM7M,KAAKwN,UAAYZ,EAChG5M,KAAKiN,SAAWjN,KAAK8L,MAAQ9L,KAAK0K,KAAO1K,KAAKgN,MACpChN,KAAKuN,SAAWZ,GAAM3M,KAAKwN,UAAYb,GAAQ3M,KAAKuN,SAAWV,GAAM7M,KAAKwN,UAAYX,KAChG7M,KAAKiN,SAAWjN,KAAK8L,MAAQ4C,EAAa1O,KAAKgN,KAAOhN,KAAK0K,MAGxD1K,KAAKyN,SAAWf,GAAM1M,KAAK0N,UAAYhB,GAAQ1M,KAAKyN,SAAWb,GAAM5M,KAAK0N,UAAYd,EACzF5M,KAAKkN,OAASlN,KAAK8L,MAAQ9L,KAAK+M,OACtB/M,KAAKyN,SAAWf,GAAM1M,KAAK0N,UAAYf,GAAQ3M,KAAKyN,SAAWb,GAAM5M,KAAK0N,UAAYb,EAChG7M,KAAKkN,OAASlN,KAAK8L,MAAQ4C,EAAa1O,KAAK+M,OACnC/M,KAAKyN,SAAWd,GAAM3M,KAAK0N,UAAYhB,GAAQ1M,KAAKyN,SAAWZ,GAAM7M,KAAK0N,UAAYd,EAChG5M,KAAKkN,OAASlN,KAAK8L,MAAQ9L,KAAK0K,KAAO1K,KAAK+M,QAClC/M,KAAKyN,SAAWd,GAAM3M,KAAK0N,UAAYf,GAAQ3M,KAAKyN,SAAWZ,GAAM7M,KAAK0N,UAAYb,KAChG7M,KAAKkN,OAASlN,KAAK8L,MAAQ4C,EAAa1O,KAAK0K,KAAO1K,KAAK+M,QAE3D/M,KAAKmN,cAAgBnN,KAAKkN,OAASlN,KAAKiN,QAC1C,ECzHF,IAAK0B,GAAL,SAAKA,GACH,uBACA,uBACA,uBACA,wBACD,CALD,CAAKA,IAAAA,EAAU,KAoBf,MAAMC,EAKJ,WAAAxN,CAAYyN,G,MAJL,KAAAC,SAAeC,EACf,KAAAC,SAAeD,EACf,KAAAE,QAAkB,EAGvBjP,KAAK8O,IAAMD,aAAM,EAANA,EAAQC,IACnB9O,KAAKgP,IAAMH,aAAM,EAANA,EAAQG,IACnBhP,KAAKiP,OAAuB,QAAd,EAAAJ,aAAM,EAANA,EAAQI,cAAM,QAC9B,CAEA,SAAAC,CAAUD,GAAkB,GAC1BjP,KAAKiP,OAASA,CAChB,CACA,QAAAE,CAASL,EAAcE,GACrBhP,KAAK8O,IAAMA,QAAAA,OAAOC,EAClB/O,KAAKgP,IAAMA,QAAAA,OAAOD,CACpB,CAEA,cAAIK,GACF,IAAIC,EAAQ,SAOZ,OANIrP,KAAK8O,MACPO,GAAS,oBAAoBrP,KAAK8O,UAEhC9O,KAAKgP,MACPK,GAAS,oBAAoBrP,KAAKgP,UAE7BK,CACT,EAGK,MAAMC,UAAyBrO,EAepC,WAAAG,CAAYC,EAAcC,GACxB8C,MAAM/C,EAASC,GAfT,KAAAiO,QAAgE,CACtE,CAACZ,EAAWa,QAAS,IAAIZ,EAA4B,CAAEI,IAAK,MAC5D,CAACL,EAAWc,QAAS,IAAIb,EAA4B,CAAEE,IAAK,IAAKE,IAAK,OACtE,CAACL,EAAWe,QAAS,IAAId,EAA4B,CAAEE,IAAK,KAAME,IAAK,OACvE,CAACL,EAAWgB,SAAU,IAAIf,EAA4B,CAAEE,IAAK,QAGvD,KAAAc,YAAuD,CAC7D,CAACjB,EAAWa,QAASK,OAAOC,WAAW9P,KAAKuP,QAAQZ,EAAWa,QAAQJ,YACvE,CAACT,EAAWc,QAASI,OAAOC,WAAW9P,KAAKuP,QAAQZ,EAAWc,QAAQL,YACvE,CAACT,EAAWe,QAASG,OAAOC,WAAW9P,KAAKuP,QAAQZ,EAAWe,QAAQN,YACvE,CAACT,EAAWgB,SAAUE,OAAOC,WAAW9P,KAAKuP,QAAQZ,EAAWgB,SAASP,aAKzEpP,KAAKmB,MAAQ,CACf,CAEA,SAAA0B,GAAa,CAEb,OAAAS,G,YACE,GAAqB,MAAjBtD,KAAKsB,UAC0B,MAA7BtB,KAAKsB,SAAmB,SAAW,CACrC,IAAIuN,EAAS7O,KAAKsB,SAAmB,SACjCuN,EAAOkB,QACT/P,KAAKuP,QAAQZ,EAAWa,QAAQP,QAAS,EACzCjP,KAAKuP,QAAQZ,EAAWa,QAAQL,SAA8BJ,MAArBF,EAAOkB,OAAOjB,IAAmB,KAAOD,EAAOkB,OAAOjB,IAAsB,QAAjB,EAAAD,EAAOkB,OAAOf,WAAG,QAAI,MACzHhP,KAAK4P,YAAYjB,EAAWa,QAAUK,OAAOC,WAAW9P,KAAKuP,QAAQZ,EAAWa,QAAQJ,aAExFpP,KAAKuP,QAAQZ,EAAWa,QAAQP,QAAS,EAGvCJ,EAAOmB,QACThQ,KAAKuP,QAAQZ,EAAWc,QAAQR,QAAS,EACzCjP,KAAKuP,QAAQZ,EAAWc,QAAQN,SAA8BJ,MAArBF,EAAOkB,OAAOjB,IAAmB,KAAOD,EAAOkB,OAAOjB,IAAsB,QAAjB,EAAAD,EAAOkB,OAAOf,WAAG,QAAI,MACzHhP,KAAK4P,YAAYjB,EAAWc,QAAUI,OAAOC,WAAW9P,KAAKuP,QAAQZ,EAAWa,QAAQJ,aAExFpP,KAAKuP,QAAQZ,EAAWc,QAAQR,QAAS,EAGvCJ,EAAOoB,QACTjQ,KAAKuP,QAAQZ,EAAWe,QAAQT,QAAS,EACzCjP,KAAKuP,QAAQZ,EAAWe,QAAQP,SAA8BJ,MAArBF,EAAOkB,OAAOjB,IAAmB,KAAOD,EAAOkB,OAAOjB,IAAsB,QAAjB,EAAAD,EAAOkB,OAAOf,WAAG,QAAI,MACzHhP,KAAK4P,YAAYjB,EAAWe,QAAUG,OAAOC,WAAW9P,KAAKuP,QAAQZ,EAAWa,QAAQJ,aAExFpP,KAAKuP,QAAQZ,EAAWe,QAAQT,QAAS,EAGvCJ,EAAOqB,SACTlQ,KAAKuP,QAAQZ,EAAWgB,SAASV,QAAS,EAC1CjP,KAAKuP,QAAQZ,EAAWgB,SAASR,SAA8BJ,MAArBF,EAAOkB,OAAOjB,IAAmB,KAAOD,EAAOkB,OAAOjB,IAAsB,QAAjB,EAAAD,EAAOkB,OAAOf,WAAG,QAAI,MAC1HhP,KAAK4P,YAAYjB,EAAWgB,SAAWE,OAAOC,WAAW9P,KAAKuP,QAAQZ,EAAWa,QAAQJ,aAEzFpP,KAAKuP,QAAQZ,EAAWgB,SAASV,QAAS,C,CAIhDjP,KAAKmQ,gBACP,CAEA,QAAA3M,GACExD,KAAKmQ,gBACP,CAEQ,cAAAA,GACN,MAAMC,EAAgBpQ,KAAK4P,YAAYjB,EAAWa,QAAQa,SAAWrQ,KAAKuP,QAAQZ,EAAWa,QAAQP,OAC/FqB,EAAgBtQ,KAAK4P,YAAYjB,EAAWc,QAAQY,SAAWrQ,KAAKuP,QAAQZ,EAAWc,QAAQR,OAC/FsB,EAAgBvQ,KAAK4P,YAAYjB,EAAWe,QAAQW,SAAWrQ,KAAKuP,QAAQZ,EAAWe,QAAQT,OAC/FuB,EAAiBxQ,KAAK4P,YAAYjB,EAAWgB,SAASU,SAAWrQ,KAAKuP,QAAQZ,EAAWgB,SAASV,OAEvF5K,SAASC,iBAAiB,uEAElC3B,SAAS4B,IAChB,IAAIkM,GAAc,EAEdlM,EAAQmM,aAAa,kBAAoBN,IAC3CK,GAAc,GAEZlM,EAAQmM,aAAa,kBAAoBJ,IAC3CG,GAAc,GAEZlM,EAAQmM,aAAa,kBAAoBH,IAC3CE,GAAc,GAEZlM,EAAQmM,aAAa,mBAAqBF,IAC5CC,GAAc,GAIdlM,EAAQuB,MAAM6K,QADZF,EACsB,KAEA,M,GAG9B,ECnJK,MAAMG,EAQX,WAAAxP,CAAYQ,EAAkBiP,EAAgBC,GALtC,KAAAC,YAAa,EACb,KAAAC,OAAiB,EACjB,KAAAC,oBAA8B,EAIpCjR,KAAK4B,KAAOA,EACZ5B,KAAK6Q,UAAYA,EACjB7Q,KAAK8Q,MAAQA,CACf,CAEA,QAAAtN,GACE,MAAM0N,EAAclR,KAAK4B,KAAKuP,IACxBC,EAAcpR,KAAK4B,KAAKyP,GAExBC,EAAaF,EAAcF,EAAeE,EAChDpR,KAAK8Q,MAAMhL,MAAMiD,YAAY,SAAUuI,EAAY,MAE/CJ,GAAeE,EACjBpR,KAAK6Q,UAAUnM,UAAUC,IAAI,SAE7B3E,KAAK6Q,UAAUnM,UAAUyF,OAAO,QAEpC,CAEA,WAAAoH,GACE,MAAMC,EAAgBxR,KAAK4B,KAAKuP,IAC1BM,EAAgBzR,KAAK4B,KAAKyP,GAChCrR,KAAK8Q,MAAMhL,MAAMiD,YAAY,aAAkB/I,KAAK4B,KAAK8P,EAAIF,EAAiBC,EAAgB,KAChG,CAEA,cAAAE,CAAe/N,GACb5D,KAAKgR,OAASpN,EAAEuH,QAChBnL,KAAKiR,oBAAsBjR,KAAK4B,KAAK8P,CACvC,CAEA,cAAAE,CAAehO,GACb,MAAMiO,EAASjO,EAAEuH,QAAUnL,KAAKgR,OAC1Bc,EAAoB9R,KAAKiR,oBAAuBY,EAAS7R,KAAK4B,KAAKyP,GAAMrR,KAAK4B,KAAKuP,IACzFnR,KAAK4B,KAAK8P,EAAII,EACd9R,KAAK4B,KAAKmQ,EAAID,EACdjC,OAAOmC,SAAS,EAAGF,GACnB9R,KAAKuR,aACP,EC9CK,MAAMU,EAQX,WAAA7Q,CAAYQ,EAAkBiP,EAAgBC,GALtC,KAAAC,YAAa,EACb,KAAAmB,gBAA0B,EAC1B,KAAAjB,oBAA8B,EAIpCjR,KAAK4B,KAAOA,EACZ5B,KAAK6Q,UAAYA,EACjB7Q,KAAK8Q,MAAQA,CACf,CAEA,QAAAtN,GACE,MAAM0N,EAAclR,KAAK4B,KAAKuQ,IACxBf,EAAcpR,KAAK4B,KAAKyP,GACxBC,EAAaF,EAAcF,EAAeE,EAChDpR,KAAK8Q,MAAMhL,MAAMiD,YAAY,SAAUuI,EAAY,MAE/CJ,GAAeE,EACjBpR,KAAK6Q,UAAUnM,UAAUC,IAAI,SAE7B3E,KAAK6Q,UAAUnM,UAAUyF,OAAO,QAEpC,CAEA,WAAAoH,GACE,MAAMa,EAAepS,KAAK4B,KAAKuQ,IACzBE,EAAerS,KAAK4B,KAAKyP,GAC/BrR,KAAK8Q,MAAMhL,MAAMiD,YAAY,aAAkB/I,KAAK4B,KAAK8P,EAAIU,EAAgBC,EAAe,KAC9F,CAEA,cAAAV,CAAe/N,GACb5D,KAAKkS,gBAAkBtO,EAAEqH,QACzBjL,KAAKiR,oBAAsBjR,KAAK4B,KAAK8P,CACvC,CAEA,cAAAE,CAAehO,GACb,MAAM0O,EAAS1O,EAAEqH,QAAUjL,KAAKkS,gBAC1BJ,EAAoB9R,KAAKiR,oBAAuBqB,EAAStS,KAAK4B,KAAKyP,GAAMrR,KAAK4B,KAAKuQ,IACzFnS,KAAK4B,KAAK8P,EAAII,EACd9R,KAAK4B,KAAKmQ,EAAID,EACdjC,OAAOmC,SAAS,EAAGF,GACnB9R,KAAKuR,aACP,EC1CK,MAAMgB,UAAwBtR,EAgBnC,WAAAG,CAAYC,GACV+C,MAAM/C,GAZA,KAAA0P,YAAa,EACb,KAAAyB,WAA+C,SAarDxS,KAAKyS,iBAAmBzS,KAAK0S,aAAaC,KAAK3S,MAC/CA,KAAK4S,mBAAqB5S,KAAK2R,eAAegB,KAAK3S,MACnDA,KAAK6S,mBAAqB7S,KAAK4R,eAAee,KAAK3S,KACrD,CACA,UAAAmC,GACEkC,SAAS6F,oBAAoB,UAAWlK,KAAKyS,kBAC7CzS,KAAK8Q,MAAM5G,oBAAoB,YAAalK,KAAK4S,oBACjDvO,SAAS6F,oBAAoB,YAAalK,KAAK6S,mBACjD,CAEA,OAAAvP,GACEtD,KAAK8S,kBACL9S,KAAKuR,cACLvR,KAAK+S,kBACL1O,SAASQ,iBAAiB,UAAW7E,KAAKyS,kBAC1CzS,KAAK8Q,MAAMjM,iBAAiB,YAAa7E,KAAK4S,oBAC9CvO,SAASQ,iBAAiB,YAAa7E,KAAK6S,oBAC5CxO,SAASwC,gBAAgBnC,UAAUC,IAAI,gBACzC,CAEA,QAAAjB,CAAS9B,GACP5B,KAAKuR,cACLvR,KAAKgT,gBACLhT,KAAKiT,eACP,CAEA,QAAAzP,GACExD,KAAKkT,eAAe1P,UACtB,CAEA,oBAAApB,GACsB,WAAhBpC,KAAK4B,KAAKuR,IAAsC,WAAnBnT,KAAKwS,YACpCxS,KAAK6Q,UAAUnM,UAAUC,IAAI,UAEV,UAAhB3E,KAAK4B,KAAKuR,IAAqC,WAAnBnT,KAAKwS,YAA6C,WAAhBxS,KAAK4B,KAAKuR,IAAsC,WAAnBnT,KAAKwS,aACnGxS,KAAK6Q,UAAUnM,UAAUyF,OAAO,SAElCnK,KAAKwS,WAAaxS,KAAK4B,KAAKuR,EAC9B,CAEA,uBAAApP,GACsB,cAAhB/D,KAAK4B,KAAKwR,GACZpT,KAAKkT,eAAiBlT,KAAKqT,uBAE3BrT,KAAKkT,eAAiBlT,KAAKsT,yBAE7BtT,KAAKkT,eAAe1P,UACtB,CAEQ,eAAAuP,GACN,MAAMjN,EAAQzB,SAASkP,cAAc,SACrCzN,EAAM0N,YAAc,ijBAmBpBnP,SAASoP,KAAKC,YAAY5N,EAC5B,CAEQ,eAAAgN,GACN9S,KAAK6Q,UAAYxM,SAASkP,cAAc,OACxCvT,KAAK6Q,UAAUnM,UAAUC,IAAI,aAC7B3E,KAAK8Q,MAAQzM,SAASkP,cAAc,OACpCvT,KAAK8Q,MAAMpM,UAAUC,IAAI,SACzB3E,KAAK6Q,UAAU6C,YAAY1T,KAAK8Q,OAChCzM,SAASsP,KAAKD,YAAY1T,KAAK6Q,WAE/B7Q,KAAKsT,yBAA2B,IAAI1C,EAA0B5Q,KAAK4B,KAAM5B,KAAK6Q,UAAW7Q,KAAK8Q,OAC9F9Q,KAAKqT,uBAAyB,IAAIpB,EAAwBjS,KAAK4B,KAAM5B,KAAK6Q,UAAW7Q,KAAK8Q,OAC1F9Q,KAAKkT,eAAiBlT,KAAKsT,wBAC7B,CAEQ,WAAA/B,GACNvR,KAAKkT,eAAe3B,aACtB,CAEQ,cAAAI,CAAe/N,GACrB5D,KAAK+Q,YAAa,EAClB/Q,KAAKkT,eAAevB,eAAe/N,GACnCS,SAASsP,KAAK7N,MAAM8N,WAAa,OACjC5T,KAAK6Q,UAAUnM,UAAUC,IAAI,SAC/B,CAEQ,cAAAiN,CAAehO,GAChB5D,KAAK+Q,YAEV/Q,KAAKkT,eAAetB,eAAehO,EACrC,CAEQ,YAAA8O,GACN1S,KAAK+Q,YAAa,EAClB1M,SAASsP,KAAK7N,MAAM8N,WAAa,GACjC5T,KAAKiT,gBACLjT,KAAK6Q,UAAUnM,UAAUyF,OAAO,SAClC,CAEQ,aAAA6I,GACNhT,KAAK6Q,UAAUnM,UAAUC,IAAI,UAC/B,CAEQ,aAAAsO,GACFjT,KAAK6T,eACPC,aAAa9T,KAAK6T,eAEpB7T,KAAK6T,cAAgBjN,YAAW,KAC9B5G,KAAK6Q,UAAUnM,UAAUyF,OAAO,UAAU,GACzC,IACL,EC9IK,MAAM4J,UAA2B9S,EAEtC,WAAAG,CAAYC,GACV+C,MAAM/C,GAFR,KAAA2S,QAAkB,EAGhBhU,KAAK2B,QAAU,eACjB,CAEA,QAAA4B,CAAS3B,GAEa,GAAhB5B,KAAKgU,SAA+B,GAAfhU,KAAK4B,KAAKqS,IACjCjU,KAAKgU,QAAU,EACf3P,SAASwC,gBAAgBf,MAAMiD,YAAY,SAAU,MAEpC,GAAf/I,KAAK4B,KAAKqS,IACZ5P,SAASwC,gBAAgBf,MAAMiD,YAAY,SAAU/I,KAAK4B,KAAKqS,EAAErI,YACjE5L,KAAKgU,QAAUpS,EAAKqS,EAGxB,ECjBK,MAAMC,UAAuBjT,EAqBlC,WAAAG,CAAYC,GACV+C,MAAM/C,GArBA,KAAA8S,cAAgB,CAAC7R,EAAsB8R,KAC7C,IAAIC,EAAmB,kBACrB/R,EAAO8K,OAASpN,KAAK4B,KAAKyP,GAAK/O,EAAOqL,sBAAwByG,EAAW9R,EAAO8K,OAASpN,KAAK4B,KAAKyP,GAAK/O,EAAOsL,4BAEjHtL,EAAOG,GAAGqD,MAAMwO,UAAYD,EAC5B/R,EAAOkI,SAAS7H,SAAS4B,IACvBA,EAAQuB,MAAMwO,UAAYD,CAAgB,GAC1C,EAGI,KAAAE,qBAAuB,KAC7BvU,KAAKyB,QAAQkB,SAASL,IACpB,IAAI8R,EAAW/I,KAAKyD,IAAI,EAAGzD,KAAK2D,IAAI,GAAIhP,KAAK4B,KAAK8P,EAAIpP,EAAO2K,UAAY3K,EAAO6K,gBAChF7K,EAAOG,GAAGqD,MAAMiD,YAAYzG,EAAOnC,IAAKiU,EAASxI,YACjD5L,KAAKmU,cAAc7R,EAAQ8R,EAAS,GACpC,EAEI,KAAAI,oBAAsB,OACtB,KAAAC,cAAgBzU,KAAKuU,qBAI3BvU,KAAK2B,QAAU,UACjB,CAEA,SAAAkB,CAAUP,GACR,GAAqB,MAAjBtC,KAAKsB,SAAkB,CACzB,GAA6C,MAAzCtB,KAAKsB,SAAS,wBAAiC,CACjD,IAAIoT,EAAmB1U,KAAK8B,UAAUU,QAAQF,EAAOG,GAAI,uBAAwBzC,KAAKsB,SAAS,yBAC/FgB,EAAOqL,sBAA+B,GAAM+G,EAAZ,GAChCpS,EAAOsL,oBAAsB,GAAM,IAAO,EAAI8G,E,CAER,MAApC1U,KAAKsB,SAAS,qBAChBgB,EAAO8K,OAASpN,KAAKsB,SAAS,mB,CAIpC,CAEA,QAAAoC,CAAS9B,GACP5B,KAAKyU,eACP,CACA,uBAAA1Q,GACsB,YAAhB/D,KAAK4B,KAAKwR,GACZpT,KAAKmU,cAAgB,CAAC7R,EAAsB8R,KAC1C,IAAIC,EAAmB,kBACrB/R,EAAO8K,OAASpN,KAAK4B,KAAKyP,GAAK/O,EAAOqL,sBAAwByG,EAAW9R,EAAO8K,OAASpN,KAAK4B,KAAKyP,GAAK/O,EAAOsL,4BAEjHtL,EAAOG,GAAGqD,MAAMwO,UAAYD,EAC5B/R,EAAOkI,SAAS7H,SAAS4B,IACvBA,EAAQuB,MAAMwO,UAAYD,CAAgB,GAC1C,EAGJrU,KAAKmU,cAAgB,CAAC7R,EAAsB8R,KAC1C,IAAIC,EAAmB,eACrB/R,EAAO8K,OAASpN,KAAK4B,KAAKyP,GAAK/O,EAAOqL,sBAAwByG,EAAW9R,EAAO8K,OAASpN,KAAK4B,KAAKyP,GAAK/O,EAAOsL,+BAEjHtL,EAAOG,GAAGqD,MAAMwO,UAAYD,EAC5B/R,EAAOkI,SAAS7H,SAAS4B,IACvBA,EAAQuB,MAAMwO,UAAYD,CAAgB,GAC1C,CAGR,CAEA,QAAA7Q,GACMqM,OAAO8E,WAAa,KACtB3U,KAAKyU,cAAgBzU,KAAKuU,sBAE1BvU,KAAKyU,cAAgBzU,KAAKwU,oBAC1BxU,KAAKyB,QAAQkB,SAASL,IACpBtC,KAAKmU,cAAc7R,EAAQ,GAAG,IAGpC,EC5EK,MAAMsS,UAAuB3T,EAClC,WAAAG,CAAYC,GACV+C,MAAM/C,GACNrB,KAAK2B,QAAU,UACjB,CACA,QAAA+B,CAAS9B,GACP5B,KAAKyB,QAAQkB,SAASL,IACpBtC,KAAK6U,YAAYvS,EAAQtC,KAAK4B,KAAK8P,EAAE,GAEzC,CACA,SAAA7O,CAAUP,GACRA,EAAO8H,QAAU,KACfpK,KAAK6U,YAAYvS,EAAQtC,KAAK4B,KAAK8P,EAAE,CAEzC,CAEQ,WAAAmD,CAAYvS,EAAsBwS,GACxC,IAAIV,EAAW/I,KAAKyD,IAAI,EAAGzD,KAAK2D,IAAI,GAAI8F,EAAaxS,EAAO2K,UAAY3K,EAAO6K,gBAE/EnN,KAAKkC,OAAO4G,KAAK,YAAYxG,EAAOS,KAAMqR,GAC1C9R,EAAOG,GAAGqD,MAAMiD,YAAYzG,EAAOnC,IAAKiU,EAASxI,YACjDtJ,EAAOkI,SAAS7H,SAAS4B,IACvBA,EAAQuB,MAAMiD,YAAYzG,EAAOnC,IAAKiU,EAASxI,WAAW,GAE9D,ECzBK,MAAMmJ,EAYX,WAAA3T,CAAYiD,EAAe/C,EAA8BM,GAVlD,KAAAoT,QAAkB,EAClB,KAAAC,mBAA6B,EAC7B,KAAA9R,KAAe,GAEf,KAAA8Q,EAAI,EACD,KAAAiB,GAAa,EAYvB,KAAAC,aAAoB,KAClBnV,KAAKoV,gBAAgBpD,SAAS,EAAGhS,KAAK4B,KAAK8P,EAAE,EAMrC,KAAA2D,iBAA8C,WAbtDrV,KAAKsV,EAAIjR,EACTrE,KAAKsB,SAAWA,EAChBtB,KAAK4B,KAAOA,EACZ5B,KAAKoV,gBAAkBvF,MACzB,CAKA,QAAAtM,GAAkB,CAClB,OAAAM,CAAQD,GAAe,CACvB,QAAAF,CAASE,GAAe,CAGxB,mBAAI2R,CAAgBA,GAClBvV,KAAKqV,iBAAmBE,EACK,YAAzBvV,KAAKqV,iBACPrV,KAAKmV,aAAe,KAClBnV,KAAKoV,gBAAgBpD,SAAS,EAAGhS,KAAK4B,KAAK8P,EAAE,EAEb,cAAzB1R,KAAKqV,mBACdrV,KAAKmV,aAAe,KAClBnV,KAAKoV,gBAAgBpD,SAAShS,KAAK4B,KAAK8P,EAAG,EAAE,EAGnD,ECpCK,MAAM8D,UAA4BT,EAEvC,WAAA3T,CAAYiD,EAAe/C,EAA8BM,GACvDwC,MAAMC,EAAU/C,EAAUM,GAFpB,KAAA6T,SAAmB,EAGzBzV,KAAKmD,KAAO,QACd,CACO,QAAAI,GACLvD,KAAKkV,GAAKlV,KAAKsV,EAAEzO,gBAAgB6O,UAAY1V,KAAKyV,SAClDzV,KAAKyV,SAAWzV,KAAKsV,EAAEzO,gBAAgB6O,UACvC1V,KAAK4B,KAAKqS,EAAIjU,KAAKkV,EACrB,CACO,QAAAxR,CAASE,GACd5D,KAAK4B,KAAK8P,EAAI1R,KAAKsV,EAAEzO,gBAAgB6O,UACrC1V,KAAK4B,KAAKmQ,EAAI/R,KAAKsV,EAAEzO,gBAAgB6O,UACrC1V,KAAK4B,KAAK0T,EAAI,CAChB,ECfK,MAAMK,UAA4BZ,EACvC,WAAA3T,CAAYiD,EAAe/C,EAA8BM,GACvDwC,MAAMC,EAAU/C,EAAUM,GAC1B5B,KAAKmD,KAAO,SACd,CAEO,QAAAI,GAAY,CAEZ,OAAAM,CAAQD,GACbA,EAAEgS,gBACJ,CAEO,QAAAlS,CAASE,GACdA,EAAEgS,gBACJ,ECfK,MAAMC,UAA2Bd,EAKtC,WAAA3T,CAAYiD,EAAe/C,EAA8BM,GACvDwC,MAAMC,EAAU/C,EAAUM,GALrB,KAAAuB,KAAe,UACd,KAAA2S,UAAoB,EACpB,KAAAC,yBAAmC,EAIzC/V,KAAKmD,KAAO,SACd,CAEO,QAAAI,GAEL,GADAvD,KAAK4B,KAAKqS,GAAKjU,KAAK4B,KAAKmQ,EAAI/R,KAAK4B,KAAK8P,GAAK1R,KAAKsB,SAAS0U,MACtDhW,KAAK+V,wBAGP,OAFA/V,KAAK+V,yBAA0B,OAC/B/V,KAAK4B,KAAK8P,EAAI1R,KAAK4B,KAAKmQ,GAG1B,GAAmB,GAAf/R,KAAK4B,KAAKqS,EAAQ,CAGpB,IAAIgC,EAFJjW,KAAK8V,UAAW,EAGZ9V,KAAK4B,KAAKqS,EAAI,GAChBgC,EAAO5K,KAAK6K,KAAKlW,KAAK4B,KAAK8P,EAAI1R,KAAK4B,KAAKqS,GACzC5P,SAASwC,gBAAgBnC,UAAUC,IAAI,mBACvCN,SAASwC,gBAAgBnC,UAAUyF,OAAO,kBAE1C8L,EAAO5K,KAAKoB,MAAMzM,KAAK4B,KAAK8P,EAAI1R,KAAK4B,KAAKqS,GAC1C5P,SAASwC,gBAAgBnC,UAAUC,IAAI,gBACvCN,SAASwC,gBAAgBnC,UAAUyF,OAAO,oBAGxCnK,KAAK4B,KAAK8P,GAAKuE,GACjBjW,KAAK4B,KAAK8P,EAAIuE,EACdjW,KAAKgV,QAAS,EACdhV,KAAKmV,gBAELnV,KAAK4B,KAAK8P,EAAIuE,C,MAEPjW,KAAK8V,WACd9V,KAAK8V,UAAW,EAChB9V,KAAK4B,KAAKqS,EAAI,EACdjU,KAAK4B,KAAK8P,EAAI1R,KAAK4B,KAAKmQ,EACxB/R,KAAKgV,QAAS,EACd3Q,SAASwC,gBAAgBnC,UAAUyF,OAAO,gBAC1C9F,SAASwC,gBAAgBnC,UAAUyF,OAAO,mBAC1C9F,SAASwC,gBAAgBf,MAAMiD,YAAY,SAAU,KAEzD,CACO,OAAAlF,CAAQD,GACG,GAAZA,EAAEiO,SACJjO,EAAEgS,iBACF5V,KAAK4B,KAAK0T,EAAI1R,EAAEiO,OAChB7R,KAAK4B,KAAKmQ,GAAK/R,KAAK4B,KAAK0T,EACzBtV,KAAK4B,KAAKmQ,EAAI1G,KAAKyD,IAAIzD,KAAK2D,IAAIhP,KAAK4B,KAAKmQ,EAAG,GAAI/R,KAAK4B,KAAK+K,IAE/D,CACO,QAAAjJ,CAASE,GACK,GAAf5D,KAAKgV,SACPhV,KAAK+V,yBAA0B,EACOhH,MAAlC/O,KAAKoV,gBAAgBM,UACvB1V,KAAK4B,KAAKmQ,EAAI1N,SAASwC,gBAAgB6O,UAEvC1V,KAAK4B,KAAKmQ,EAAI/R,KAAKoV,gBAAgBM,UAGzC,ECrEK,MAAMS,EAAb,cACU,KAAAC,GAAa,EACb,KAAAC,GAAa,IACb,KAAAjD,GAAa,GAwBvB,CAtBE,SAAW4C,GACT,OAAOhW,KAAKoW,EACd,CACA,mBAAWE,GACT,OAAOtW,KAAKqW,EACd,CACA,mBAAWE,GACT,OAAOvW,KAAKoT,EACd,CAEA,mBAAWkD,CAAgBN,GACzBhW,KAAKqW,GAAKL,EACVhW,KAAKwW,oBACP,CACA,mBAAWD,CAAgBP,GACzBhW,KAAKoT,GAAK4C,EACVhW,KAAKwW,oBACP,CAEQ,kBAAAA,GACNxW,KAAKoW,GAAKpW,KAAKqW,IAAM,EAAIrW,KAAKoT,GAChC,ECNK,MAAMqD,UAAoBxV,EAC/B,WAAAG,CAAYC,GACV+C,MAAM/C,GACNrB,KAAK2B,QAAU,OACjB,CAEA,OAAA2B,GAAiB,CACjB,QAAAE,GACEa,SAASC,iBAAiB,6BAA6B3B,SAAS4B,IAC9D,MAAMmS,EAAe1W,KAAK2W,kBAAkBpS,EAAQE,aAAa,iBAC7DF,EAAQqS,WAAa5W,KAAK0C,MAAMgU,EAAcnS,GAASsS,OACzDtS,EAAQqS,UAAY5W,KAAK0C,MAAMgU,EAAcnS,GAASsS,K,GAG5D,CAEA,SAAAhU,CAAUP,GACR,IAAIiC,EAAUjC,EAAOG,GACrB,IAAK8B,EAAQG,UAAUoS,SAAS,YAAa,CAC3CvS,EAAQG,UAAUC,IAAI,YACtBJ,EAAQ6C,aAAa,wBAAyB7C,EAAQqS,WACtD,MAAMF,EAAe1W,KAAK2W,kBAAkBpS,EAAQE,aAAa,iBAE7DF,EAAQqS,WAAa5W,KAAK0C,MAAMgU,EAAcnS,GAASsS,OACzDtS,EAAQqS,UAAY5W,KAAK0C,MAAMgU,EAAcnS,GAASsS,K,CAG5D,CAEQ,iBAAAF,CAAkBI,GACxB,MAAMC,EAAyB,CAC7BC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,SAAU,GACVC,SAAU,GACVC,SAAU,IAqCZ,OAlCIP,GACYA,EAAerU,MAAM,KAE7BC,SAAS4U,IACb,MAAMC,EAAQD,EAAKC,MAAM,8BAEzB,GAAIA,EAAO,CACT,MAAMC,EAASD,EAAM,IAAM,GACrBE,EAASF,EAAM,GACfG,EAASH,EAAM,GAAKA,EAAM,GAAG9U,MAAM,KAAO,GAChD,OAAQ+U,EAASC,GACf,IAAK,YACFV,EAAQI,SAAmB5I,KAAKxO,KAAK4X,WAAWD,IACjD,MACF,IAAK,YACFX,EAAQK,SAAmB7I,KAAKxO,KAAK4X,WAAWD,IACjD,MACF,IAAK,YACFX,EAAQM,SAAmB9I,KAAKxO,KAAK4X,WAAWD,IACjD,MACF,IAAK,OACFX,EAAQC,KAAezI,KAAKxO,KAAK4X,WAAWD,IAC7C,MACF,IAAK,OACFX,EAAQE,KAAe1I,KAAKxO,KAAK4X,WAAWD,IAC7C,MACF,IAAK,OACFX,EAAQG,KAAe3I,KAAKxO,KAAK4X,WAAWD,I,KAOhDX,CACT,CAEQ,UAAAY,CAAWD,GACjB,MAAME,EAAkF,CAAEC,MAAO,SAoBjG,OAlBAH,EAAOhV,SAASoV,IACd,GAAc,QAAVA,EACFF,EAAO3J,KAAM,OACR,GAAI6J,EAAMC,WAAW,UAAW,CACrC,MAAMR,EAAQO,EAAMP,MAAM,yBACtBA,GACFK,EAAOI,OAAS,CAAEnJ,IAAKoJ,SAASV,EAAM,IAAKxI,IAAKkJ,SAASV,EAAM,KAC/DK,EAAOC,MAAQ,UAEfD,EAAOC,MAAQ,Q,KAER,CAAC,QAAS,SAAU,OAAOK,SAASJ,GAC7CF,EAAOC,MAAQC,EAEfF,EAAOC,MAAQ,O,IAIZD,CACT,CAEO,KAAAnV,CAAMsU,EAAwBoB,GAEnC,IAAIC,EAAOD,EAAY3T,aAAa,yBACpC,GAAoB,IAAhB4T,EAAKC,OAAc,MAAO,GAE9BD,EAAOrY,KAAKuY,iBAAiBF,GAC7B,MAAM9T,EAAUF,SAASkP,cAAc,QACjCiF,EAAQH,EAAK3V,MAAM,OACzB,IAAI+V,EAAkB,EAClBC,EAAkB,EACtB,MAAMC,EAAaN,EAAKO,QAAQ,MAAO,IAAIN,OAErCO,EAAWxU,SAASkP,cAAc,QAClCuF,EAAajJ,OAAOkJ,iBAAiBX,GAE3CS,EAAS/S,MAAMkT,WAAaF,EAAWE,WACvCH,EAAS/S,MAAMmT,SAAWH,EAAWG,SACrCJ,EAAS/S,MAAMoT,cAAgBJ,EAAWI,cAC1CL,EAAS/S,MAAMqT,WAAaL,EAAWK,WACvCN,EAAS/S,MAAMsT,WAAaN,EAAWM,WACvCP,EAASnU,UAAUC,IAAI,WACvBN,SAASsP,KAAKD,YAAYmF,GAE1B,IAAIQ,EAAsB,GACtBC,EAAqB,GACrBC,EAAmB,EACvBf,EAAM7V,SAAQ,CAACuU,EAAWsC,KACxBX,EAASrF,YAAc0D,EACnBA,EAAKoB,OAAS,IAChBO,EAASrF,aAAe,KAG1B,MAAMiG,EAAYZ,EAASa,YAErBC,EAAkB,CACtBtB,KAAMnB,EACNlR,MAAOyT,EACPG,MAAO,IAAIlY,OAECA,MAAMuB,KAAKiU,GACnBvU,SAAQ,CAACwU,EAAM0C,KACnB,MAAMC,EAAkB,CACtBzB,KAAMlB,GAGRwC,EAAgBC,MAAMpL,KAAKsL,EAAgB,IAEzCP,EAAmBE,EAAYrB,EAAYsB,cAC7CL,EAAa7K,KAAK8K,GAClBA,EAAc,GACdC,EAAmB,EACnBd,GAAmBa,EAAYhB,QAEjCgB,EAAY9K,KAAKmL,GACjBJ,GAAoBE,CAAS,IAG/BJ,EAAa7K,KAAK8K,GAElB,IAAIS,GAAiB,EACD,MAAhB/C,EAAQC,MACND,EAAQC,KAAKqB,OAAS,IACxByB,GAAiB,GAGG,MAApB/C,EAAQM,UACNN,EAAQM,SAASgB,OAAS,IAC5ByB,GAAiB,GAGG,MAApB/C,EAAQI,UACNJ,EAAQI,SAASkB,OAAS,IAC5ByB,GAAiB,GAIrB,IAAIC,EAAkB,EACtB,GAAID,EAIF,IAAK,IAAIE,EAAI,EAAGA,EAAIZ,EAAaf,OAAQ2B,IACvCja,KAAKka,uBACHD,EACAZ,EAAaf,OACbE,EAAMF,OACN/T,EACA8U,EAAaY,GACbjD,EACAyB,EACAE,EACAqB,GAEFA,GAAmBX,EAAaY,GAAG3B,YAGrC,IAAK,IAAI2B,EAAI,EAAGA,EAAIZ,EAAaf,OAAQ2B,IACvCZ,EAAaY,GAAGtX,SAAQ,CAACgX,EAAsBH,KAC7C,GAAIG,EAAgBC,MAAMtB,OAAS,EAAG,CACpC,MAAM6B,EAAW9V,SAASkP,cAAc,QACxC4G,EAASzV,UAAUC,IAAI,WACvBgV,EAAgBC,MAAMjX,SAAQ,CAACmX,EAAsBD,KACnD,MAAMO,EAAW/V,SAASkP,cAAc,QACxC6G,EAAS1V,UAAUC,IAAI,WACvByV,EAAS5G,YAAcsG,EAAgBzB,KACvCrY,KAAKqa,aAAaD,EAAUpD,EAAQG,KAAMsB,EAAiB,OAAQoB,EAAWlB,GAC9E3Y,KAAKqa,aAAaD,EAAUpD,EAAQK,SAAUwC,EAAW,YAAaA,EAAWF,EAAgBtB,KAAKC,QACtG6B,EAASzG,YAAY0G,GACrB3B,GAAiB,IAEnBzY,KAAKqa,aAAaF,EAAUnD,EAAQE,KAAMwB,EAAiB,OAAQc,EAAWhB,EAAMF,QAChFqB,EAAgBC,MAAMtB,OAAS,IACjC6B,EAASvD,WAAa,KAExBrS,EAAQmP,YAAYyG,GACpBzB,G,KAOR,OADArU,SAASsP,KAAK2G,YAAYzB,GACnB,CAAEhC,KAAMtS,EAAQqS,UACzB,CAGQ,sBAAAsD,CACNK,EACAjC,EACAkC,EACAjW,EACA+U,EACAtC,EACAyB,EACAE,EACAqB,GAEA,MAAMS,EAAWpW,SAASkP,cAAc,QACxCkH,EAAS/V,UAAUC,IAAI,WAEvB3E,KAAKqa,aAAaI,EAAUzD,EAAQC,KAAMsD,EAAW,OAAQ,EAAGjC,GAEhE,IAAIoC,EAAgB,EAChBhC,EAAkB,EAClBiC,EAAiB,EACrBrB,EAAY3W,SAAQ,CAACgX,EAAiBH,KACpCmB,GAAkBhB,EAAgBtB,KAAKC,MAAM,IAE/CgB,EAAY3W,SAAQ,CAACgX,EAAiBH,KACpC,GAAIG,EAAgBC,MAAMtB,OAAS,EAAG,CACpC,MAAM6B,EAAW9V,SAASkP,cAAc,QACxC4G,EAASzV,UAAUC,IAAI,WAEvBgV,EAAgBC,MAAMjX,SAAQ,CAACmX,EAAsBD,KACnD,MAAMO,EAAW/V,SAASkP,cAAc,QACxC6G,EAAS1V,UAAUC,IAAI,WACvByV,EAAS5G,YAAcsG,EAAgBzB,KAEvCrY,KAAKqa,aAAaD,EAAUpD,EAAQG,KAAMsB,EAAiB,OAAQoB,EAAWlB,GAC9E3Y,KAAKqa,aAAaD,EAAUpD,EAAQI,SAAUsD,EAAe,YAAab,EAAWc,GACrF3a,KAAKqa,aAAaD,EAAUpD,EAAQK,SAAUwC,EAAW,YAAaA,EAAWF,EAAgBtB,KAAKC,QAEtG6B,EAASzG,YAAY0G,GACrB3B,IACAiC,GAAe,IAGjB1a,KAAKqa,aACHF,EACAnD,EAAQE,KACR8C,EAAkBtB,EAClB,OACAsB,EAAkBtB,EAClB8B,EAAa,GAEfxa,KAAKqa,aAAaF,EAAUnD,EAAQM,SAAUkC,EAAW,YAAaA,EAAWF,EAAYhB,QAEzFkB,EAAYF,EAAYhB,OAAS,IACnC6B,EAASvD,WAAa,KAIxB6D,EAAS/G,YAAYyG,GAIrBzB,G,KAIJnU,EAAQmP,YAAY+G,EACtB,CAEQ,YAAAJ,CACNO,EACAC,EACAC,EACA5Z,EACA6Z,EACAC,GAEIH,GACFA,EAAYlY,SAAQ,CAAC+U,EAAQuD,KAC3B,IAAIC,EAAQlb,KAAKmb,eAAezD,EAAQoD,EAAaC,EAAYC,GAEjE,MAAMI,EAAepb,KAAKqb,qBAAqBna,EAAMwW,EAAQuD,GAC7DL,EAAK9U,MAAMiD,YAAYqS,EAAcE,OAAOJ,GAAO,GAGzD,CAEQ,eAAAK,GACN,MAAMC,EAAYnX,SAASkP,cAAc,QAEzC,OADAiI,EAAU5E,UAAY,IACf4E,CACT,CAEQ,gBAAAjD,CAAiBkD,GACvB,OAAOA,EAAI7C,QAAQ,SAAU,IAC/B,CAEQ,cAAAuC,CACNnE,EACA8D,EACAC,EACAC,GAEA,IAAIE,EAAQJ,EACZ,GAAsB,WAAlB9D,EAAQc,MAAoB,MACP/I,IAAnBiI,EAAQiB,SACVjB,EAAQiB,OAAS,CAAEnJ,IAAK,EAAGE,IAAKgM,IAElC,MAAMlM,EAAMkI,EAAQiB,OAAOnJ,KAAO,EAC5BE,EAAMgI,EAAQiB,OAAOjJ,KAAOgM,EAClCE,EAAQ7P,KAAKoB,MAAMpB,KAAK4M,UAAYjJ,EAAMF,EAAM,IAAMA,C,CAWxD,MATsB,QAAlBkI,EAAQc,MACVoD,EAAQF,EAAeE,EAAQ,EACJ,WAAlBlE,EAAQc,QACjBoD,GAAgB7P,KAAKoB,MAAMuO,EAAe,IAGxChE,EAAQ9I,MACVgN,EAAQ7P,KAAK6C,IAAIgN,IAEZA,CACT,CAEQ,oBAAAG,CACNna,EACAwW,EACAwD,GAEA,IAAIE,EAAe,KAAKla,IAIxB,OAHIwW,EAAOI,QACTsD,GAAgB,IAAI1D,EAAOI,SAEtBsD,CACT,EC1XK,MAAMM,EAAb,cACU,KAAAC,oBAA8B,EAK9B,KAAAC,mBAA6B,EAC9B,KAAAC,QAAU,MAsBnB,CArBS,KAAA/P,CAAMgQ,GACP9b,KAAK2b,qBACT3b,KAAK+b,YAAc,IAAOD,EAC1B9b,KAAK8H,KAAOkU,KAAKC,MACjBjc,KAAKkc,UACLlc,KAAK2b,oBAAqB,EAC5B,CACO,IAAAQ,GACAnc,KAAK2b,qBACVS,qBAAqBpc,KAAK4b,oBAC1B5b,KAAK2b,oBAAqB,EAC5B,CACQ,OAAAO,GACNlc,KAAK4b,mBAAqBS,uBAAsB,KAAQrc,KAAKkc,SAAS,IACtElc,KAAKic,IAAMD,KAAKC,MAChBjc,KAAKsc,QAAUtc,KAAKic,IAAMjc,KAAK8H,KAC3B9H,KAAKsc,QAAUtc,KAAK+b,cACtB/b,KAAK8H,KAAO9H,KAAKic,IAAOjc,KAAKsc,QAAUtc,KAAK+b,YAC5C/b,KAAK6b,UAET,ECzBK,MAAMU,UAAyBtb,EAKpC,WAAAG,CAAYC,GACV+C,MAAM/C,GALA,KAAAmb,UAAoB,EAM1Bxc,KAAKmB,MAAQ,CACf,CACQ,oBAAAsb,GACNzc,KAAK0c,eAAiBrY,SAASkP,cAAc,OAC7CvT,KAAK0c,eAAe5W,MAAM9D,SAAW,QACrChC,KAAK0c,eAAe5W,MAAM6W,OAAS,OACnC3c,KAAK0c,eAAe5W,MAAM8W,MAAQ,OAClC5c,KAAK0c,eAAe5W,MAAM+W,gBAAkB,UAC5C7c,KAAK0c,eAAe5W,MAAMgX,OAAS,qCACnC9c,KAAK0c,eAAe5W,MAAMiX,OAAS,OACnC/c,KAAK0c,eAAetV,aAAa,WAAY,KAC7C/C,SAASsP,KAAKD,YAAY1T,KAAK0c,gBAC/B,MAAM5W,EAAQzB,SAASkP,cAAc,SACrCzN,EAAM8Q,UAAY,+PAWlBvS,SAASoP,KAAKC,YAAY5N,EAC5B,CACA,OAAAxC,GACEtD,KAAKyc,uBACLzc,KAAKgd,WAAaC,aAAY,KAC5Bjd,KAAK0c,eAAetV,aAAa,MAAO,GAAGpH,KAAKwc,aAChDxc,KAAKwc,UAAY,CAAC,GACjB,IACL,CAEA,QAAAjZ,CAAS3B,GACP5B,KAAKwc,WACP,CAEA,UAAAra,GACE+a,cAAcld,KAAKgd,YACnB3Y,SAASsP,KAAK2G,YAAYta,KAAK0c,eACjC,EChDK,MAAMS,UAA8Blc,EAKzC,WAAAG,CAAYC,GACV+C,MAAM/C,GALA,KAAAmb,UAAoB,EAM1Bxc,KAAKmB,MAAQ,CACf,CACQ,oBAAAsb,GACNzc,KAAK0c,eAAiBrY,SAASkP,cAAc,OAC7CvT,KAAK0c,eAAe5W,MAAM9D,SAAW,QACrChC,KAAK0c,eAAe5W,MAAM6W,OAAS,OACnC3c,KAAK0c,eAAe5W,MAAMuD,KAAO,OACjCrJ,KAAK0c,eAAe5W,MAAM+W,gBAAkB,UAC5C7c,KAAK0c,eAAe5W,MAAMgX,OAAS,qCACnC9c,KAAK0c,eAAe5W,MAAMiX,OAAS,OACnC/c,KAAK0c,eAAetV,aAAa,gBAAiB,KAClD/C,SAASsP,KAAKD,YAAY1T,KAAK0c,gBAC/B,MAAM5W,EAAQzB,SAASkP,cAAc,SACrCzN,EAAM8Q,UAAY,2RAWlBvS,SAASoP,KAAKC,YAAY5N,EAC5B,CACA,OAAAxC,GACEtD,KAAKyc,sBACP,CAEA,QAAA/Y,CAAS9B,GACP,IAAIwb,EAAY,GACZxb,EAAK8P,EAAI9P,EAAKmQ,IAChBqL,EAAY,KAEVxb,EAAK8P,EAAI9P,EAAKmQ,IAChBqL,EAAY,KAEdpd,KAAK0c,eAAetV,aAAa,YAAagW,GAC9Cpd,KAAK0c,eAAetV,aAAa,QAAS,GAAGpH,KAAK4B,KAAK8P,IACzD,CAEA,QAAAnO,CAAS3B,GACP5B,KAAKwc,WACP,CAEA,UAAAra,GACEkC,SAASsP,KAAK2G,YAAYta,KAAK0c,eACjC,EC1DK,MAAMW,EACX,OAAA7a,CAAQoB,EAAQ0Z,EAAWhI,EAAS,MAClC,OAA4B,MAArB1R,EAAEa,aAAa6Y,GAAahI,EAAI1R,EAAEa,aAAa6Y,EACxD,ECHK,MAAMC,EACX,OAAA/a,CAAQoB,GACN,OAAOA,EAAEsF,uBACX,ECHK,MAAMsU,EAAb,cACE,KAAAzL,EAAY,EACZ,KAAAL,EAAY,EACZ,KAAA4D,EAAY,EACZ,KAAArB,EAAY,EACZ,KAAAtH,GAAa,EACb,KAAA8Q,GAAa,EACb,KAAApM,GAAa,EACb,KAAAqM,KAAe,EAEf,KAAAvL,IAAc,EACd,KAAAhB,IAAc,EAEd,KAAAwM,KAAe,EACf,KAAAC,KAAe,EACf,KAAAxK,GAAgC,WAEhC,KAAAD,GAAuC,QACzC,EClBO,MAAM0K,EAAb,cAEU,KAAAC,YAA4C,IAAItc,IAChD,KAAAU,OAA0B,IAAIR,KAqCxC,CApCE,EAAAqc,CAAGhb,EAAYkH,G,MACoB,GAA5BjK,KAAK8d,YAAYE,IAAIjb,IACxB/C,KAAK8d,YAAY9a,IAAID,EAAI,IAEH,QAAxB,EAAA/C,KAAK8d,YAAYtd,IAAIuC,UAAG,SAAEyL,KAAKvE,GAC/BjK,KAAKie,iBACP,CACO,GAAAD,CAAIjb,GACT,OAAO/C,KAAK8d,YAAYE,IAAIjb,EAC9B,CACO,IAAA+F,CAAK/F,EAAY/B,G,MAClBhB,KAAK8d,YAAYE,IAAIjb,KACC,QAAxB,EAAA/C,KAAK8d,YAAYtd,IAAIuC,UAAG,SAAEJ,SAASsH,IACjCA,EAAMjJ,EAAM,IAGlB,CACO,GAAAkd,CAAInb,EAAYkH,GACrB,IAAIkU,EAAKne,KAAK8d,YAAYtd,IAAIuC,GACtB,MAAJob,GACFne,KAAK8d,YAAY9a,IAAID,EAAIob,EAAGC,QAAQC,GAAWA,IAAMpU,KAEvDjK,KAAKie,iBACP,CACO,GAAAK,CAAItd,GACThB,KAAKkC,OAAOS,SAAQsH,IAClBA,EAAMjJ,EAAM,GAEhB,CACQ,eAAAid,GACNvc,MAAMuB,KAAKjD,KAAK8d,YAAYS,UAAU5b,SAAQ6b,IAC5CA,EAAa7b,SAAQsH,IACnBjK,KAAKkC,OAAOsM,KAAKvE,EAAM,GACvB,GAEN,ECvCK,MAAMwU,EACJ,WAAAC,CAAYzK,EAAW1P,EAAcoa,EAASC,GACnD,IAIIC,EAJAC,EAAa7K,EAAE+D,WAAW,KAc9B,OAbI8G,IACF7K,EAAIA,EAAE8K,MAAM,IAGJ,eAAN9K,EACF4K,EAAKta,EAAQya,aACJ/K,EAAEgL,SAAS,MACpBJ,EAAKK,WAAWjL,GACPA,EAAEgL,SAAS,KACpBJ,EAAKK,WAAWjL,GAAK0K,EAAK,IACjB1K,EAAEgL,SAAS,SACpBJ,EAAKK,WAAWjL,GAAK2K,GAEhBE,GAAcD,EAAKA,CAC5B,ECSK,MAAMM,EACX,OAAA3c,CAAQoB,EAAQwb,EAAiB/a,SAASsP,MACxC,IAAI0L,EACJ,IACEA,EAAKD,EAAUlW,uB,CACf,MAAOoW,GACPD,EAAKhb,SAASsP,KAAKzK,uB,CAErB,IAAIqW,EAlCR,SAA2B9c,GACzB,IAAI,IAAE8G,EAAG,KAAEF,EAAI,MAAErD,EAAK,OAAEC,GAAWxD,EAAGyG,wBAClCsW,EAaJ,SAAwB/c,GAEtB,OADgBoN,OAAOkJ,iBAAiBtW,GAAI6R,UAEzC5R,MAAM,WACNqc,MAAM,GAAI,GACV7b,KAAI,SAAU+Q,GACb,OAAOiL,WAAWjL,EACpB,GACJ,CArBmBwL,CAAehd,GAClC,GAA2B,GAAvB+c,EAAalH,OAAa,CAC5B,IAAIvG,EAAIyN,EACR,IAAIE,EAAM3N,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,GACjC,MAAO,CACL/L,MAAOA,EAAQ+L,EAAE,IAAM,EAAI,EAAIA,EAAE,GACjC9L,OAAQA,EAAS8L,EAAE,IAAM,EAAI,EAAIA,EAAE,GACnC1I,MAAOA,EAAO0I,EAAE,GAAKxI,EAAMwI,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,IAAM2N,EAC/DnW,MAAOF,EAAO0I,EAAE,GAAKxI,EAAMwI,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,IAAM2N,E,CAGjE,MAAO,CAAEnW,MAAKF,OAAMrD,QAAOC,SAW/B,CAUa0Z,CAAkB/b,GAG3B,MAAO,CAAE2F,IAFDgW,EAAGhW,IAAM8V,EAAG9V,IAEHF,KADRkW,EAAGlW,KAAOgW,EAAGhW,KAExB,ECPF,SAASuW,IACP,MAAO,iBAAkB/P,QAAUgQ,UAAUC,eAAiB,CAChE,CAEA,MAAMC,EAwCJ,mBAAIxK,GACF,OAAOvV,KAAK4B,KAAKwR,EACnB,CAEA,mBAAImC,CAAgBA,GAClBvV,KAAK4B,KAAKwR,GAAKmC,EAEfvV,KAAKggB,IAAIzK,gBAAkBA,EAC3BvV,KAAKigB,UAAU1K,gBAAkBA,EACjCvV,KAAKkgB,WAAW3K,gBAAkBA,EAClCvV,KAAKmgB,WAAW5K,gBAAkBA,EAEX,cAAnBA,GACFlR,SAASwC,gBAAgBnC,UAAUC,IAAI,eACvCN,SAASwC,gBAAgBnC,UAAUyF,OAAO,eAE1C9F,SAASwC,gBAAgBnC,UAAUC,IAAI,aACvCN,SAASwC,gBAAgBnC,UAAUyF,OAAO,gBAG5CnK,KAAKogB,UACLpgB,KAAKqgB,cACLrgB,KAAKmO,QAAQxL,SAAS9C,IACpBA,EAAOkE,yBAAyB,GAEpC,CACA,mBAAIuS,GACF,OAAOtW,KAAKsB,SAASgV,eACvB,CACA,mBAAIA,CAAgBN,GAClBhW,KAAKsB,SAASgV,gBAAkBN,CAClC,CACA,mBAAIO,GACF,OAAOvW,KAAKsB,SAASiV,eACvB,CACA,mBAAIA,CAAgBP,GAClBhW,KAAKsB,SAASiV,gBAAkBP,CAClC,CAEA,kBAAIsK,GACF,OAAOtgB,KAAK4B,KAAK8P,CACnB,CACA,kBAAI4O,CAAeA,GACjBtgB,KAAK4B,KAAK8P,EAAI4O,EACdtgB,KAAK4B,KAAKmQ,EAAIuO,EACdzQ,OAAOmC,SAAS,EAAGhS,KAAK4B,KAAK8P,GAC7B1R,KAAKmO,QAAQxL,SAAS9C,IACpBA,EAAO6D,SAAS1D,KAAK4B,KAAK,GAE9B,CACA,mBAAIwT,CAAgBgK,GAClB,IAAImB,EAAiC,MAAhBvgB,KAAK4B,KAAKwU,GAC3BmK,IACFvgB,KAAK4B,KAAKwU,GAAGlM,oBAAoB,SAAUlK,KAAKwgB,cAChDxgB,KAAK4B,KAAKwU,GAAGlM,oBAAoB,SAAUlK,KAAKygB,eAElDzgB,KAAKggB,IAAI5K,gBAAkBgK,EAC3Bpf,KAAKigB,UAAU7K,gBAAkBgK,EACjCpf,KAAKkgB,WAAW9K,gBAAkBgK,EAClCpf,KAAKmgB,WAAW/K,gBAAkBgK,EAClCpf,KAAK4B,KAAKwU,GAAKgJ,EACXmB,IACFvgB,KAAK4B,KAAKwU,GAAGvR,iBAAiB,SAAU7E,KAAKwgB,cAC7CxgB,KAAK4B,KAAKwU,GAAGvR,iBAAiB,SAAU7E,KAAKygB,eAE/CzgB,KAAKogB,UACLpgB,KAAKqgB,aACP,CAIA,oBAAIK,CAAiBC,GACnB3gB,KAAK4gB,MAAQD,EACb3gB,KAAK6gB,kBACP,CAEA,qBAAIC,CAAkBC,GACpB/gB,KAAKghB,MAAQD,EACb/gB,KAAK6gB,kBACP,CACQ,gBAAAA,GAMN,OALI7gB,KAAK6P,OAAO8E,WAAa,MAAQiL,IACnC5f,KAAKwS,WAAaxS,KAAK4gB,MAEvB5gB,KAAKwS,WAAaxS,KAAKghB,MAEjBhhB,KAAKwS,YACX,IAAK,UACHxS,KAAK4B,KAAKuR,GAAK,UACfnT,KAAKggB,IAAMhgB,KAAKmgB,WAChBngB,KAAKoC,uBACLiC,SAASwC,gBAAgBf,MAAMmb,SAAW,SAC1C,MACF,IAAK,UACHjhB,KAAK4B,KAAKuR,GAAK,UACfnT,KAAKggB,IAAMhgB,KAAKkgB,WAChBlgB,KAAKoC,uBACLiC,SAASwC,gBAAgBf,MAAMmb,SAAW,OAC1C,MAOF,QACEjhB,KAAK4B,KAAKuR,GAAK,SACfnT,KAAKggB,IAAMhgB,KAAKigB,UAChBjgB,KAAKoC,uBACLiC,SAASwC,gBAAgBf,MAAMmb,SAAW,OAGhD,CAEA,cAxJQ,KAAA9S,QAAgC,IAAIzM,MACpC,KAAAwf,UAAkC,IAAIxf,MACtC,KAAAQ,OAAsB,IAAI2b,EAC1B,KAAAsD,KAAkB,IAAIzF,EAOtB,KAAA0F,GAAa,EACb,KAAAzC,GAAa,EAKb,KAAA0C,eAAsC,IAAIpV,EAC1C,KAAAqV,MAAoB,IAAIzV,EACxB,KAAA0V,WAA8B,IAAIlE,EAClC,KAAAmE,oBAAgD,IAAIjE,EACpD,KAAAkE,UAA4B,IAAItC,EAU9B,KAAA1d,QAAqC,IAAID,IAEzC,KAAAkgB,aAA2B,IAAIhgB,MAEjC,KAAAigB,SAAmB,EAEnB,KAAAC,QAAU,IAAInD,EAuEd,KAAAjM,WAA+C,SAC/C,KAAAoO,MAA+B,UAK/B,KAAAI,MAA0C,SAoN1C,KAAAa,gBAAuB,CAC7BC,kBAAmB,KACnBC,gBAAiB,KAEjBC,cAAe,MACfC,aAAc,SACdC,cAAe,SACfC,aAAc,MAEdC,gBAAiB,KACjBC,mBAAoB,KAEpBC,UAAW,aAEXC,eAAgB,GAChBC,aAAc,IACdC,WAAY,GACZC,mBAAoB,EACpBC,eAAgB,IA9LhB3iB,KAAKN,KAAO2E,SAASsP,KACrB3T,KAAK6P,OAASA,OAEd7P,KAAKsB,SAAW,IAAI6U,EACpBnW,KAAK4B,KAAO,IAAI4b,EAChBxd,KAAKsB,SAASgV,gBAAkB,IAChCtW,KAAKsB,SAASiV,gBAAkB,IAEhCvW,KAAKigB,UAAY,IAAIpK,EAAmBxR,SAAUrE,KAAKsB,SAAUtB,KAAK4B,MACtE5B,KAAKkgB,WAAa,IAAI1K,EAAoBnR,SAAUrE,KAAKsB,SAAUtB,KAAK4B,MACxE5B,KAAKmgB,WAAa,IAAIxK,EAAoBtR,SAAUrE,KAAKsB,SAAUtB,KAAK4B,MAExE5B,KAAKggB,IAAMhgB,KAAKigB,UAChBjgB,KAAKoV,gBAAkBvF,OACvB7P,KAAK4B,KAAKwU,GAAKpW,KAAK6P,OAEpB7P,KAAK4B,KAAKwR,GAAK,WACf/O,SAASwC,gBAAgBnC,UAAUC,IAAI,aAEvC3E,KAAK4iB,YAAc5iB,KAAK6iB,aAAalQ,KAAK3S,MAC1CA,KAAKwgB,aAAexgB,KAAKyU,cAAc9B,KAAK3S,MAC5CA,KAAKygB,aAAezgB,KAAK8iB,cAAcnQ,KAAK3S,MAC5CA,KAAK+iB,gBAAkB/iB,KAAKgjB,iBAAiBrQ,KAAK3S,MAClDA,KAAKmhB,KAAKtF,QAAU,KAClB7b,KAAKijB,eAAe,EAEtBjjB,KAAKogB,SACP,CAEO,kBAAO8C,GAIZ,OAHKnD,EAAW9F,IACd8F,EAAW9F,EAAI,IAAI8F,GAEdA,EAAW9F,CACpB,CAEO,GAAAkJ,CAAIC,EAAkC9hB,EAAgB,MAC3D,MAAMzB,EAAS,IAAIujB,EACjB,CACExhB,KAAM5B,KAAK4B,KACXC,KAAM7B,KAAKshB,MACXxf,UAAW9B,KAAKuhB,WAChBxf,mBAAoB/B,KAAKwhB,oBACzBxf,SAAUhC,KAAKyhB,UACfxf,cAAejC,KAAKqhB,eACpBnf,OAAQlC,KAAKkC,QAEfZ,GAGiB,GAAfzB,EAAOqB,MACTlB,KAAKmO,QAAQK,KAAK3O,GAED,GAAfA,EAAOqB,MACTlB,KAAKkhB,UAAU1S,KAAK3O,EAExB,CACO,KAAAiM,CAAMgQ,GACX9b,KAAK4B,KAAKwU,GAAGvR,iBAAiB,SAAU7E,KAAKwgB,cAC7CxgB,KAAK4B,KAAKwU,GAAGvR,iBAAiB,SAAU7E,KAAKygB,cAE7CzgB,KAAKN,KAAKmF,iBAAiB,QAAS7E,KAAK4iB,YAAa,CAAES,SAAS,IACjErjB,KAAKN,KAAKmF,iBAAiB,YAAa7E,KAAK+iB,iBAEtB,IAAIO,gBAAgBC,IACzC7hB,MAAMuB,KAAKjD,KAAKyB,QAAQ8c,UAAU5b,SAASL,IACzCtC,KAAKwjB,YAAYlhB,EAAOG,GAAIH,EAAO,GACnC,IAEWmhB,QAAQpf,SAASsP,MAEhC3T,KAAKmhB,KAAKrV,MAAMgQ,GAChBzX,SAASwC,gBAAgBnC,UAAUC,IAAI,WACvC3E,KAAKmO,QAAQxL,SAAS9C,IACpBA,EAAOyD,SAAS,IAElBtD,KAAKkhB,UAAUve,SAAS9C,IACtBA,EAAOyD,SAAS,IAGlBtD,KAAKqgB,cACLrgB,KAAK0jB,sBACP,CAEQ,oBAAAthB,GACNpC,KAAKmO,QAAQxL,SAAS9C,IACpBA,EAAOuC,sBAAsB,IAE/BpC,KAAKkhB,UAAUve,SAAS9C,IACtBA,EAAOuC,sBAAsB,GAEjC,CAEQ,WAAAie,GACNhc,SAASC,iBAAiB,YAAY3B,SAAS4B,IAC7CvE,KAAK8C,UAAUyB,EAAe,IAEhCF,SAASC,iBAAiB,sBAAsB3B,SAAS4B,IACvD,IAAIof,EAAkB3jB,KAAKuhB,WAAW/e,QAAQ+B,EAAS,oBACvD,GAAuB,MAAnBof,GAA2B3jB,KAAKyB,QAAQuc,IAAI2F,GAAkB,CAChE,IAAIC,EAAsB5jB,KAAKyB,QAAQjB,IAAImjB,GAChB,MAAvBC,GACFA,EAAoBpZ,SAASgE,KAAKjK,E,KAIxCvE,KAAKmO,QAAQxL,SAAS9C,IACpBA,EAAO2D,WACP3D,EAAO6D,SAAS1D,KAAK4B,MACrB/B,EAAO0D,SAASvD,KAAK4B,KAAK,GAE9B,CAEO,OAAAiiB,GACL7jB,KAAK6P,OAAO3F,oBAAoB,SAAUlK,KAAKwgB,cAC/CxgB,KAAKN,KAAKwK,oBAAoB,QAASlK,KAAKwgB,cAC5CxgB,KAAK6P,OAAO3F,oBAAoB,SAAUlK,KAAKygB,cAC/CzgB,KAAKN,KAAKwK,oBAAoB,YAAalK,KAAK+iB,iBAChD/iB,KAAKmhB,KAAKhF,OACVnc,KAAKmO,QAAQxL,SAAS9C,IACpBA,EAAOsC,YAAY,IAErBnC,KAAKkhB,UAAUve,SAAS9C,IACtBA,EAAOsC,YAAY,GAEvB,CAEO,EAAA4b,CAAG5d,EAA4E8J,EAAYlH,EAAa,IAC7G,OAAQ5C,GACN,IAAK,SACHH,KAAKkC,OAAO6b,GAAG,SAAU9T,GACzB,MACF,IAAK,WACHjK,KAAKkC,OAAO6b,GAAG,YAAYhb,IAAMkH,GACjC,MACF,IAAK,OACHjK,KAAKkC,OAAO6b,GAAG,OAAQ9T,GACvB,MACF,IAAK,eACHjK,KAAKkC,OAAO6b,GAAG,gBAAgBhb,IAAMkH,GACrC,MACF,IAAK,SACHjK,KAAKkC,OAAO6b,GAAG,UAAUhb,IAAMkH,GAC/B,MACF,IAAK,SACHjK,KAAKkC,OAAO6b,GAAG,SAAU9T,GAG/B,CACO,GAAAiU,CAAI/d,EAA4E8J,EAAYlH,EAAa,IAC9G,OAAQ5C,GACN,IAAK,SACHH,KAAKkC,OAAOgc,IAAI,SAAUjU,GAC1B,MACF,IAAK,WACHjK,KAAKkC,OAAOgc,IAAI,YAAYnb,IAAMkH,GAClC,MACF,IAAK,OACHjK,KAAKkC,OAAOgc,IAAI,OAAQjU,GACxB,MACF,IAAK,eACHjK,KAAKkC,OAAOgc,IAAI,gBAAgBnb,IAAMkH,GACtC,MACF,IAAK,SACHjK,KAAKkC,OAAOgc,IAAI,UAAUnb,IAAMkH,GAChC,MACF,IAAK,SACHjK,KAAKkC,OAAOgc,IAAI,SAAUjU,GAGhC,CAuBO,aAAA6Z,CAAcxiB,GACkB,MAAjCA,EAAS,uBACXtB,KAAK6hB,gBAAgBC,kBAAoBxgB,EAAS,sBAEZ,MAApCA,EAAS,0BACXtB,KAAK6hB,gBAAgBE,gBAAkBzgB,EAAS,yBAEZ,MAAlCA,EAAS,wBACXtB,KAAK6hB,gBAAgBC,kBAAoBxgB,EAAS,uBAEb,MAAnCA,EAAS,yBACXtB,KAAK6hB,gBAAgBE,gBAAkBzgB,EAAS,wBAGb,MAAjCA,EAAS,uBACXtB,KAAK6hB,gBAAgBO,gBAAkB9gB,EAAS,sBAEZ,MAAlCA,EAAS,wBACXtB,KAAK6hB,gBAAgBO,gBAAkB9gB,EAAS,uBAEV,MAApCA,EAAS,0BACXtB,KAAK6hB,gBAAgBQ,mBAAqB/gB,EAAS,yBAEd,MAAnCA,EAAS,yBACXtB,KAAK6hB,gBAAgBQ,mBAAqB/gB,EAAS,wBAGlB,MAA/BA,EAAS,qBACXtB,KAAK6hB,gBAAgBG,cAAgB1gB,EAAS,oBAEb,MAA/BA,EAAS,qBACXtB,KAAK6hB,gBAAgBK,cAAgB5gB,EAAS,oBAEd,MAA9BA,EAAS,oBACXtB,KAAK6hB,gBAAgBI,aAAe3gB,EAAS,mBAEb,MAA9BA,EAAS,oBACXtB,KAAK6hB,gBAAgBM,aAAe7gB,EAAS,mBAEjB,MAA1BA,EAAS,gBACXtB,KAAK6hB,gBAAgBS,UAAYhhB,EAAS,eAGT,MAA/BA,EAAS,qBACXtB,KAAK6hB,gBAAgBU,eAAiBjhB,EAAS,oBAEhB,MAA7BA,EAAS,mBACXtB,KAAK6hB,gBAAgBW,aAAelhB,EAAS,kBAEhB,MAA3BA,EAAS,iBACXtB,KAAK6hB,gBAAgBY,WAAanhB,EAAS,gBAGL,MAApCA,EAAS,0BACXtB,KAAK6hB,gBAAgBa,mBAAqBphB,EAAS,yBAElB,MAA/BA,EAAS,qBACXtB,KAAK6hB,gBAAgBc,eAAiBrhB,EAAS,mBAEnD,CAEU,WAAAkiB,CAAY/gB,EAAiBH,G,UAClB,QAAnB,EAAAA,EAAOuL,oBAAY,SAAEkW,aACE,QAAvB,EAAAzhB,EAAOwL,wBAAgB,SAAEiW,aACJ,QAArB,EAAAzhB,EAAOyL,sBAAc,SAAEgW,aAEvB,IAAIC,EAAIhkB,KAAKwhB,oBAAoBhf,QAAQC,GACrCwhB,EAAKD,EAAEhe,MAAQhG,KAAK4B,KAAK+b,KACzBuG,EAAKF,EAAE/d,OAASjG,KAAK4B,KAAKgc,KAE1BuG,EAAuBnkB,KAAKuhB,WAAW/e,QAAQC,EAAI,oBAAsBzC,KAAK6hB,gBAAgBG,cAC9FoC,EAAsBpkB,KAAKuhB,WAAW/e,QAAQC,EAAI,oBAAsBzC,KAAK6hB,gBAAgBK,cAC7FmC,EAAqBrkB,KAAKuhB,WAAW/e,QAAQC,EAAI,mBAAqBzC,KAAK6hB,gBAAgBI,aAC3FqC,EAAoBtkB,KAAKuhB,WAAW/e,QAAQC,EAAI,mBAAqBzC,KAAK6hB,gBAAgBM,aAE9F7f,EAAO+K,WAUA,EATLrN,KAAK4hB,QAAQlD,YACX1e,KAAKuhB,WAAW/e,QACdC,EACA,oBACAzC,KAAKuhB,WAAW/e,QAAQC,EAAI,qBAAsBzC,KAAK6hB,gBAAgBO,kBAEzE3f,EACgB,YAAhBzC,KAAK4B,KAAKwR,GAAmB8Q,EAAKD,EAClC,IAEJ3hB,EAAOgL,cAcA,EAbLtN,KAAK4hB,QAAQlD,YACX1e,KAAKuhB,WAAW/e,QACdC,EACA,gBACAzC,KAAKuhB,WAAW/e,QACdC,EACA,uBACAzC,KAAKuhB,WAAW/e,QAAQC,EAAI,sBAAuBzC,KAAK6hB,gBAAgBQ,sBAG5E5f,EACgB,YAAhBzC,KAAK4B,KAAKwR,GAAmB8Q,EAAKD,EAClC,IAIJ3hB,EAAOgI,YAAoE,MAAtDtK,KAAKuhB,WAAW/e,QAAQC,EAAI,uBACjDH,EAAO4L,IAAmD,MAA7ClO,KAAKuhB,WAAW/e,QAAQC,EAAI,cAEzC,IAAI8hB,EAAcvkB,KAAKuhB,WAAW/e,QAAQC,EAAI,wBAE3B,MAAf8hB,IACFjiB,EAAO0H,aAAe3F,SAASiE,cAAc,2BAA2Bic,QAG1EjiB,EAAOS,GAAK/C,KAAKuhB,WAAW/e,QAAQC,EAAI,YAAa,UAAUzC,KAAK2hB,YACpErf,EAAOnC,IAAMH,KAAKuhB,WAAW/e,QAAQC,EAAI,aAAczC,KAAK6hB,gBAAgBS,WAE5EhgB,EAAOsI,SAAW5K,KAAKuhB,WAAW/e,QAAQC,EAAI,kBAAmBzC,KAAK6hB,gBAAgBU,gBACtFjgB,EAAOuI,OAAS7K,KAAKuhB,WAAW/e,QAAQC,EAAI,gBAAiBzC,KAAK6hB,gBAAgBW,cAClFlgB,EAAOT,KAAO7B,KAAKuhB,WAAW/e,QAAQC,EAAI,cAAezC,KAAK6hB,gBAAgBY,YAE9E,IAAI/N,EAAmB1U,KAAKuhB,WAAW/e,QAAQC,EAAI,uBAAwBzC,KAAK6hB,gBAAgBa,oBAChGpgB,EAAOqL,sBAA+B,GAAM+G,EAAZ,GAChCpS,EAAOsL,oBAAsB,GAAM,IAAO,EAAI8G,GAE9CjS,EAAG2E,aAAa,YAAa9E,EAAOS,IAChB,YAAhB/C,KAAK4B,KAAKwR,GACZ9Q,EAAOoI,KAAOwZ,EAEd5hB,EAAOoI,KAAOuZ,EAGhB3hB,EAAOyK,OAAS/M,KAAK4hB,QAAQlD,YAC3B1e,KAAKuhB,WAAW/e,QACdC,EACA,oBACAzC,KAAKuhB,WAAW/e,QAAQC,EAAI,qBAAsBzC,KAAK6hB,gBAAgBC,oBAEzErf,EACAzC,KAAK4B,KAAKyP,GACV,IAEF/O,EAAO0K,KAAOhN,KAAK4hB,QAAQlD,YACzB1e,KAAKuhB,WAAW/e,QACdC,EACA,uBACAzC,KAAKuhB,WAAW/e,QAAQC,EAAI,sBAAuBzC,KAAK6hB,gBAAgBE,kBAE1Etf,EACAzC,KAAK4B,KAAKyP,GACV,IAGF,IAAImT,EAAgBxkB,KAAK4hB,QAAQlD,YAC/B1e,KAAKuhB,WAAW/e,QACdC,EACA,oBACAzC,KAAKuhB,WAAW/e,QAAQC,EAAI,qBAAsBzC,KAAK6hB,gBAAgBC,oBAEzErf,EACAzC,KAAK4B,KAAKyP,GACV,IAEEoT,EAAczkB,KAAK4hB,QAAQlD,YAC7B1e,KAAKuhB,WAAW/e,QACdC,EACA,uBACAzC,KAAKuhB,WAAW/e,QAAQC,EAAI,sBAAuBzC,KAAK6hB,gBAAgBE,kBAE1Etf,EACAzC,KAAK4B,KAAKyP,GACV,IAGE9O,EAAmBvC,KAAKuhB,WAAW/e,QAAQF,EAAOG,GAAI,SAAU,IAAIC,MAAM,KAC9EJ,EAAO8K,OAAS,EACZ7K,EAAiB4V,SAAS,cAC5BqM,EAAgB,EAChBC,EAAc,EACdniB,EAAOyK,OAAS,EAChBzK,EAAO0K,KAAO,EACd1K,EAAO8K,OAASpN,KAAKuhB,WAAW/e,QAAQC,EAAI,kBAAmBzC,KAAK6hB,gBAAgBc,gBACpFrgB,EAAOyK,QAAUzK,EAAO8K,OAASpN,KAAK4B,KAAKyP,GAC3C/O,EAAO0K,MAAQ1K,EAAO8K,OAASpN,KAAK4B,KAAKyP,IAG3C/O,EAAO0L,OAAyD,MAAhDhO,KAAKuhB,WAAW/e,QAAQC,EAAI,iBAC5CH,EAAOiL,OAAS4W,EAChB7hB,EAAOkL,QAAU4W,EACjB9hB,EAAOmL,OAAS4W,EAChB/hB,EAAOoL,QAAU4W,EAEjBhiB,EAAOqH,UAAYsa,EAAK,EACxB3hB,EAAOsH,WAAasa,EAAK,EAEzB,IAAIxV,EAAa1O,KAAK4B,KAAKyP,GAC3B,GAAoB,YAAhBrR,KAAK4B,KAAKwR,GAAkB,CAC9B,IAAInG,EAAWjN,KAAKyhB,UAAUjf,QAAQC,EAAIzC,KAAK4B,KAAKwU,IAAI7M,IAAMvJ,KAAK4B,KAAKgc,KACxEtb,EAAOwJ,MAAQmB,EACf3K,EAAOyJ,IAAMkB,EAAWiX,C,KACnB,CACL,IAAIjX,EAAWjN,KAAKyhB,UAAUjf,QAAQC,EAAIzC,KAAK4B,KAAKwU,IAAI/M,KAAOrJ,KAAK4B,KAAK+b,KACzErb,EAAOwJ,MAAQmB,EACf3K,EAAOyJ,IAAMkB,EAAWgX,C,CAE1B3hB,EAAOmM,mBAAmBC,GAE1B,IA+CIgW,EACAC,EAhDAC,EAAe5kB,KAAK0hB,aAAatD,QAAQyG,GACpCA,EAAiB9hB,IAAMT,EAAOS,KAEvC/C,KAAK0hB,aAAe1hB,KAAK0hB,aAAatD,QAAQyG,GACrCA,EAAiB9hB,IAAMT,EAAOS,KAGvC6hB,EAAajiB,SAASmiB,IACpBxiB,EAAOkI,SAASgE,KAAKsW,EAAYvgB,QAAQ,IAyCvB,YAAhBvE,KAAK4B,KAAKwR,IACZsR,EAAkB,CAChBhlB,KAAM,KACNqlB,WAAY,GAAGP,EAAgBxkB,KAAK4B,KAAKyP,YAAYoT,EAAczkB,KAAK4B,KAAKyP,WAC7E2T,UAAW,MAEbL,EAAgB,CACdjlB,KAAM,KACNqlB,WAAY,GAAGP,EAAgBliB,EAAO+K,mBAAmBoX,EAAcniB,EAAOgL,qBAC9E0X,UAAW,QAGbN,EAAkB,CAChBhlB,KAAM,KACNqlB,WAAY,OAAOP,EAAgBxkB,KAAK4B,KAAKyP,YAAYoT,EAAczkB,KAAK4B,KAAKyP,OACjF2T,UAAW,MAEbL,EAAgB,CACdjlB,KAAM,KACNqlB,WAAY,OAAOP,EAAgBliB,EAAO+K,mBAAmBoX,EAAcniB,EAAOgL,iBAClF0X,UAAW,OAIf,IAMIC,EAAa,IAAIC,sBApEGC,IACtBA,EAAGxiB,SAASiB,IACNA,EAAEwhB,eACiB,GAAjB9iB,EAAO2L,SACTjO,KAAKkC,OAAO4G,KAAK,mBAAmBxG,EAAOS,MAAM,GACjDT,EAAO8L,SAGY,GAAjB9L,EAAO2L,SACTjO,KAAKkC,OAAO4G,KAAK,mBAAmBxG,EAAOS,MAAM,GACjDT,EAAO+L,Q,GAGX,GAuDwDqW,GACxDW,EAAiB,IAAIH,sBA3CGC,IAC1BA,EAAGxiB,SAASiB,IACNA,EAAEwhB,eACJplB,KAAKkC,OAAO4G,KAAK,gBAAgBxG,EAAOS,MAAM,GAE9C/C,KAAKkC,OAAO4G,KAAK,gBAAgBxG,EAAOS,MAAM,E,GAEhD,GA6BsB,CACxBrD,KAAM,KACNqlB,WAAY,kBACZC,UAAW,OAKTM,EAAW,IAAIJ,sBAvDGC,IACpBA,EAAGxiB,SAASiB,IACNA,EAAEwhB,gBACJplB,KAAKkC,OAAO4G,KAAK,UAAUxG,EAAOS,MAAM,GACxCT,EAAOgM,SAEPtO,KAAKkC,OAAO4G,KAAK,UAAUxG,EAAOS,MAAM,GACxCT,EAAOiM,O,GAET,GA8CoDoW,GACxDM,EAAWxB,QAAQhhB,GACnB4iB,EAAe5B,QAAQhhB,GACvB6iB,EAAS7B,QAAQhhB,GAEjBH,EAAOuL,aAAewX,EACtB/iB,EAAOwL,iBAAmBmX,EAC1B3iB,EAAOyL,eAAiBuX,CAC1B,CAEA,SAAAxiB,CAAUL,GACR,IACIH,EADAijB,EAASvlB,KAAKuhB,WAAW/e,QAAQC,EAAI,iBAGvCH,EADY,MAAVijB,EACO,IAAIzY,EAAarK,GAEtBzC,KAAKyB,QAAQuc,IAAIhe,KAAKuhB,WAAW/e,QAAQC,EAAI,cACtCzC,KAAKyB,QAAQjB,IAAIR,KAAKuhB,WAAW/e,QAAQC,EAAI,cAE7C,IAAIqK,EAAarK,GAG9BA,EAAG2E,aAAa,gBAAiB,IACjCpH,KAAKwjB,YAAY/gB,EAAIH,GACrBtC,KAAKmO,QAAQxL,SAAS9C,IAChBA,EAAOwC,WAAWC,IACpBzC,EAAO+C,QAAQN,E,IAGnBtC,KAAKyB,QAAQuB,IAAIV,EAAOS,GAAIT,GAC5BtC,KAAK2hB,UACP,CAEO,YAAAve,CAAaL,GAClB,IAAIyiB,EAAgBxlB,KAAKyB,QAAQjB,IAAIuC,GACF,OAA/ByiB,aAAa,EAAbA,EAAe3X,gBACjB2X,SAAAA,EAAe3X,aAAakW,cAES,OAAnCyB,aAAa,EAAbA,EAAe1X,oBACjB0X,SAAAA,EAAe1X,iBAAiBiW,cAEG,OAAjCyB,aAAa,EAAbA,EAAezX,kBACjByX,SAAAA,EAAezX,eAAegW,cAEhC/jB,KAAKyB,QAAQ4B,OAAON,GACpByiB,SAAAA,EAAe/iB,GAAGgjB,gBAAgB,iBAClCD,SAAAA,EAAenX,QACfmX,OAAgBzW,CAClB,CAEQ,gBAAAiU,CAAiBpf,GACvB5D,KAAKqhB,eAAe1d,YAAYC,GAChC5D,KAAKmO,QAAQxL,SAAS9C,IACpBA,EAAO8D,YAAYC,EAAE,IAEvB5D,KAAKkhB,UAAUve,SAAS9C,IACtBA,EAAO8D,YAAYC,EAAE,GAEzB,CACQ,YAAAif,CAAajf,GACnB5D,KAAKggB,IAAInc,QAAQD,GACjB5D,KAAKmO,QAAQxL,SAAS9C,IACpBA,EAAOgE,QAAQD,EAAE,IAEnB5D,KAAKkhB,UAAUve,SAAS9C,IACtBA,EAAOgE,QAAQD,EAAE,GAErB,CACQ,aAAA6Q,CAAc7Q,GACpB5D,KAAKggB,IAAItc,SAASE,GAClB5D,KAAKmO,QAAQxL,SAAS9C,IACpBA,EAAO6D,SAAS1D,KAAK4B,KAAK,IAE5B5B,KAAKkhB,UAAUve,SAAS9C,IACtBA,EAAO6D,SAAS1D,KAAK4B,KAAK,IAE5B5B,KAAKkC,OAAO4G,KAAK,OAAQ9I,KAAK4B,KAAKqS,GACnCjU,KAAKkC,OAAO4G,KAAK,SAAU9I,KAAK4B,KAAK8P,EACvC,CACQ,aAAAuR,GACNjjB,KAAKqhB,eAAe9d,WACpBvD,KAAKggB,IAAIzc,WACTvD,KAAKmO,QAAQxL,SAAS9C,IACpBA,EAAO0D,SAASvD,KAAK4B,KAAK,IAE5B5B,KAAKkhB,UAAUve,SAAS9C,IACtBA,EAAO0D,SAASvD,KAAK4B,KAAK,GAE9B,CACQ,aAAAkhB,GACN,IAAI4C,EAAQ,EACRC,EAAQ,EACZ,IACE,IAAI1c,EAAOjJ,KAAKggB,IAAI5K,gBAAgBlM,wBACpCwc,EAAQzc,EAAKjD,MACb2f,EAAQ1c,EAAKhD,M,CACb,MAAOqZ,GACPoG,EAAQ1lB,KAAKggB,IAAI5K,gBAAgBT,WACjCgR,EAAQ3lB,KAAKggB,IAAI5K,gBAAgBwQ,W,CAEf,YAAhB5lB,KAAK4B,KAAKwR,IACZpT,KAAK4B,KAAK+K,GAAK3M,KAAK4B,KAAKuP,IAAMwU,EAC/B3lB,KAAK4B,KAAKyP,GAAKsU,IAEf3lB,KAAK4B,KAAK+K,GAAK3M,KAAK4B,KAAKuQ,IAAMuT,EAC/B1lB,KAAK4B,KAAKyP,GAAKqU,IAEb1lB,KAAKohB,IAAMsE,GAAS1lB,KAAK6P,OAAO8E,WAAa,QAC/C3U,KAAKogB,UACLpgB,KAAKmO,QAAQxL,SAAS9C,IACpBA,EAAO2D,UAAU,IAEnBxD,KAAKkhB,UAAUve,SAAS9C,IACtBA,EAAO2D,UAAU,KAGrBxD,KAAKohB,GAAKsE,EACV1lB,KAAK2e,GAAKgH,CACZ,CACQ,oBAAAjC,GACW,IAAImC,kBAAkBC,IACrCA,EAAUnjB,SAASojB,IACK,cAAlBA,EAAS7kB,OACP6kB,EAASC,WAAW1N,OAAS,GAC/ByN,EAASC,WAAWrjB,SAASsjB,IACvBA,EAAUC,WAAaC,KAAKC,cAC7BH,EAAsB3hB,iBAAiB,iCAAiC3B,SAAS4B,IAChFvE,KAAK8C,UAAUyB,GACf,IAAIof,EAAkB3jB,KAAKuhB,WAAW/e,QAAQ+B,EAAS,oBACvD,GAAuB,MAAnBof,EACF,GAAI3jB,KAAKyB,QAAQuc,IAAI2F,GAAkB,CACrC,IAAIC,EAAsB5jB,KAAKyB,QAAQjB,IAAImjB,GAChB,MAAvBC,GACFA,EAAoBpZ,SAASgE,KAAKjK,E,MAGpCvE,KAAK0hB,aAAalT,KAAK,CACrBzL,GAAI4gB,EACJpf,W,OAQVwhB,EAASM,aAAa/N,OAAS,GACjCyN,EAASM,aAAa1jB,SAAS2jB,IACzBA,EAAYJ,WAAaC,KAAKC,cAC/BE,EAAwBhiB,iBAAiB,YAAY3B,SAAS4B,IAC7D,IAAIgiB,EAAWhiB,EAAQE,aAAa,aAChCkf,EAAkB3jB,KAAKuhB,WAAW/e,QAAQ+B,EAAS,oBAChC,MAAnBof,IACF3jB,KAAK0hB,aAAe1hB,KAAK0hB,aAAatD,QAAQyG,GACrCA,EAAiB9hB,IAAM4gB,KAGlB,MAAZ4C,GACFvmB,KAAKoD,aAAamjB,E,QAMxBR,EAASC,WAAW1N,OAAS,GAAKyN,EAASM,aAAa/N,OAAS,IACnEtY,KAAKmO,QAAQxL,SAAS9C,IACpBA,EAAO4D,WAAW,I,GAIxB,IAOKggB,QAAQpf,SAASsP,KALX,CACb6S,YAAY,EACZC,WAAW,EACXC,SAAS,GAGb,CACQ,OAAAtG,GAWN,IACE,IAAIuG,GAXkBlkB,EAWuBzC,KAAK4B,KAAKwU,GAVvCvG,OAAOkJ,iBAAiBtW,GAAI6R,UAEzC5R,MAAM,WACNqc,MAAM,GAAI,GACV7b,KAAI,SAAU+Q,GACb,OAAOiL,WAAWjL,EACpB,KAKFjU,KAAK4B,KAAK+b,KAAOgJ,EAAmB,GACpC3mB,KAAK4B,KAAKgc,KAAO+I,EAAmB,E,CACpC,MAAOrH,GACPtf,KAAK4B,KAAK+b,KAAO,EACjB3d,KAAK4B,KAAKgc,KAAO,C,CAhBnB,IAAwBnb,EAmBxB,IACE,IAAIwG,EAAOjJ,KAAK4B,KAAKwU,GAAGlN,wBACxBlJ,KAAKohB,GAAKnY,EAAKjD,MAAQhG,KAAK4B,KAAK+b,KACjC3d,KAAK2e,GAAK1V,EAAKhD,OAASjG,KAAK4B,KAAKgc,I,CAClC,MAAO0B,GACPtf,KAAKohB,GAAKphB,KAAK4B,KAAKwU,GAAGzB,WACvB3U,KAAK2e,GAAK3e,KAAK4B,KAAKwU,GAAGwP,W,CAGrB5lB,KAAKohB,GAAK,MAAQxB,IACpB5f,KAAKwS,WAAaxS,KAAK4gB,MAEvB5gB,KAAKwS,WAAaxS,KAAKghB,MAGzB,IAAI4F,EAAIviB,SAASsP,KACf0K,EAAIha,SAASwC,gBAEf7G,KAAK4B,KAAKuQ,IAAMnS,KAAK4B,KAAKwU,GAAGyQ,YAC7B7mB,KAAK4B,KAAKuP,IAAMnR,KAAK4B,KAAKwU,GAAG0Q,aACR/X,MAAjB/O,KAAK4B,KAAKuQ,MACZnS,KAAK4B,KAAKuQ,IAAM9G,KAAK2D,IAAI4X,EAAEC,YAAaD,EAAElN,YAAa2E,EAAE0I,YAAa1I,EAAEwI,YAAaxI,EAAE3E,cAEpE3K,MAAjB/O,KAAK4B,KAAKuP,MACZnR,KAAK4B,KAAKuP,IAAM9F,KAAK2D,IAAI4X,EAAEE,aAAcF,EAAE5H,aAAcX,EAAE2I,aAAc3I,EAAEyI,aAAczI,EAAEW,eAGzE,YAAhBhf,KAAK4B,KAAKwR,IACZpT,KAAK4B,KAAK+K,GAAK3M,KAAK4B,KAAKuP,IAAMnR,KAAK2e,GACpC3e,KAAK4B,KAAKyP,GAAKrR,KAAK2e,KAEpB3e,KAAK4B,KAAK+K,GAAK3M,KAAK4B,KAAKuQ,IAAMnS,KAAKohB,GACpCphB,KAAK4B,KAAKyP,GAAKrR,KAAKohB,IAGtBphB,KAAK4B,KAAK8b,MAAuB,GAAhB1d,KAAK4B,KAAKyP,GAE3BrR,KAAK6gB,kBACP,E","sources":["webpack://StringTune/webpack/universalModuleDefinition","webpack://StringTune/webpack/bootstrap","webpack://StringTune/webpack/runtime/define property getters","webpack://StringTune/webpack/runtime/hasOwnProperty shorthand","webpack://StringTune/webpack/runtime/make namespace object","webpack://StringTune/./src/StringModule.ts","webpack://StringTune/./src/Loading/Modules/StringLazy.ts","webpack://StringTune/./src/Loading/Modules/StringLoading.ts","webpack://StringTune/./src/Loading/Modules/StringVideoAutoplay.ts","webpack://StringTune/./src/Mouse/Modules/StringCursor.ts","webpack://StringTune/./src/Mouse/Modules/StringMagnetic.ts","webpack://StringTune/./src/Utils/StringLerp.ts","webpack://StringTune/./src/Mouse/StringVirtualCursor.ts","webpack://StringTune/./src/Objects/StringObject.ts","webpack://StringTune/./src/Screen/StringResponsive.ts","webpack://StringTune/./src/Scroll/Modules/Scrollbar/StringScrollbarHorizontal.ts","webpack://StringTune/./src/Scroll/Modules/Scrollbar/StringScrollbarVertical.ts","webpack://StringTune/./src/Scroll/Modules/Scrollbar/StringScrollbar.ts","webpack://StringTune/./src/Scroll/Modules/StringDisplacement.ts","webpack://StringTune/./src/Scroll/Modules/StringParallax.ts","webpack://StringTune/./src/Scroll/Modules/StringProgress.ts","webpack://StringTune/./src/Scroll/Types/StringScroll.ts","webpack://StringTune/./src/Scroll/Types/StringScrollDefault.ts","webpack://StringTune/./src/Scroll/Types/StringScrollDisable.ts","webpack://StringTune/./src/Scroll/Types/StringScrollSmooth.ts","webpack://StringTune/./src/Scroll/Types/StringTypeSettings.ts","webpack://StringTune/./src/Split/Modules/StringSplit.ts","webpack://StringTune/./src/StringFPS.ts","webpack://StringTune/./src/Tracker/StringFPSTracker.ts","webpack://StringTune/./src/Tracker/StringPositionTracker.ts","webpack://StringTune/./src/Utils/StringAttribute.ts","webpack://StringTune/./src/Utils/StringBoundingClientRect.ts","webpack://StringTune/./src/Utils/StringData.ts","webpack://StringTune/./src/Utils/StringEvent.ts","webpack://StringTune/./src/Utils/StringParser.ts","webpack://StringTune/./src/Utils/StringPosition.ts","webpack://StringTune/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"StringTune\"] = factory();\n\telse\n\t\troot[\"StringTune\"] = factory();\n})(this, () => {\nreturn ","// 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))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { IStringModule } from './IStringModule';\r\nimport { StringVirtualCursor } from './Mouse/StringVirtualCursor';\r\nimport { StringObject } from './Objects/StringObject';\r\nimport { StringAttribute } from './Utils/StringAttribute';\r\nimport { StringBoundingClientRect } from './Utils/StringBoundingClientRect';\r\nimport { StringData } from './Utils/StringData';\r\nimport { StringEvent } from './Utils/StringEvent';\r\nimport { StringLerp } from './Utils/StringLerp';\r\nimport { StringPosition } from './Utils/StringPosition';\r\n\r\nexport class StringModule implements IStringModule {\r\n lerp: StringLerp;\r\n attribute: StringAttribute;\r\n boundingClientRect: StringBoundingClientRect;\r\n position: StringPosition;\r\n events: StringEvent;\r\n data: StringData;\r\n virtualCursor: StringVirtualCursor;\r\n settings: any = null;\r\n protected objectsMap: Map<string, StringObject> = new Map<string, StringObject>();\r\n protected objects: Array<StringObject> = new Array<StringObject>();\r\n protected htmlKey: string = '';\r\n protected _type: number = 1;\r\n public get type() {\r\n return this._type;\r\n }\r\n constructor(visitor: any, settings: any = null) {\r\n this.data = visitor.data;\r\n this.lerp = visitor.lerp;\r\n this.attribute = visitor.attribute;\r\n this.boundingClientRect = visitor.boundingClientRect;\r\n this.position = visitor.position;\r\n this.virtualCursor = visitor.virtualCursor;\r\n this.events = visitor.events;\r\n this.settings = settings;\r\n }\r\n destructor() { }\r\n \r\n onChangeScrollParams(): void {}\r\n\r\n tryConnect(object: StringObject): boolean {\r\n let stringModuleKeys = this.attribute.process(object.el, 'string', '').split('|');\r\n\r\n let value = false;\r\n stringModuleKeys.forEach((key: string) => {\r\n if (key == this.htmlKey) {\r\n value = true;\r\n }\r\n });\r\n return value;\r\n }\r\n connect(object: StringObject) {\r\n object.connect(this);\r\n this.onConnect(object);\r\n }\r\n addObject(id: string, object: StringObject) {\r\n this.objectsMap.set(id, object);\r\n this.objects = Array.from(this.objectsMap).map(([name, value]) => value);\r\n }\r\n removeObject(id: string) {\r\n this.objectsMap.delete(id);\r\n this.objects = Array.from(this.objectsMap).map(([name, value]) => value);\r\n }\r\n\r\n onStart(): void {}\r\n onUpdate(data: StringData): void {}\r\n onResize(): void {}\r\n onConnect(object: StringObject): void {}\r\n onRebuild(): void {}\r\n onScroll(data: StringData): void {}\r\n onMouseMove(e: MouseEvent): void {}\r\n onWheel(e: WheelEvent): void {}\r\n onChangeDevice(): void {}\r\n onChangeScrollDirection(): void {}\r\n onMutationObserver(added: NodeList, removed: NodeList): void {}\r\n}\r\n","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\n\r\nexport class StringLazy extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'lazy';\r\n }\r\n\r\n onStart(): void {\r\n const imagesEls = document.querySelectorAll('img[string-lazy]');\r\n imagesEls.forEach((element: any) => {\r\n this.getImageSize(element, element.getAttribute('string-lazy'));\r\n element.classList.add(`lazyLoad`);\r\n element.src = element.getAttribute('string-lazy') as any;\r\n element.addEventListener('load', () => {\r\n element.classList.add(`-loaded`);\r\n });\r\n });\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n const element = object.el as HTMLVideoElement;\r\n }\r\n\r\n private getImageSize(element: HTMLElement, url: string) {\r\n return new Promise((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, true);\r\n xhr.responseType = 'arraybuffer';\r\n xhr.onload = () => {\r\n if (xhr.status === 206 || xhr.status === 200) {\r\n const buffer = xhr.response;\r\n const blob = new Blob([buffer]);\r\n const img = new Image();\r\n img.onload = () => {\r\n element.style.aspectRatio = `${img.width} / ${img.height}`;\r\n resolve({ width: img.width, height: img.height });\r\n URL.revokeObjectURL(img.src);\r\n };\r\n img.onerror = () => {\r\n reject(new Error('Failed to load image'));\r\n };\r\n img.src = URL.createObjectURL(blob);\r\n } else {\r\n reject(new Error('Failed to load image'));\r\n }\r\n };\r\n xhr.onerror = () => {\r\n reject(new Error('Network error'));\r\n };\r\n xhr.setRequestHeader('Range', 'bytes=0-');\r\n xhr.send();\r\n });\r\n }\r\n}\r\n","import { StringModule } from \"../../StringModule\";\r\nimport { StringData } from \"../../Utils/StringData\";\r\n\r\n\r\nexport class StringLoading extends StringModule{\r\n loadingTimeout: number = 0\r\n\r\n constructor(visitor: any, settings: any = null) {\r\n super(visitor)\r\n this._type = 2\r\n\r\n if (settings != null) {\r\n if (settings.timeout != null) {\r\n this.loadingTimeout = settings.timeout\r\n }\r\n }\r\n }\r\n onStart(): void {\r\n setTimeout(() => {\r\n const htmlElement = document.documentElement;\r\n htmlElement.classList.add('-loaded');\r\n }, this.loadingTimeout);\r\n \r\n }\r\n}","import { StringObject } from \"../../Objects/StringObject\";\r\nimport { StringModule } from \"../../StringModule\";\r\n\r\nexport class StringVideoAutoplay extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = \"autoplay\";\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n const videoElement = object.el as HTMLVideoElement;\r\n const videoSrc = this.attribute.process(videoElement, \"string-src\", \"\");\r\n const started = this.attribute.process(videoElement, \"string-started\", null) == null ? false : true;\r\n if (videoElement.tagName.toLowerCase() === \"video\" && videoSrc && started == false) {\r\n videoElement.setAttribute(\"muted\", \"muted\");\r\n videoElement.setAttribute(\"playsinline\", \"\");\r\n videoElement.setAttribute(\"loop\", \"\");\r\n videoElement.setAttribute(\"autoplay\", \"\");\r\n videoElement.src = videoSrc;\r\n videoElement.muted = true;\r\n videoElement.addEventListener(\"canplaythrough\", () => {\r\n const started = this.attribute.process(videoElement, \"string-started\", null) == null ? false : true;\r\n if (started == false) {\r\n this.tryPlay(object, videoElement); \r\n }\r\n }, { once: true });\r\n videoElement.load();\r\n } else {\r\n console.warn(\r\n \"StringVideoAutoplay: Element is not a <video> tag or string-src is missing.\",\r\n object.el\r\n );\r\n }\r\n }\r\n\r\n private tryPlay(object: StringObject, element: HTMLVideoElement) {\r\n element.play().catch((err) => {\r\n console.warn(\"Autoplay failed:\", err);\r\n object.started = false;\r\n }).then(() => {\r\n object.started = true;\r\n element.setAttribute(`string-started`, '')\r\n });\r\n }\r\n}","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringCursor extends StringModule {\r\n private lerpFactor: number = 0.2;\r\n private oldX = 0;\r\n private oldY = 0;\r\n protected enterObjectsMap: Map<string, StringObject> = new Map<string, StringObject>();\r\n protected enterObjects: Array<StringObject> = new Array<StringObject>();\r\n cursor: any;\r\n\r\n constructor(visitor: any, settings: any = null) {\r\n super(visitor);\r\n this.htmlKey = 'cursor';\r\n this.cursor = document.querySelector('[string-cursor]') as HTMLElement;\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n if (this.virtualCursor.smoothX != this.oldX || this.virtualCursor.smoothY != this.oldY) {\r\n let cursorData = {\r\n lerpX: this.virtualCursor.lerpX,\r\n lerpY: this.virtualCursor.lerpY,\r\n x: this.virtualCursor.x,\r\n y: this.virtualCursor.y,\r\n };\r\n this.events.emit('cursor', cursorData);\r\n\r\n this.cursor.style.setProperty('--x', this.virtualCursor.smoothX);\r\n this.cursor.style.setProperty('--y', this.virtualCursor.smoothY);\r\n\r\n this.oldX = this.virtualCursor.smoothX;\r\n this.oldY = this.virtualCursor.smoothY;\r\n }\r\n\r\n this.objects.forEach((object) => {\r\n if (object.isMouseMove) {\r\n let rect = object.el.getBoundingClientRect();\r\n const offsetX = this.calculateOffset('center', this.virtualCursor.x - rect.left, rect.width);\r\n const offsetY = this.calculateOffset('center', this.virtualCursor.y - rect.top, rect.height);\r\n object.mouseX += this.lerp.process(object.mouseX, offsetX, object.lerp);\r\n object.mouseY += this.lerp.process(object.mouseY, offsetY, object.lerp);\r\n this.setMouseCoordinates(object, object.mouseX, object.mouseY);\r\n } else {\r\n if (object.mouseX != 0 || object.mouseY != 0) {\r\n let rect = object.el.getBoundingClientRect();\r\n const offsetX = this.calculateOffset('center', object.halfWidth, rect.width);\r\n const offsetY = this.calculateOffset('center', object.halfHeight, rect.height);\r\n object.mouseX += this.lerp.process(object.mouseX, offsetX, object.lerp);\r\n object.mouseY += this.lerp.process(object.mouseY, offsetY, object.lerp);\r\n this.setMouseCoordinates(object, object.mouseX, object.mouseY);\r\n }\r\n }\r\n });\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n let element = object.el;\r\n\r\n if (this.settings != null) {\r\n if (this.settings['string-lerp'] != null) {\r\n object.lerp = this.settings['string-lerp'];\r\n }\r\n }\r\n\r\n let onMouseEnterEventBind = () => {\r\n element.addEventListener('mousemove', onMouseMoveEventBind);\r\n element.addEventListener('mouseleave', onMouseLeaveEventBind);\r\n object.isMouseMove = true;\r\n if (object.cursorTarget != null) {\r\n object.cursorTarget.classList.add('-show');\r\n }\r\n };\r\n let onMouseMoveEventBind = (event: MouseEvent) => {};\r\n let onMouseLeaveEventBind = () => {\r\n element.removeEventListener('mousemove', onMouseMoveEventBind);\r\n element.removeEventListener('mouseleave', onMouseLeaveEventBind);\r\n object.isMouseMove = false;\r\n if (object.cursorTarget != null) {\r\n object.cursorTarget.classList.remove('-show');\r\n }\r\n };\r\n\r\n object.onEnter = () => {\r\n element.addEventListener('mouseenter', onMouseEnterEventBind);\r\n };\r\n object.onLeave = () => {\r\n element.removeEventListener('mouseenter', onMouseEnterEventBind);\r\n element.removeEventListener('mousemove', onMouseMoveEventBind);\r\n element.removeEventListener('mouseleave', onMouseLeaveEventBind);\r\n };\r\n }\r\n\r\n private setMouseCoordinates(object: StringObject, x: number, y: number) {\r\n if (object.selfDisable == false) {\r\n object.el.style.setProperty('--mouse-x', x.toFixed(2));\r\n object.el.style.setProperty('--mouse-y', y.toFixed(2));\r\n }\r\n object.connects.forEach((element) => {\r\n element.style.setProperty('--mouse-x', x.toFixed(2));\r\n element.style.setProperty('--mouse-y', y.toFixed(2));\r\n });\r\n }\r\n\r\n private calculateOffset(position: string, mousePos: number, size: number): number {\r\n switch (position) {\r\n case 'start':\r\n return mousePos / size;\r\n case 'end':\r\n return (mousePos - size) / size;\r\n case 'center':\r\n default:\r\n return (mousePos - size / 2) / (size / 2);\r\n }\r\n }\r\n}\r\n","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringMagnetic extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'magnetic';\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n const element = object.el as HTMLElement;\r\n\r\n if (this.settings != null) {\r\n if (this.settings['string-strength'] != null) {\r\n object.strength = this.settings['string-strength'];\r\n }\r\n if (this.settings['string-radius'] != null) {\r\n object.radius = this.settings['string-radius'];\r\n }\r\n if (this.settings['string-lerp'] != null) {\r\n object.lerp = this.settings['string-lerp'];\r\n }\r\n }\r\n }\r\n\r\n onMouseMove(e: MouseEvent): void {\r\n this.objects.forEach((object) => {\r\n const element = object.el as HTMLElement;\r\n const rect = element.getBoundingClientRect();\r\n const elementCenterX = rect.left + object.halfWidth;\r\n const elementCenterY = rect.top + object.halfHeight;\r\n const distX = e.clientX - elementCenterX;\r\n const distY = e.clientY - elementCenterY;\r\n const distance = Math.sqrt(distX ** 2 + distY ** 2);\r\n\r\n if (distance < object.radius) {\r\n object.magneticTargetX = distX * object.strength * ((object.radius - distance) / object.radius);\r\n object.magneticTargetY = distY * object.strength * ((object.radius - distance) / object.radius);\r\n object.isMagneting = true;\r\n } else {\r\n object.magneticTargetX = 0;\r\n object.magneticTargetY = 0;\r\n }\r\n });\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.objects.forEach((object) => {\r\n if (object.isMagneting) {\r\n let lerpX = this.lerp.process(object.magneticX, object.magneticTargetX, object.lerp);\r\n let lerpY = this.lerp.process(object.magneticY, object.magneticTargetY, object.lerp);\r\n if (lerpX > -0.01 && lerpX < 0.01) {\r\n lerpX = 0;\r\n object.magneticX = object.magneticTargetX;\r\n }\r\n if (lerpY > -0.01 && lerpY < 0.01) {\r\n lerpY = 0;\r\n object.magneticY = object.magneticTargetY;\r\n }\r\n object.magneticX += lerpX;\r\n object.magneticY += lerpY;\r\n object.el.style.setProperty('--magnetic-x', object.magneticX.toString());\r\n object.el.style.setProperty('--magnetic-y', object.magneticY.toString());\r\n if (object.magneticTargetX == object.magneticX || object.magneticTargetY == object.magneticY) {\r\n object.isMagneting = false;\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","export class StringLerp{\r\n process(start: number, end: number, amt: number) {\r\n return amt * (end - start);\r\n }\r\n}","import { IStringModule } from \"../IStringModule\"\r\nimport { StringModule } from \"../StringModule\";\r\nimport { StringLerp } from \"../Utils/StringLerp\";\r\n\r\nexport class StringVirtualCursor{\r\n private _lF = .1\r\n private lerp = new StringLerp()\r\n \r\n private _x: number = 0\r\n private _y: number = 0\r\n private _lerpX: number = 0\r\n private _lerpY: number = 0\r\n\r\n private targetX: number = 0\r\n private targetY: number = 0\r\n\r\n public get x(){\r\n return this.targetX\r\n }\r\n public get y(){\r\n return this.targetY\r\n }\r\n public get smoothX(){\r\n return this._x\r\n }\r\n public get smoothY(){\r\n return this._y\r\n }\r\n public get lerpX(){\r\n return this._lerpX\r\n }\r\n public get lerpY(){\r\n return this._lerpY\r\n }\r\n\r\n\r\n onMouseMove(e: MouseEvent): void {\r\n this.targetX = e.clientX;\r\n this.targetY = e.clientY;\r\n }\r\n onUpdate(): void {\r\n this._lerpX = this.lerp.process(this._x, this.targetX, this._lF)\r\n this._lerpY = this.lerp.process(this._y, this.targetY, this._lF)\r\n \r\n this._x = Math.floor(this._x + this._lerpX);\r\n this._y = Math.floor(this._y + this._lerpY);\r\n }\r\n\r\n\r\n}","import { IStringModule } from '../IStringModule';\r\n\r\nconst tS = 'top';\r\nconst bS = 'bottom';\r\nconst lS = 'left';\r\nconst rS = 'right';\r\n\r\nexport class StringObject {\r\n public el: HTMLElement;\r\n public id: string = '';\r\n public oStart: number = 0;\r\n public oEnd: number = 0;\r\n public size: number = 0;\r\n\r\n public startPos: number = 0;\r\n public endPos: number = 0;\r\n public differencePos: number = 0;\r\n public factor: number = 1;\r\n\r\n public inviewTop: number = 1;\r\n public inviewBottom: number = 1;\r\n\r\n public sElPos: string = '';\r\n public sScrPos: string = '';\r\n public eElPos: string = '';\r\n public eScrPos: string = '';\r\n\r\n public halfWidth: number = 0;\r\n public halfHeight: number = 0;\r\n\r\n public start: number = 0;\r\n public end: number = 0;\r\n\r\n public mouseX: number = 0;\r\n public mouseY: number = 0;\r\n\r\n public magneticTargetX: number = 0;\r\n public magneticTargetY: number = 0;\r\n\r\n public magneticX: number = 0;\r\n public magneticY: number = 0;\r\n\r\n public lerp: number = 0;\r\n public strength: number = 0;\r\n public radius: number = 0;\r\n public parallaxPositionStart: number = 0;\r\n public parallaxPositionEnd: number = 0;\r\n\r\n public connects: Array<HTMLElement> = new Array<HTMLElement>();\r\n public cursorTarget: any = null;\r\n\r\n public key: string = '--progress';\r\n\r\n public showObserver: IntersectionObserver | null = null;\r\n public progressObserver: IntersectionObserver | null = null;\r\n public inviewObserver: IntersectionObserver | null = null;\r\n\r\n public repeat: boolean = false;\r\n public selfDisable: boolean = false;\r\n public active: boolean = false;\r\n public abs: boolean = false;\r\n public isMouseMove: boolean = false;\r\n public started: boolean = false;\r\n public isMagneting: boolean = false;\r\n\r\n public onEnter = () => {};\r\n public onLeave = () => {};\r\n\r\n private modules: Array<IStringModule> = new Array<IStringModule>();\r\n\r\n constructor(element: HTMLElement) {\r\n this.el = element;\r\n }\r\n\r\n enter() {\r\n this.active = true;\r\n this.modules.forEach((module: IStringModule) => {\r\n module.addObject(this.id, this);\r\n });\r\n this.onEnter();\r\n }\r\n leave() {\r\n this.active = false;\r\n this.modules.forEach((module: IStringModule) => {\r\n module.removeObject(this.id);\r\n });\r\n this.onLeave();\r\n }\r\n show() {\r\n this.el.classList.add('-inview');\r\n }\r\n hide() {\r\n if (this.repeat) {\r\n this.el.classList.remove('-inview');\r\n }\r\n }\r\n\r\n connect(module: IStringModule) {\r\n this.modules.push(module);\r\n }\r\n\r\n \r\n public calculatePositions(windowSize: number) {\r\n if ((this.sElPos === tS && this.sScrPos === tS) || (this.sElPos === lS && this.sScrPos === lS)) {\r\n this.startPos = this.start - this.oEnd;\r\n } else if ((this.sElPos === tS && this.sScrPos === bS) || (this.sElPos === lS && this.sScrPos === rS)) {\r\n this.startPos = this.start - windowSize - this.oEnd;\r\n } else if ((this.sElPos === bS && this.sScrPos === tS) || (this.sElPos === rS && this.sScrPos === lS)) {\r\n this.startPos = this.start + this.size - this.oEnd;\r\n } else if ((this.sElPos === bS && this.sScrPos === bS) || (this.sElPos === rS && this.sScrPos === rS)) {\r\n this.startPos = this.start - windowSize - this.oEnd + this.size;\r\n }\r\n\r\n if ((this.eElPos === tS && this.eScrPos === tS) || (this.eElPos === lS && this.eScrPos === lS)) {\r\n this.endPos = this.start + this.oStart;\r\n } else if ((this.eElPos === tS && this.eScrPos === bS) || (this.eElPos === lS && this.eScrPos === rS)) {\r\n this.endPos = this.start - windowSize + this.oStart;\r\n } else if ((this.eElPos === bS && this.eScrPos === tS) || (this.eElPos === rS && this.eScrPos === lS)) {\r\n this.endPos = this.start + this.size + this.oStart;\r\n } else if ((this.eElPos === bS && this.eScrPos === bS) || (this.eElPos === rS && this.eScrPos === rS)) {\r\n this.endPos = this.start - windowSize + this.size + this.oStart;\r\n }\r\n this.differencePos = this.endPos - this.startPos;\r\n }\r\n}\r\n","import { StringModule } from '../StringModule';\n\nenum DeviceType {\n Mobile,\n Tablet,\n Laptop,\n Desktop,\n}\n\ninterface DeviceQueryConfig {\n min?: number;\n max?: number;\n enable?: boolean;\n}\n\ninterface QueryConfig {\n mobile?: DeviceQueryConfig;\n tablet?: DeviceQueryConfig;\n laptop?: DeviceQueryConfig;\n desktop?: DeviceQueryConfig;\n}\n\nclass StringResponsiveQueryDevice {\n public min?: number = undefined;\n public max?: number = undefined;\n public enable: boolean = true;\n\n constructor(config?: DeviceQueryConfig) {\n this.min = config?.min;\n this.max = config?.max;\n this.enable = config?.enable ?? true;\n }\n\n setEnable(enable: boolean = true) {\n this.enable = enable;\n }\n setRange(min?: number, max?: number) {\n this.min = min ?? undefined;\n this.max = max ?? undefined;\n }\n\n get mediaQuery(): string {\n let query = 'screen';\n if (this.min) {\n query += ` and (min-width: ${this.min}px)`;\n }\n if (this.max) {\n query += ` and (max-width: ${this.max}px)`;\n }\n return query;\n }\n}\n\nexport class StringResponsive extends StringModule {\n private queries: { [key in DeviceType]: StringResponsiveQueryDevice } = {\n [DeviceType.Mobile]: new StringResponsiveQueryDevice({ max: 359 }),\n [DeviceType.Tablet]: new StringResponsiveQueryDevice({ min: 360, max: 1079 }),\n [DeviceType.Laptop]: new StringResponsiveQueryDevice({ min: 1080, max: 1365 }),\n [DeviceType.Desktop]: new StringResponsiveQueryDevice({ min: 1366 }),\n };\n\n private matchMedias: { [key in DeviceType]: MediaQueryList } = {\n [DeviceType.Mobile]: window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery),\n [DeviceType.Tablet]: window.matchMedia(this.queries[DeviceType.Tablet].mediaQuery),\n [DeviceType.Laptop]: window.matchMedia(this.queries[DeviceType.Laptop].mediaQuery),\n [DeviceType.Desktop]: window.matchMedia(this.queries[DeviceType.Desktop].mediaQuery),\n };\n\n constructor(visitor: any, settings: any) {\n super(visitor, settings);\n this._type = 2;\n }\n\n onConnect() {}\n\n onStart(): void {\n if (this.settings != null) {\n if (this.settings['settings'] != null) {\n let config = this.settings['settings'];\n if (config.mobile) {\n this.queries[DeviceType.Mobile].enable = true;\n this.queries[DeviceType.Mobile].setRange(config.mobile.min == undefined ? null : config.mobile.min, config.mobile.max ?? null);\n this.matchMedias[DeviceType.Mobile] = window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery);\n } else {\n this.queries[DeviceType.Mobile].enable = false;\n }\n\n if (config.tablet) {\n this.queries[DeviceType.Tablet].enable = true;\n this.queries[DeviceType.Tablet].setRange(config.mobile.min == undefined ? null : config.mobile.min, config.mobile.max ?? null);\n this.matchMedias[DeviceType.Tablet] = window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery);\n } else {\n this.queries[DeviceType.Tablet].enable = false;\n }\n\n if (config.laptop) {\n this.queries[DeviceType.Laptop].enable = true;\n this.queries[DeviceType.Laptop].setRange(config.mobile.min == undefined ? null : config.mobile.min, config.mobile.max ?? null);\n this.matchMedias[DeviceType.Laptop] = window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery);\n } else {\n this.queries[DeviceType.Laptop].enable = false;\n }\n\n if (config.desktop) {\n this.queries[DeviceType.Desktop].enable = true;\n this.queries[DeviceType.Desktop].setRange(config.mobile.min == undefined ? null : config.mobile.min, config.mobile.max ?? null);\n this.matchMedias[DeviceType.Desktop] = window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery);\n } else {\n this.queries[DeviceType.Desktop].enable = false;\n }\n }\n }\n this.updateElements();\n }\n\n onResize(): void {\n this.updateElements();\n }\n\n private updateElements() {\n const isMobileMedia = this.matchMedias[DeviceType.Mobile].matches && this.queries[DeviceType.Mobile].enable;\n const isTabletMedia = this.matchMedias[DeviceType.Tablet].matches && this.queries[DeviceType.Tablet].enable;\n const isLaptopMedia = this.matchMedias[DeviceType.Laptop].matches && this.queries[DeviceType.Laptop].enable;\n const isDesktopMedia = this.matchMedias[DeviceType.Desktop].matches && this.queries[DeviceType.Desktop].enable;\n\n const elements = document.querySelectorAll('[string-mobile], [string-tablet], [string-laptop], [string-desktop]');\n\n elements.forEach((element: any) => {\n let showElement = false;\n\n if (element.hasAttribute('string-mobile') && isMobileMedia) {\n showElement = true;\n }\n if (element.hasAttribute('string-tablet') && isTabletMedia) {\n showElement = true;\n }\n if (element.hasAttribute('string-laptop') && isLaptopMedia) {\n showElement = true;\n }\n if (element.hasAttribute('string-desktop') && isDesktopMedia) {\n showElement = true;\n }\n\n if (showElement) {\n element.style.display = null;\n } else {\n element.style.display = `none`;\n }\n });\n }\n}\n","import { StringData } from '../../../Utils/StringData';\r\n\r\nexport class StringScrollbarHorizontal {\r\n private scrollbar: any;\r\n private thumb: any;\r\n private isDragging = false;\r\n private startY: number = 0;\r\n private startScrollPosition: number = 0;\r\n data: StringData;\r\n\r\n constructor(data: StringData, scrollbar: any, thumb: any) {\r\n this.data = data;\r\n this.scrollbar = scrollbar;\r\n this.thumb = thumb;\r\n }\r\n\r\n onResize(): void {\r\n const contentSize = this.data.psH;\r\n const visibleSize = this.data.wS;\r\n\r\n const thumbSize = (visibleSize / contentSize) * visibleSize;\r\n this.thumb.style.setProperty('--size', thumbSize + 'px');\r\n\r\n if (contentSize <= visibleSize) {\r\n this.scrollbar.classList.add('-hide');\r\n } else {\r\n this.scrollbar.classList.remove('-hide');\r\n }\r\n }\r\n\r\n updateThumb() {\r\n const contentHeight = this.data.psH;\r\n const visibleHeight = this.data.wS;\r\n this.thumb.style.setProperty('--position', `${(this.data.c / contentHeight) * visibleHeight + 'px'}`);\r\n }\r\n\r\n mouseDownEvent(e: MouseEvent) {\r\n this.startY = e.clientY;\r\n this.startScrollPosition = this.data.c;\r\n }\r\n\r\n mouseMoveEvent(e: MouseEvent) {\r\n const deltaY = e.clientY - this.startY;\r\n const newScrollPosition = this.startScrollPosition + (deltaY / this.data.wS) * this.data.psH;\r\n this.data.c = newScrollPosition;\r\n this.data.t = newScrollPosition;\r\n window.scrollTo(0, newScrollPosition);\r\n this.updateThumb();\r\n }\r\n}\r\n","import { StringData } from '../../../Utils/StringData';\r\n\r\nexport class StringScrollbarVertical {\r\n private scrollbar: any;\r\n private thumb: any;\r\n private isDragging = false;\r\n private startCoordinate: number = 0;\r\n private startScrollPosition: number = 0;\r\n data: StringData;\r\n\r\n constructor(data: StringData, scrollbar: any, thumb: any) {\r\n this.data = data;\r\n this.scrollbar = scrollbar;\r\n this.thumb = thumb;\r\n }\r\n\r\n onResize(): void {\r\n const contentSize = this.data.psW;\r\n const visibleSize = this.data.wS;\r\n const thumbSize = (visibleSize / contentSize) * visibleSize;\r\n this.thumb.style.setProperty('--size', thumbSize + 'px');\r\n\r\n if (contentSize <= visibleSize) {\r\n this.scrollbar.classList.add('-hide');\r\n } else {\r\n this.scrollbar.classList.remove('-hide');\r\n }\r\n }\r\n\r\n updateThumb() {\r\n const contentWidth = this.data.psW;\r\n const visibleWidth = this.data.wS;\r\n this.thumb.style.setProperty('--position', `${(this.data.c / contentWidth) * visibleWidth + 'px'}`);\r\n }\r\n\r\n mouseDownEvent(e: MouseEvent) {\r\n this.startCoordinate = e.clientX;\r\n this.startScrollPosition = this.data.c;\r\n }\r\n\r\n mouseMoveEvent(e: MouseEvent) {\r\n const deltaX = e.clientX - this.startCoordinate;\r\n const newScrollPosition = this.startScrollPosition + (deltaX / this.data.wS) * this.data.psW;\r\n this.data.c = newScrollPosition;\r\n this.data.t = newScrollPosition;\r\n window.scrollTo(0, newScrollPosition);\r\n this.updateThumb();\r\n }\r\n}\r\n","import { StringModule } from '../../../StringModule';\r\nimport { StringData } from '../../../Utils/StringData';\r\nimport { StringScrollbarHorizontal } from './StringScrollbarHorizontal';\r\nimport { StringScrollbarVertical } from './StringScrollbarVertical';\r\n\r\nexport class StringScrollbar extends StringModule {\r\n private scrollbar: any;\r\n private thumb: any;\r\n private scrollTimeout: any;\r\n\r\n private isDragging = false;\r\n private scrollMode: 'smooth' | 'disable' | 'default' = 'smooth';\r\n\r\n private mouseUpEventBind: any;\r\n private mouseDownEventBind: any;\r\n private mouseMoveEventBind: any;\r\n\r\n private scrollbarState: any;\r\n private scrollbarStateHorizontal: any;\r\n private scrollbarStateVertical: any;\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n\r\n this.mouseUpEventBind = this.mouseUpEvent.bind(this);\r\n this.mouseDownEventBind = this.mouseDownEvent.bind(this);\r\n this.mouseMoveEventBind = this.mouseMoveEvent.bind(this);\r\n }\r\n destructor(): void {\r\n document.removeEventListener('mouseup', this.mouseUpEventBind);\r\n this.thumb.removeEventListener('mousedown', this.mouseDownEventBind);\r\n document.removeEventListener('mousemove', this.mouseMoveEventBind);\r\n }\r\n\r\n onStart(): void {\r\n this.createScrollbar();\r\n this.updateThumb();\r\n this.addCustomStyles();\r\n document.addEventListener('mouseup', this.mouseUpEventBind);\r\n this.thumb.addEventListener('mousedown', this.mouseDownEventBind);\r\n document.addEventListener('mousemove', this.mouseMoveEventBind);\r\n document.documentElement.classList.add(`-no-scrollbar`);\r\n }\r\n\r\n onScroll(data: StringData): void {\r\n this.updateThumb();\r\n this.showScrollbar();\r\n this.hideScrollbar();\r\n }\r\n\r\n onResize(): void {\r\n this.scrollbarState.onResize();\r\n }\r\n\r\n onChangeScrollParams(): void {\r\n if (this.data.sM == 'disable' && this.scrollMode != 'disable') {\r\n this.scrollbar.classList.add('-hide');\r\n }\r\n if ((this.data.sM == 'smooth' && this.scrollMode == 'disable') || (this.data.sM == 'default' && this.scrollMode == 'disable')) {\r\n this.scrollbar.classList.remove('-hide');\r\n }\r\n this.scrollMode = this.data.sM;\r\n }\r\n\r\n onChangeScrollDirection() {\r\n if (this.data.sD == 'horizontal') {\r\n this.scrollbarState = this.scrollbarStateVertical;\r\n } else {\r\n this.scrollbarState = this.scrollbarStateHorizontal;\r\n }\r\n this.scrollbarState.onResize();\r\n }\r\n\r\n private addCustomStyles() {\r\n const style = document.createElement('style');\r\n style.textContent = `\r\n ::-webkit-scrollbar {\r\n display: none;\r\n width: 0;\r\n height: 0;\r\n -webkit-appearance: none;\r\n }\r\n body {\r\n -ms-overflow-style: none; /* IE and Edge */\r\n scrollbar-width: none; /* Firefox */\r\n }\r\n .-without-scrollbar::-webkit-scrollbar {\r\n display: none;\r\n }\r\n .-without-scrollbar {\r\n -ms-overflow-style: none; /* IE and Edge */\r\n scrollbar-width: none; /* Firefox */\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n\r\n private createScrollbar() {\r\n this.scrollbar = document.createElement('div');\r\n this.scrollbar.classList.add('scrollbar');\r\n this.thumb = document.createElement('div');\r\n this.thumb.classList.add('thumb');\r\n this.scrollbar.appendChild(this.thumb);\r\n document.body.appendChild(this.scrollbar);\r\n\r\n this.scrollbarStateHorizontal = new StringScrollbarHorizontal(this.data, this.scrollbar, this.thumb);\r\n this.scrollbarStateVertical = new StringScrollbarVertical(this.data, this.scrollbar, this.thumb);\r\n this.scrollbarState = this.scrollbarStateHorizontal;\r\n }\r\n\r\n private updateThumb() {\r\n this.scrollbarState.updateThumb();\r\n }\r\n\r\n private mouseDownEvent(e: MouseEvent) {\r\n this.isDragging = true;\r\n this.scrollbarState.mouseDownEvent(e);\r\n document.body.style.userSelect = 'none';\r\n this.scrollbar.classList.add('-touch');\r\n }\r\n\r\n private mouseMoveEvent(e: MouseEvent) {\r\n if (!this.isDragging) return;\r\n\r\n this.scrollbarState.mouseMoveEvent(e);\r\n }\r\n\r\n private mouseUpEvent() {\r\n this.isDragging = false;\r\n document.body.style.userSelect = '';\r\n this.hideScrollbar();\r\n this.scrollbar.classList.remove('-touch');\r\n }\r\n\r\n private showScrollbar() {\r\n this.scrollbar.classList.add('-scroll');\r\n }\r\n\r\n private hideScrollbar() {\r\n if (this.scrollTimeout) {\r\n clearTimeout(this.scrollTimeout);\r\n }\r\n this.scrollTimeout = setTimeout(() => {\r\n this.scrollbar.classList.remove('-scroll');\r\n }, 1000);\r\n }\r\n}\r\n","import { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringDisplacement extends StringModule {\r\n oldLerp: number = 0\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'displacement.';\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n \r\n if (this.oldLerp != 0 && this.data.v == 0) {\r\n this.oldLerp = 0\r\n document.documentElement.style.setProperty('--lerp', \"0\");\r\n }\r\n if (this.data.v != 0) {\r\n document.documentElement.style.setProperty('--lerp', this.data.v.toString());\r\n this.oldLerp = data.v\r\n }\r\n \r\n }\r\n}\r\n","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringParallax extends StringModule {\r\n private setupParallax = (object: StringObject, progress: number) => {\r\n let transformCompute = `translate3d(0, ${\r\n object.factor * this.data.wS * object.parallaxPositionStart + progress * object.factor * this.data.wS * object.parallaxPositionEnd\r\n }px, 0)`;\r\n object.el.style.transform = transformCompute;\r\n object.connects.forEach((element) => {\r\n element.style.transform = transformCompute;\r\n });\r\n };\r\n\r\n private onScrollDesktopEvent = () => {\r\n this.objects.forEach((object) => {\r\n let progress = Math.min(1, Math.max(0, (this.data.c - object.startPos) / object.differencePos));\r\n object.el.style.setProperty(object.key, progress.toString());\r\n this.setupParallax(object, progress);\r\n });\r\n }\r\n private onScrollMobileEvent = () => {}\r\n private onScrollEvent = this.onScrollDesktopEvent\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'parallax';\r\n }\r\n\r\n onConnect(object: StringObject): void {\r\n if (this.settings != null) {\r\n if (this.settings['string-parallax-bias'] != null) {\r\n let parallaxPosition = this.attribute.process(object.el, 'string-parallax-bias', this.settings['string-parallax-bias']);\r\n object.parallaxPositionStart = -0.5 + 0.5 * parallaxPosition;\r\n object.parallaxPositionEnd = 0.5 + 0.5 * (1 - parallaxPosition);\r\n }\r\n if (this.settings['string-parallax'] != null) {\r\n object.factor = this.settings['string-parallax'];\r\n }\r\n }\r\n \r\n }\r\n\r\n onScroll(data: StringData): void {\r\n this.onScrollEvent()\r\n }\r\n onChangeScrollDirection(): void {\r\n if (this.data.sD == 'vertical') {\r\n this.setupParallax = (object: StringObject, progress: number) => {\r\n let transformCompute = `translate3d(0, ${\r\n object.factor * this.data.wS * object.parallaxPositionStart + progress * object.factor * this.data.wS * object.parallaxPositionEnd\r\n }px, 0)`;\r\n object.el.style.transform = transformCompute;\r\n object.connects.forEach((element) => {\r\n element.style.transform = transformCompute;\r\n });\r\n };\r\n } else {\r\n this.setupParallax = (object: StringObject, progress: number) => {\r\n let transformCompute = `translate3d(${\r\n object.factor * this.data.wS * object.parallaxPositionStart + progress * object.factor * this.data.wS * object.parallaxPositionEnd\r\n }px, 0, 0)`;\r\n object.el.style.transform = transformCompute;\r\n object.connects.forEach((element) => {\r\n element.style.transform = transformCompute;\r\n });\r\n };\r\n }\r\n }\r\n\r\n onResize(): void {\r\n if (window.innerWidth > 1080) {\r\n this.onScrollEvent = this.onScrollDesktopEvent\r\n } else {\r\n this.onScrollEvent = this.onScrollMobileEvent \r\n this.objects.forEach((object) => {\r\n this.setupParallax(object, .5);\r\n })\r\n }\r\n }\r\n}\r\n","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringProgress extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'progress';\r\n }\r\n onScroll(data: StringData): void {\r\n this.objects.forEach((object) => {\r\n this.setUpObject(object, this.data.c);\r\n });\r\n }\r\n onConnect(object: StringObject) {\r\n object.onEnter = () => {\r\n this.setUpObject(object, this.data.c);\r\n };\r\n }\r\n\r\n private setUpObject(object: StringObject, currentTop: number) {\r\n let progress = Math.min(1, Math.max(0, (currentTop - object.startPos) / object.differencePos));\r\n //TODO BUG\r\n this.events.emit(`progress_${object.id}`, progress);\r\n object.el.style.setProperty(object.key, progress.toString());\r\n object.connects.forEach((element) => {\r\n element.style.setProperty(object.key, progress.toString());\r\n });\r\n }\r\n}\r\n","import { StringData } from '../../Utils/StringData';\r\nimport { StringTypeSettings } from './StringTypeSettings';\r\n\r\nexport class StringScroll {\r\n public data: StringData;\r\n public isProg: boolean = false;\r\n public isParallaxEnabled: boolean = false;\r\n public name: string = '';\r\n public settings: StringTypeSettings;\r\n public v = 0;\r\n protected vT: number = 0;\r\n protected d: any;\r\n\r\n public scrollContainer: any;\r\n\r\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\r\n this.d = document;\r\n this.settings = settings;\r\n this.data = data;\r\n this.scrollContainer = window;\r\n }\r\n\r\n onCalcUpdate: any = () => {\r\n this.scrollContainer.scrollTo(0, this.data.c);\r\n };\r\n onUpdate(): void {}\r\n onWheel(e: any): void {}\r\n onScroll(e: any): void {}\r\n\r\n protected _scrollDirection: 'vertical' | 'horizontal' = 'vertical';\r\n set scrollDirection(scrollDirection: 'vertical' | 'horizontal') {\r\n this._scrollDirection = scrollDirection;\r\n if (this._scrollDirection == 'vertical') {\r\n this.onCalcUpdate = () => {\r\n this.scrollContainer.scrollTo(0, this.data.c);\r\n };\r\n } else if (this._scrollDirection == 'horizontal') {\r\n this.onCalcUpdate = () => {\r\n this.scrollContainer.scrollTo(this.data.c, 0);\r\n };\r\n }\r\n }\r\n}\r\n","\r\nimport { StringData } from \"../../Utils/StringData\";\r\nimport { StringScroll } from \"./StringScroll\";\r\nimport { StringTypeSettings } from \"./StringTypeSettings\";\r\n\r\nexport class StringScrollDefault extends StringScroll {\r\n private animateC: number = 0;\r\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\r\n super(document, settings, data);\r\n this.name = 'mobile';\r\n }\r\n public onUpdate() {\r\n this.vT = this.d.documentElement.scrollTop - this.animateC;\r\n this.animateC = this.d.documentElement.scrollTop;\r\n this.data.v = this.vT;\r\n }\r\n public onScroll(e: any) {\r\n this.data.c = this.d.documentElement.scrollTop;\r\n this.data.t = this.d.documentElement.scrollTop;\r\n this.data.d = 0;\r\n }\r\n}","\r\nimport { StringData } from \"../../Utils/StringData\";\r\nimport { StringScroll } from \"./StringScroll\";\r\nimport { StringTypeSettings } from \"./StringTypeSettings\";\r\n\r\nexport class StringScrollDisable extends StringScroll {\r\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\r\n super(document, settings, data);\r\n this.name = 'disable';\r\n }\r\n\r\n public onUpdate() {}\r\n\r\n public onWheel(e: any) {\r\n e.preventDefault();\r\n }\r\n\r\n public onScroll(e: any) {\r\n e.preventDefault();\r\n }\r\n}","import { StringData } from '../../Utils/StringData';\r\nimport { StringScroll } from './StringScroll';\r\nimport { StringTypeSettings } from './StringTypeSettings';\r\n\r\nexport class StringScrollSmooth extends StringScroll {\r\n public name: string = 'desktop';\r\n private isScroll: boolean = false;\r\n private isScrollbarManipulation: boolean = false\r\n\r\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\r\n super(document, settings, data);\r\n this.name = 'desktop';\r\n }\r\n\r\n public onUpdate() {\r\n this.data.v = (this.data.t - this.data.c) * this.settings.speed;\r\n if (this.isScrollbarManipulation) {\r\n this.isScrollbarManipulation = false\r\n this.data.c = this.data.t\r\n return\r\n }\r\n if (this.data.v != 0) {\r\n this.isScroll = true;\r\n\r\n let newC;\r\n if (this.data.v > 0) {\r\n newC = Math.ceil(this.data.c + this.data.v);\r\n document.documentElement.classList.add('-scroll-forward');\r\n document.documentElement.classList.remove('-scroll-back');\r\n } else {\r\n newC = Math.floor(this.data.c + this.data.v);\r\n document.documentElement.classList.add('-scroll-back');\r\n document.documentElement.classList.remove('-scroll-forward');\r\n }\r\n\r\n if (this.data.c != newC) {\r\n this.data.c = newC;\r\n this.isProg = true;\r\n this.onCalcUpdate();\r\n } else {\r\n this.data.c = newC;\r\n }\r\n } else if (this.isScroll) {\r\n this.isScroll = false;\r\n this.data.v = 0;\r\n this.data.c = this.data.t;\r\n this.isProg = false;\r\n document.documentElement.classList.remove('-scroll-back');\r\n document.documentElement.classList.remove('-scroll-forward');\r\n document.documentElement.style.setProperty('--lerp', '0');\r\n }\r\n }\r\n public onWheel(e: any) {\r\n if (e.deltaY != 0) {\r\n e.preventDefault();\r\n this.data.d = e.deltaY;\r\n this.data.t += this.data.d;\r\n this.data.t = Math.min(Math.max(this.data.t, 0), this.data.bS);\r\n }\r\n }\r\n public onScroll(e: any): void {\r\n if (this.isProg == false) {\r\n this.isScrollbarManipulation = true\r\n if (this.scrollContainer.scrollTop == undefined) {\r\n this.data.t = document.documentElement.scrollTop\r\n } else {\r\n this.data.t = this.scrollContainer.scrollTop\r\n }\r\n }\r\n }\r\n}\r\n","export class StringTypeSettings{\r\n private sC: number = 0.0\r\n private sA: number = 0.13\r\n private sD: number = 0.04\r\n\r\n public get speed() {\r\n return this.sC\r\n }\r\n public get speedAccelerate() {\r\n return this.sA\r\n }\r\n public get speedDecelerate() { \r\n return this.sD\r\n }\r\n\r\n public set speedAccelerate(speed: number) {\r\n this.sA = speed\r\n this.updateScrollParams()\r\n }\r\n public set speedDecelerate(speed: number) { \r\n this.sD = speed\r\n this.updateScrollParams()\r\n }\r\n \r\n private updateScrollParams() {\r\n this.sC = this.sA * (1 - this.sD)\r\n }\r\n}","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\n\r\ninterface ISplitOptions {\r\n line?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n word?: Array<{\r\n align: string;\r\n random?: { min: number; max: number };\r\n abs?: boolean;\r\n }>;\r\n char?: Array<{\r\n align: string;\r\n random?: { min: number; max: number };\r\n abs?: boolean;\r\n }>;\r\n charLine?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n charWord?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n wordLine?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n}\r\n\r\nexport class StringSplit extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'split';\r\n }\r\n\r\n onStart(): void {}\r\n onResize(): void {\r\n document.querySelectorAll(`[string=\"split\"].-splited`).forEach((element) => {\r\n const splitOptions = this.parseSplitOptions(element.getAttribute('string-split'));\r\n if (element.innerHTML != this.split(splitOptions, element).html) {\r\n element.innerHTML = this.split(splitOptions, element).html\r\n }\r\n });\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n let element = object.el;\r\n if (!element.classList.contains('-splited')) {\r\n element.classList.add('-splited');\r\n element.setAttribute('string-split-original', element.innerHTML);\r\n const splitOptions = this.parseSplitOptions(element.getAttribute('string-split'));\r\n \r\n if (element.innerHTML != this.split(splitOptions, element).html) {\r\n element.innerHTML = this.split(splitOptions, element).html\r\n }\r\n }\r\n }\r\n\r\n private parseSplitOptions(attributeValue: string | null): ISplitOptions {\r\n const options: ISplitOptions = {\r\n line: [],\r\n word: [],\r\n char: [],\r\n charLine: [],\r\n charWord: [],\r\n wordLine: [],\r\n };\r\n\r\n if (attributeValue) {\r\n const parts = attributeValue.split('|');\r\n\r\n parts.forEach((part) => {\r\n const match = part.match(/^(\\w+-)?(\\w+)(\\[(.*?)\\])?$/);\r\n\r\n if (match) {\r\n const prefix = match[1] || '';\r\n const option = match[2];\r\n const params = match[4] ? match[4].split(',') : [];\r\n switch (prefix + option) {\r\n case 'char-line':\r\n (options.charLine as any[]).push(this.parseParam(params));\r\n break;\r\n case 'char-word':\r\n (options.charWord as any[]).push(this.parseParam(params));\r\n break;\r\n case 'word-line':\r\n (options.wordLine as any[]).push(this.parseParam(params));\r\n break;\r\n case 'line':\r\n (options.line as any[]).push(this.parseParam(params));\r\n break;\r\n case 'word':\r\n (options.word as any[]).push(this.parseParam(params));\r\n break;\r\n case 'char':\r\n (options.char as any[]).push(this.parseParam(params));\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n\r\n return options;\r\n }\r\n\r\n private parseParam(params: string[]): { align: string; random?: { min: number; max: number }; abs?: boolean } {\r\n const result: { align: string; random?: { min: number; max: number }; abs?: boolean } = { align: 'start' };\r\n\r\n params.forEach((param) => {\r\n if (param === 'abs') {\r\n result.abs = true;\r\n } else if (param.startsWith('random')) {\r\n const match = param.match(/random\\((\\d+),(\\d+)\\)/);\r\n if (match) {\r\n result.random = { min: parseInt(match[1]), max: parseInt(match[2]) };\r\n result.align = 'random';\r\n } else {\r\n result.align = 'random';\r\n }\r\n } else if (['start', 'center', 'end'].includes(param)) {\r\n result.align = param;\r\n } else {\r\n result.align = 'start';\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n public split(options: ISplitOptions, elementRoot: any): any {\r\n //let text = elementRoot.innerHTML;\r\n let text = elementRoot.getAttribute('string-split-original');\r\n if (text.length === 0) return '';\r\n\r\n text = this.decodeHtmlEntity(text);\r\n const element = document.createElement('span');\r\n const words = text.split(/\\s+/);\r\n let globalCharIndex = 0;\r\n let globalWordIndex = 0;\r\n const totalChars = text.replace(/\\s/g, '').length;\r\n\r\n const tempSpan = document.createElement('span');\r\n const compStyles = window.getComputedStyle(elementRoot);\r\n\r\n tempSpan.style.fontFamily = compStyles.fontFamily;\r\n tempSpan.style.fontSize = compStyles.fontSize;\r\n tempSpan.style.letterSpacing = compStyles.letterSpacing;\r\n tempSpan.style.lineHeight = compStyles.lineHeight;\r\n tempSpan.style.fontWeight = compStyles.fontWeight;\r\n tempSpan.classList.add('-s-char');\r\n document.body.appendChild(tempSpan);\r\n\r\n let virtualLines: any[] = [];\r\n let virtualLine: any[] = [];\r\n let currentLineWidth = 0;\r\n words.forEach((word: any, wordIndex: any) => {\r\n tempSpan.textContent = word;\r\n if (word.length > 0) {\r\n tempSpan.textContent += '\\u00a0';\r\n }\r\n\r\n const wordWidth = tempSpan.offsetWidth;\r\n\r\n const virtualWordSpan = {\r\n text: word,\r\n width: wordWidth,\r\n chars: new Array<any>(),\r\n };\r\n const chars = Array.from(word);\r\n chars.forEach((char, charIndex) => {\r\n const virtualCharSpan = {\r\n text: char,\r\n };\r\n\r\n virtualWordSpan.chars.push(virtualCharSpan);\r\n });\r\n if (currentLineWidth + wordWidth > elementRoot.offsetWidth) {\r\n virtualLines.push(virtualLine);\r\n virtualLine = [];\r\n currentLineWidth = 0;\r\n globalCharIndex += virtualLine.length;\r\n }\r\n virtualLine.push(virtualWordSpan);\r\n currentLineWidth += wordWidth;\r\n });\r\n\r\n virtualLines.push(virtualLine);\r\n\r\n let hasLineOptions = false;\r\n if (options.line != null) {\r\n if (options.line.length > 0) {\r\n hasLineOptions = true;\r\n }\r\n }\r\n if (options.wordLine != null) {\r\n if (options.wordLine.length > 0) {\r\n hasLineOptions = true;\r\n }\r\n }\r\n if (options.charLine != null) {\r\n if (options.charLine.length > 0) {\r\n hasLineOptions = true;\r\n }\r\n }\r\n\r\n let addedWordsCount = 0;\r\n if (hasLineOptions) {\r\n // for (let i = 0; i < virtualLines.length; i++) {\r\n // addedWordsCount += virtualLines[i].length;\r\n // }\r\n for (let i = 0; i < virtualLines.length; i++) {\r\n this.appendVirtualLineToDOM(\r\n i,\r\n virtualLines.length,\r\n words.length,\r\n element,\r\n virtualLines[i],\r\n options,\r\n globalCharIndex,\r\n totalChars,\r\n addedWordsCount\r\n );\r\n addedWordsCount += virtualLines[i].length;\r\n }\r\n } else {\r\n for (let i = 0; i < virtualLines.length; i++) {\r\n virtualLines[i].forEach((virtualWordSpan: any, wordIndex: any) => {\r\n if (virtualWordSpan.chars.length > 0) {\r\n const wordSpan = document.createElement('span');\r\n wordSpan.classList.add('-s-word');\r\n virtualWordSpan.chars.forEach((virtualCharSpan: any, charIndex: any) => {\r\n const charSpan = document.createElement('span');\r\n charSpan.classList.add('-s-char');\r\n charSpan.textContent = virtualCharSpan.text;\r\n this.applyOptions(charSpan, options.char, globalCharIndex, 'char', charIndex, totalChars);\r\n this.applyOptions(charSpan, options.charWord, charIndex, 'char-word', charIndex, virtualWordSpan.text.length);\r\n wordSpan.appendChild(charSpan);\r\n globalCharIndex++;\r\n });\r\n this.applyOptions(wordSpan, options.word, globalWordIndex, 'word', wordIndex, words.length);\r\n if (virtualWordSpan.chars.length > 0) {\r\n wordSpan.innerHTML += '\\u00a0';\r\n }\r\n element.appendChild(wordSpan);\r\n globalWordIndex++;\r\n }\r\n });\r\n }\r\n }\r\n\r\n document.body.removeChild(tempSpan);\r\n return { html: element.innerHTML };\r\n }\r\n\r\n // TODO: remove line - char,word\r\n private appendVirtualLineToDOM(\r\n lineIndex: number,\r\n length: number,\r\n totalWords: number,\r\n element: HTMLSpanElement,\r\n virtualLine: any[],\r\n options: ISplitOptions,\r\n globalCharIndex: number,\r\n totalChars: number,\r\n addedWordsCount: number\r\n ) {\r\n const lineSpan = document.createElement('span');\r\n lineSpan.classList.add('-s-line');\r\n\r\n this.applyOptions(lineSpan, options.line, lineIndex, 'line', 0, length);\r\n\r\n let lineCharIndex = 0;\r\n let globalWordIndex = 0;\r\n let totalLineChars = 0;\r\n virtualLine.forEach((virtualWordSpan, wordIndex) => {\r\n totalLineChars += virtualWordSpan.text.length;\r\n });\r\n virtualLine.forEach((virtualWordSpan, wordIndex) => {\r\n if (virtualWordSpan.chars.length > 0) {\r\n const wordSpan = document.createElement('span');\r\n wordSpan.classList.add('-s-word');\r\n\r\n virtualWordSpan.chars.forEach((virtualCharSpan: any, charIndex: any) => {\r\n const charSpan = document.createElement('span');\r\n charSpan.classList.add('-s-char');\r\n charSpan.textContent = virtualCharSpan.text;\r\n\r\n this.applyOptions(charSpan, options.char, globalCharIndex, 'char', charIndex, totalChars);\r\n this.applyOptions(charSpan, options.charLine, lineCharIndex, 'char-line', charIndex, totalLineChars);\r\n this.applyOptions(charSpan, options.charWord, charIndex, 'char-word', charIndex, virtualWordSpan.text.length);\r\n\r\n wordSpan.appendChild(charSpan);\r\n globalCharIndex++;\r\n lineCharIndex++;\r\n });\r\n\r\n this.applyOptions(\r\n wordSpan,\r\n options.word,\r\n addedWordsCount + globalWordIndex,\r\n 'word',\r\n addedWordsCount + globalWordIndex,\r\n totalWords - 1\r\n );\r\n this.applyOptions(wordSpan, options.wordLine, wordIndex, 'word-line', wordIndex, virtualLine.length);\r\n\r\n if (wordIndex < virtualLine.length - 1) {\r\n wordSpan.innerHTML += '\\u00a0';\r\n }\r\n // +'\\u00a0';\r\n\r\n lineSpan.appendChild(wordSpan);\r\n // if (wordIndex < virtualLine.length - 1) {\r\n // lineSpan.appendChild(this.createSpaceSpan());\r\n // }\r\n globalWordIndex++;\r\n }\r\n });\r\n\r\n element.appendChild(lineSpan);\r\n }\r\n\r\n private applyOptions(\r\n span: HTMLSpanElement,\r\n optionArray: any[] | undefined,\r\n globalIndex: number,\r\n type: string,\r\n localIndex: number,\r\n parentLength: number\r\n ) {\r\n if (optionArray) {\r\n optionArray.forEach((option, optionIndex) => {\r\n let index = this.calculateIndex(option, globalIndex, localIndex, parentLength);\r\n\r\n const variableName = this.generateVariableName(type, option, optionIndex);\r\n span.style.setProperty(variableName, String(index));\r\n });\r\n }\r\n }\r\n\r\n private createSpaceSpan(): HTMLSpanElement {\r\n const spaceSpan = document.createElement('span');\r\n spaceSpan.innerHTML = '\\u00a0';\r\n return spaceSpan;\r\n }\r\n\r\n private decodeHtmlEntity(str: string) {\r\n return str.replace(/&/g, '&');\r\n }\r\n\r\n private calculateIndex(\r\n options: { align: string; random?: { min: number; max: number }; abs?: boolean },\r\n globalIndex: number,\r\n localIndex: number,\r\n parentLength: number\r\n ): number {\r\n let index = globalIndex;\r\n if (options.align === 'random') {\r\n if (options.random === undefined) {\r\n options.random = { min: 0, max: parentLength };\r\n }\r\n const min = options.random.min || 0;\r\n const max = options.random.max || parentLength;\r\n index = Math.floor(Math.random() * (max - min + 1)) + min;\r\n }\r\n if (options.align === 'end') {\r\n index = parentLength - index - 1;\r\n } else if (options.align === 'center') {\r\n index = index - Math.floor(parentLength / 2);\r\n }\r\n\r\n if (options.abs) {\r\n index = Math.abs(index);\r\n }\r\n return index;\r\n }\r\n\r\n private generateVariableName(\r\n type: string,\r\n option: { align: string; random?: { min: number; max: number }; abs?: boolean },\r\n index: number\r\n ): string {\r\n let variableName = `--${type}`;\r\n if (option.align) {\r\n variableName += `-${option.align}`;\r\n }\r\n return variableName;\r\n }\r\n}\r\n","export class StringFPS{\r\n private isAnimationStarted: boolean = false\r\n private fpsInterval: any\r\n private now: any\r\n private then: any\r\n private elapsed: any;\r\n private requestAnimationId: number = 0\r\n public onFrame = ()=>{}\r\n public start(fps: number) {\r\n if (this.isAnimationStarted) { return }\r\n this.fpsInterval = 1000 / fps;\r\n this.then = Date.now();\r\n this.animate();\r\n this.isAnimationStarted = true\r\n }\r\n public stop() {\r\n if (!this.isAnimationStarted) { return }\r\n cancelAnimationFrame(this.requestAnimationId)\r\n this.isAnimationStarted = false\r\n }\r\n private animate() {\r\n this.requestAnimationId = requestAnimationFrame(() => { this.animate() })\r\n this.now = Date.now();\r\n this.elapsed = this.now - this.then;\r\n if (this.elapsed > this.fpsInterval) {\r\n this.then = this.now - (this.elapsed % this.fpsInterval);\r\n this.onFrame()\r\n }\r\n }\r\n}","import { StringModule } from '../StringModule';\r\nimport { StringData } from '../Utils/StringData';\r\n\r\nexport class StringFPSTracker extends StringModule {\r\n private callCount: number = 0;\r\n private intervalId: any;\r\n private displayElement: any;\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this._type = 2;\r\n }\r\n private createDisplayElement() {\r\n this.displayElement = document.createElement('div');\r\n this.displayElement.style.position = 'fixed';\r\n this.displayElement.style.bottom = '10px';\r\n this.displayElement.style.right = '10px';\r\n this.displayElement.style.backgroundColor = '#000000';\r\n this.displayElement.style.border = '1px solid rgba(255, 255, 255, 0.2)';\r\n this.displayElement.style.zIndex = '9999';\r\n this.displayElement.setAttribute('data-fps', '0');\r\n document.body.appendChild(this.displayElement);\r\n const style = document.createElement('style');\r\n style.innerHTML = `\r\n [data-fps]::after {\r\n content: 'FPS: ' attr(fps);\r\n position: relative;\r\n display: block;\r\n color: #ffffff;\r\n padding: 5px 8px;\r\n font-family: Arial, sans-serif;\r\n font-size: 12px;\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n onStart() {\r\n this.createDisplayElement();\r\n this.intervalId = setInterval(() => {\r\n this.displayElement.setAttribute('fps', `${this.callCount}`);\r\n this.callCount = 0;\r\n }, 1000);\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.callCount++;\r\n }\r\n\r\n destructor() {\r\n clearInterval(this.intervalId);\r\n document.body.removeChild(this.displayElement);\r\n }\r\n}\r\n","import { StringModule } from '../StringModule';\r\nimport { StringData } from '../Utils/StringData';\r\n\r\nexport class StringPositionTracker extends StringModule {\r\n private callCount: number = 0;\r\n private intervalId: any;\r\n private displayElement: any;\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this._type = 2;\r\n }\r\n private createDisplayElement() {\r\n this.displayElement = document.createElement('div');\r\n this.displayElement.style.position = 'fixed';\r\n this.displayElement.style.bottom = '10px';\r\n this.displayElement.style.left = '10px';\r\n this.displayElement.style.backgroundColor = '#000000';\r\n this.displayElement.style.border = '1px solid rgba(255, 255, 255, 0.2)';\r\n this.displayElement.style.zIndex = '9999';\r\n this.displayElement.setAttribute('data-position', '0');\r\n document.body.appendChild(this.displayElement);\r\n const style = document.createElement('style');\r\n style.innerHTML = `\r\n [data-position]::after {\r\n content: attr(direction) 'Top: ' attr(value) 'px';\r\n position: relative;\r\n display: block;\r\n color: #ffffff;\r\n padding: 5px 8px;\r\n font-family: Arial, sans-serif;\r\n font-size: 12px;\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n onStart() {\r\n this.createDisplayElement();\r\n }\r\n\r\n onScroll(data: StringData): void {\r\n let dirSymbol = ``;\r\n if (data.c < data.t) {\r\n dirSymbol = `↓`;\r\n }\r\n if (data.c > data.t) {\r\n dirSymbol = `↑`;\r\n }\r\n this.displayElement.setAttribute('direction', dirSymbol);\r\n this.displayElement.setAttribute('value', `${this.data.c}`);\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.callCount++;\r\n }\r\n\r\n destructor() {\r\n document.body.removeChild(this.displayElement);\r\n }\r\n}\r\n","export class StringAttribute{\r\n process(e: any, n: string, d: any = null) {\r\n return e.getAttribute(n) == null ? d : e.getAttribute(n)\r\n }\r\n}","export class StringBoundingClientRect {\r\n process(e: any) {\r\n return e.getBoundingClientRect();\r\n }\r\n}\r\n","export class StringData {\r\n t: number = 0;\r\n c: number = 0;\r\n d: number = 0;\r\n v: number = 0;\r\n bS: number = 0;\r\n cF: number = 1;\r\n wS: number = 0;\r\n hnwS: number = 0;\r\n\r\n psW: number = 0;\r\n psH: number = 0;\r\n\r\n scsW: number = 1;\r\n scsH: number = 1;\r\n sD: 'vertical' | 'horizontal' = 'vertical';\r\n sC: any;\r\n sM: 'smooth' | 'disable' | 'default' = 'smooth';\r\n}\r\n","export class StringEvent{\r\n\r\n private eventsByKey: Map<string, Array<Function>> = new Map<string, Array<Function>>()\r\n private events: Array<Function> = new Array<Function>()\r\n on(id: string, event: Function){\r\n if ( this.eventsByKey.has(id) == false) { \r\n this.eventsByKey.set(id, [])\r\n }\r\n this.eventsByKey.get(id)?.push(event)\r\n this.updateAllEvents()\r\n }\r\n public has(id: string) {\r\n return this.eventsByKey.has(id)\r\n }\r\n public emit(id: string, value: any) {\r\n if (this.eventsByKey.has(id)) {\r\n this.eventsByKey.get(id)?.forEach((event: any) => {\r\n event(value)\r\n });\r\n }\r\n }\r\n public off(id: string, event: Function) {\r\n let ea = this.eventsByKey.get(id)\r\n if (ea!=null) {\r\n this.eventsByKey.set(id, ea.filter((h: any) => h !== event))\r\n }\r\n this.updateAllEvents()\r\n }\r\n public all(value: any) {\r\n this.events.forEach(event => {\r\n event(value)\r\n });\r\n }\r\n private updateAllEvents() {\r\n Array.from(this.eventsByKey.values()).forEach(listOfEvents => {\r\n listOfEvents.forEach(event => {\r\n this.events.push(event)\r\n });\r\n });\r\n }\r\n}","export class StringParser{\r\n public parseSingle(v: string, element: any, wH: any, baseRem: number): number {\r\n let isNegative = v.startsWith('-');\r\n if (isNegative) {\r\n v = v.slice(1);\r\n }\r\n let pV;\r\n if (v === 'selfHeight') {\r\n pV = element.offsetHeight;\r\n } else if (v.endsWith('px')) {\r\n pV = parseFloat(v);\r\n } else if (v.endsWith('%')) {\r\n pV = parseFloat(v) * wH / 100;\r\n } else if (v.endsWith('rem')) {\r\n pV = parseFloat(v) * baseRem;\r\n }\r\n return isNegative ? -pV : pV;\r\n }\r\n}","function nullifyTransforms(el: any) {\r\n let { top, left, width, height } = el.getBoundingClientRect();\r\n let transformArr = parseTransform(el);\r\n if (transformArr.length == 6) {\r\n var t = transformArr;\r\n let det = t[0] * t[3] - t[1] * t[2];\r\n return {\r\n width: width / t[0] == 0 ? 1 : t[0],\r\n height: height / t[3] == 0 ? 1 : t[3],\r\n left: (left * t[3] - top * t[2] + t[2] * t[5] - t[4] * t[3]) / det,\r\n top: (-left * t[1] + top * t[0] + t[4] * t[1] - t[0] * t[5]) / det,\r\n };\r\n } else {\r\n return { top, left, width, height };\r\n }\r\n function parseTransform(el: any) {\r\n let transform = window.getComputedStyle(el).transform;\r\n return transform\r\n .split(/\\(|,|\\)/)\r\n .slice(1, -1)\r\n .map(function (v) {\r\n return parseFloat(v);\r\n });\r\n }\r\n}\r\n\r\nexport class StringPosition {\r\n process(e: any, container: any = document.body) {\r\n let br;\r\n try {\r\n br = container.getBoundingClientRect();\r\n } catch (error) {\r\n br = document.body.getBoundingClientRect();\r\n }\r\n let er = nullifyTransforms(e);\r\n let o = er.top - br.top;\r\n let oL = er.left - br.left;\r\n return { top: o, left: oL };\r\n }\r\n}\r\n","import { IStringModule } from './IStringModule';\r\nimport { StringLazy } from './Loading/Modules/StringLazy';\r\nimport { StringLoading } from './Loading/Modules/StringLoading';\r\nimport { StringVideoAutoplay } from './Loading/Modules/StringVideoAutoplay';\r\nimport { StringCursor } from './Mouse/Modules/StringCursor';\r\nimport { StringMagnetic } from './Mouse/Modules/StringMagnetic';\r\nimport { StringVirtualCursor } from './Mouse/StringVirtualCursor';\r\nimport { StringObject } from './Objects/StringObject';\r\nimport { StringResponsive } from './Screen/StringResponsive';\r\nimport { StringScrollbar } from './Scroll/Modules/Scrollbar/StringScrollbar';\r\nimport { StringDisplacement } from './Scroll/Modules/StringDisplacement';\r\nimport { StringParallax } from './Scroll/Modules/StringParallax';\r\nimport { StringProgress } from './Scroll/Modules/StringProgress';\r\nimport { StringScroll } from './Scroll/Types/StringScroll';\r\nimport { StringScrollDefault } from './Scroll/Types/StringScrollDefault';\r\nimport { StringScrollDisable } from './Scroll/Types/StringScrollDisable';\r\nimport { StringScrollSmooth } from './Scroll/Types/StringScrollSmooth';\r\nimport { StringTypeSettings } from './Scroll/Types/StringTypeSettings';\r\nimport { StringSplit } from './Split/Modules/StringSplit';\r\nimport { StringFPS } from './StringFPS';\r\nimport { StringModule } from './StringModule';\r\nimport { StringFPSTracker } from './Tracker/StringFPSTracker';\r\nimport { StringPositionTracker } from './Tracker/StringPositionTracker';\r\nimport { StringAttribute } from './Utils/StringAttribute';\r\nimport { StringBoundingClientRect } from './Utils/StringBoundingClientRect';\r\nimport { StringData } from './Utils/StringData';\r\nimport { StringEvent } from './Utils/StringEvent';\r\nimport { StringLerp } from './Utils/StringLerp';\r\nimport { StringParser } from './Utils/StringParser';\r\nimport { StringPosition } from './Utils/StringPosition';\r\n\r\nfunction isTouchDevice() {\r\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\r\n}\r\n\r\nclass StringTune {\r\n private static i: StringTune;\r\n private modules: Array<IStringModule> = new Array<IStringModule>();\r\n private modulesUI: Array<IStringModule> = new Array<IStringModule>();\r\n private events: StringEvent = new StringEvent();\r\n private loop: StringFPS = new StringFPS();\r\n\r\n private onWheelBind: any;\r\n private onScrollBind: any;\r\n private onResizeBind: any;\r\n private onMouseMoveBind: any;\r\n\r\n private wW: number = 0;\r\n private wH: number = 0;\r\n\r\n private root: any;\r\n private window: any;\r\n\r\n private _virtualCursor: StringVirtualCursor = new StringVirtualCursor();\r\n private _lerp: StringLerp = new StringLerp();\r\n private _attribute: StringAttribute = new StringAttribute();\r\n private _boundingClientRect: StringBoundingClientRect = new StringBoundingClientRect();\r\n private _position: StringPosition = new StringPosition();\r\n\r\n private sEn: StringScroll;\r\n private sEnSmooth: StringScrollSmooth;\r\n private sEnDefault: StringScrollDefault;\r\n private sEnDisable: StringScrollDisable;\r\n\r\n private settings: StringTypeSettings;\r\n private data: StringData;\r\n\r\n protected objects: Map<string, StringObject> = new Map<string, StringObject>();\r\n\r\n protected connectQueue: Array<any> = new Array<any>();\r\n\r\n private globalId: number = 1;\r\n\r\n private _parser = new StringParser();\r\n\r\n get scrollDirection() {\r\n return this.data.sD;\r\n }\r\n\r\n set scrollDirection(scrollDirection: 'vertical' | 'horizontal') {\r\n this.data.sD = scrollDirection;\r\n\r\n this.sEn.scrollDirection = scrollDirection;\r\n this.sEnSmooth.scrollDirection = scrollDirection;\r\n this.sEnDefault.scrollDirection = scrollDirection;\r\n this.sEnDisable.scrollDirection = scrollDirection;\r\n\r\n if (scrollDirection == 'horizontal') {\r\n document.documentElement.classList.add('-horizontal');\r\n document.documentElement.classList.remove('-vertical');\r\n } else {\r\n document.documentElement.classList.add('-vertical');\r\n document.documentElement.classList.remove('-horizontal');\r\n }\r\n\r\n this.rebuild();\r\n this.initObjects();\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onChangeScrollDirection();\r\n });\r\n }\r\n get speedAccelerate() {\r\n return this.settings.speedAccelerate;\r\n }\r\n set speedAccelerate(speed: number) {\r\n this.settings.speedAccelerate = speed;\r\n }\r\n get speedDecelerate() {\r\n return this.settings.speedDecelerate;\r\n }\r\n set speedDecelerate(speed: number) {\r\n this.settings.speedDecelerate = speed;\r\n }\r\n\r\n get scrollPosition() {\r\n return this.data.c;\r\n }\r\n set scrollPosition(scrollPosition: number) {\r\n this.data.c = scrollPosition;\r\n this.data.t = scrollPosition;\r\n window.scrollTo(0, this.data.c);\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onScroll(this.data);\r\n });\r\n }\r\n set scrollContainer(container: any) {\r\n let isUpdateEvents = this.data.sC != null;\r\n if (isUpdateEvents) {\r\n this.data.sC.removeEventListener('scroll', this.onScrollBind);\r\n this.data.sC.removeEventListener('resize', this.onResizeBind);\r\n }\r\n this.sEn.scrollContainer = container;\r\n this.sEnSmooth.scrollContainer = container;\r\n this.sEnDefault.scrollContainer = container;\r\n this.sEnDisable.scrollContainer = container;\r\n this.data.sC = container;\r\n if (isUpdateEvents) {\r\n this.data.sC.addEventListener('scroll', this.onScrollBind);\r\n this.data.sC.addEventListener('resize', this.onResizeBind);\r\n }\r\n this.rebuild();\r\n this.initObjects();\r\n }\r\n\r\n private scrollMode: 'smooth' | 'disable' | 'default' = 'smooth';\r\n private mMode: 'disable' | 'default' = 'default';\r\n set scrollMobileMode(mobileMode: 'disable' | 'default') {\r\n this.mMode = mobileMode;\r\n this.updateModeParams();\r\n }\r\n private dMode: 'smooth' | 'disable' | 'default' = 'smooth';\r\n set scrollDesktopMode(desktopMode: 'smooth' | 'disable' | 'default') {\r\n this.dMode = desktopMode;\r\n this.updateModeParams();\r\n }\r\n private updateModeParams() {\r\n if (this.window.innerWidth < 1024 || isTouchDevice()) {\r\n this.scrollMode = this.mMode;\r\n } else {\r\n this.scrollMode = this.dMode;\r\n }\r\n switch (this.scrollMode) {\r\n case 'disable':\r\n this.data.sM = 'disable';\r\n this.sEn = this.sEnDisable;\r\n this.onChangeScrollParams();\r\n document.documentElement.style.overflow = 'hidden';\r\n break;\r\n case 'default':\r\n this.data.sM = 'default';\r\n this.sEn = this.sEnDefault;\r\n this.onChangeScrollParams();\r\n document.documentElement.style.overflow = 'auto';\r\n break;\r\n case 'smooth':\r\n this.data.sM = 'smooth';\r\n this.sEn = this.sEnSmooth;\r\n this.onChangeScrollParams();\r\n document.documentElement.style.overflow = 'auto';\r\n break;\r\n default:\r\n this.data.sM = 'smooth';\r\n this.sEn = this.sEnSmooth;\r\n this.onChangeScrollParams();\r\n document.documentElement.style.overflow = 'auto';\r\n break;\r\n }\r\n }\r\n\r\n private constructor() {\r\n this.root = document.body;\r\n this.window = window;\r\n\r\n this.settings = new StringTypeSettings();\r\n this.data = new StringData();\r\n this.settings.speedAccelerate = 0.13;\r\n this.settings.speedDecelerate = 0.04;\r\n\r\n this.sEnSmooth = new StringScrollSmooth(document, this.settings, this.data);\r\n this.sEnDefault = new StringScrollDefault(document, this.settings, this.data);\r\n this.sEnDisable = new StringScrollDisable(document, this.settings, this.data);\r\n\r\n this.sEn = this.sEnSmooth;\r\n this.scrollContainer = window;\r\n this.data.sC = this.window;\r\n\r\n this.data.sD = 'vertical';\r\n document.documentElement.classList.add('-vertical');\r\n\r\n this.onWheelBind = this.onWheelEvent.bind(this);\r\n this.onScrollBind = this.onScrollEvent.bind(this);\r\n this.onResizeBind = this.onResizeEvent.bind(this);\r\n this.onMouseMoveBind = this.onMouseMoveEvent.bind(this);\r\n this.loop.onFrame = () => {\r\n this.onUpdateEvent();\r\n };\r\n this.rebuild();\r\n }\r\n\r\n public static getInstance(): StringTune {\r\n if (!StringTune.i) {\r\n StringTune.i = new StringTune();\r\n }\r\n return StringTune.i;\r\n }\r\n\r\n public use(objectClass: typeof StringModule, settings: any = null) {\r\n const module = new objectClass(\r\n {\r\n data: this.data,\r\n lerp: this._lerp,\r\n attribute: this._attribute,\r\n boundingClientRect: this._boundingClientRect,\r\n position: this._position,\r\n virtualCursor: this._virtualCursor,\r\n events: this.events,\r\n },\r\n settings\r\n );\r\n\r\n if (module.type == 1) {\r\n this.modules.push(module);\r\n }\r\n if (module.type == 2) {\r\n this.modulesUI.push(module);\r\n }\r\n }\r\n public start(fps: number) {\r\n this.data.sC.addEventListener('scroll', this.onScrollBind);\r\n this.data.sC.addEventListener('resize', this.onResizeBind);\r\n\r\n this.root.addEventListener('wheel', this.onWheelBind, { passive: false });\r\n this.root.addEventListener('mousemove', this.onMouseMoveBind);\r\n\r\n const resizeObserver = new ResizeObserver((entries) => {\r\n Array.from(this.objects.values()).forEach((object) => {\r\n this.setupObject(object.el, object);\r\n });\r\n });\r\n resizeObserver.observe(document.body);\r\n\r\n this.loop.start(fps);\r\n document.documentElement.classList.add('-string');\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onStart();\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.onStart();\r\n });\r\n\r\n this.initObjects();\r\n this.initMutationObserver();\r\n }\r\n\r\n private onChangeScrollParams() {\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onChangeScrollParams();\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.onChangeScrollParams();\r\n });\r\n }\r\n\r\n private initObjects() {\r\n document.querySelectorAll('[string]').forEach((element) => {\r\n this.addObject(element as any);\r\n });\r\n document.querySelectorAll('[string-copy-from]').forEach((element) => {\r\n let connectTargetId = this._attribute.process(element, 'string-copy-from');\r\n if (connectTargetId != null && this.objects.has(connectTargetId)) {\r\n let connectTargetObject = this.objects.get(connectTargetId);\r\n if (connectTargetObject != null) {\r\n connectTargetObject.connects.push(element as any);\r\n }\r\n }\r\n });\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onResize();\r\n module.onScroll(this.data);\r\n module.onUpdate(this.data);\r\n });\r\n }\r\n\r\n public destroy() {\r\n this.window.removeEventListener('scroll', this.onScrollBind);\r\n this.root.removeEventListener('wheel', this.onScrollBind);\r\n this.window.removeEventListener('resize', this.onResizeBind);\r\n this.root.removeEventListener('mousemove', this.onMouseMoveBind);\r\n this.loop.stop();\r\n this.modules.forEach((module: IStringModule) => {\r\n module.destructor();\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.destructor();\r\n });\r\n }\r\n\r\n public on(key: 'scroll' | 'progress' | 'intersection' | 'lerp' | 'inview' | 'cursor', event: any, id: string = '') {\r\n switch (key) {\r\n case 'scroll':\r\n this.events.on(`scroll`, event);\r\n break;\r\n case 'progress':\r\n this.events.on(`progress_${id}`, event);\r\n break;\r\n case 'lerp':\r\n this.events.on(`lerp`, event);\r\n break;\r\n case 'intersection':\r\n this.events.on(`intersection_${id}`, event);\r\n break;\r\n case 'inview':\r\n this.events.on(`inview_${id}`, event);\r\n break;\r\n case 'cursor':\r\n this.events.on(`cursor`, event);\r\n break;\r\n }\r\n }\r\n public off(key: 'scroll' | 'progress' | 'intersection' | 'lerp' | 'inview' | 'cursor', event: any, id: string = '') {\r\n switch (key) {\r\n case 'scroll':\r\n this.events.off(`scroll`, event);\r\n break;\r\n case 'progress':\r\n this.events.off(`progress_${id}`, event);\r\n break;\r\n case 'lerp':\r\n this.events.off(`lerp`, event);\r\n break;\r\n case 'intersection':\r\n this.events.off(`intersection_${id}`, event);\r\n break;\r\n case 'inview':\r\n this.events.off(`inview_${id}`, event);\r\n break;\r\n case 'cursor':\r\n this.events.off(`cursor`, event);\r\n break;\r\n }\r\n }\r\n\r\n private defaultSettings: any = {\r\n stringOffsetStart: '0%',\r\n stringOffsetEnd: '0%',\r\n\r\n stringEnterEl: 'top',\r\n stringExitEl: 'bottom',\r\n stringEnterVp: 'bottom',\r\n stringExitVp: 'top',\r\n\r\n stringInviewTop: '0%',\r\n stringInviewBottom: '0%',\r\n\r\n stringKey: '--progress',\r\n\r\n stringStrength: 0.3,\r\n stringRadius: 150,\r\n stringLerp: 0.2,\r\n stringParallaxBias: 0.0,\r\n stringParallax: 0.2,\r\n };\r\n\r\n public setupSettings(settings: any) {\r\n if (settings['string-offset-top'] != null) {\r\n this.defaultSettings.stringOffsetStart = settings['string-offset-top'];\r\n }\r\n if (settings['string-offset-bottom'] != null) {\r\n this.defaultSettings.stringOffsetEnd = settings['string-offset-bottom'];\r\n }\r\n if (settings['string-offset-left'] != null) {\r\n this.defaultSettings.stringOffsetStart = settings['string-offset-left'];\r\n }\r\n if (settings['string-offset-right'] != null) {\r\n this.defaultSettings.stringOffsetEnd = settings['string-offset-right'];\r\n }\r\n\r\n if (settings[`string-inview-top`] != null) {\r\n this.defaultSettings.stringInviewTop = settings[`string-inview-top`];\r\n }\r\n if (settings[`string-inview-left`] != null) {\r\n this.defaultSettings.stringInviewTop = settings[`string-inview-left`];\r\n }\r\n if (settings[`string-inview-bottom`] != null) {\r\n this.defaultSettings.stringInviewBottom = settings['string-inview-bottom'];\r\n }\r\n if (settings[`string-inview-right`] != null) {\r\n this.defaultSettings.stringInviewBottom = settings['string-inview-right'];\r\n }\r\n\r\n if (settings['string-enter-el'] != null) {\r\n this.defaultSettings.stringEnterEl = settings['string-enter-el'];\r\n }\r\n if (settings['string-enter-vp'] != null) {\r\n this.defaultSettings.stringEnterVp = settings['string-enter-vp'];\r\n }\r\n if (settings['string-exit-el'] != null) {\r\n this.defaultSettings.stringExitEl = settings['string-exit-el'];\r\n }\r\n if (settings['string-exit-vp'] != null) {\r\n this.defaultSettings.stringExitVp = settings['string-exit-vp'];\r\n }\r\n if (settings['string-key'] != null) {\r\n this.defaultSettings.stringKey = settings['string-key'];\r\n }\r\n\r\n if (settings['string-strength'] != null) {\r\n this.defaultSettings.stringStrength = settings['string-strength'];\r\n }\r\n if (settings['string-radius'] != null) {\r\n this.defaultSettings.stringRadius = settings['string-radius'];\r\n }\r\n if (settings['string-lerp'] != null) {\r\n this.defaultSettings.stringLerp = settings['string-lerp'];\r\n }\r\n\r\n if (settings['string-parallax-bias'] != null) {\r\n this.defaultSettings.stringParallaxBias = settings['string-parallax-bias'];\r\n }\r\n if (settings['string-parallax'] != null) {\r\n this.defaultSettings.stringParallax = settings['string-parallax'];\r\n }\r\n }\r\n\r\n protected setupObject(el: HTMLElement, object: StringObject) {\r\n object.showObserver?.disconnect();\r\n object.progressObserver?.disconnect();\r\n object.inviewObserver?.disconnect();\r\n\r\n let r = this._boundingClientRect.process(el);\r\n let rW = r.width / this.data.scsW;\r\n let rH = r.height / this.data.scsH;\r\n\r\n let startElementPosition = this._attribute.process(el, `string-enter-el`) || this.defaultSettings.stringEnterEl;\r\n let startSourcePosition = this._attribute.process(el, `string-enter-vp`) || this.defaultSettings.stringEnterVp;\r\n let endElementPosition = this._attribute.process(el, `string-exit-el`) || this.defaultSettings.stringExitEl;\r\n let endSourcePosition = this._attribute.process(el, `string-exit-vp`) || this.defaultSettings.stringExitVp;\r\n\r\n object.inviewTop =\r\n this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-inview-top`,\r\n this._attribute.process(el, `string-inview-left`, this.defaultSettings.stringInviewTop)\r\n ),\r\n el,\r\n this.data.sD == 'vertical' ? rH : rW,\r\n 16\r\n ) * -1;\r\n object.inviewBottom =\r\n this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-inview`,\r\n this._attribute.process(\r\n el,\r\n `string-inview-bottom`,\r\n this._attribute.process(el, `string-inview-right`, this.defaultSettings.stringInviewBottom)\r\n )\r\n ),\r\n el,\r\n this.data.sD == 'vertical' ? rH : rW,\r\n 16\r\n ) * -1;\r\n //console.log(r);\r\n\r\n object.selfDisable = this._attribute.process(el, `string-self-disable`) == null ? false : true;\r\n object.abs = this._attribute.process(el, `string-abs`) == null ? false : true;\r\n\r\n let targetQuery = this._attribute.process(el, `string-cursor-target`);\r\n\r\n if (targetQuery != null) {\r\n object.cursorTarget = document.querySelector(`[string-cursor-content=\"${targetQuery}\"]`);\r\n }\r\n\r\n object.id = this._attribute.process(el, `string-id`, `string-${this.globalId}`);\r\n object.key = this._attribute.process(el, `string-key`, this.defaultSettings.stringKey);\r\n\r\n object.strength = this._attribute.process(el, 'string-strength', this.defaultSettings.stringStrength);\r\n object.radius = this._attribute.process(el, 'string-radius', this.defaultSettings.stringRadius);\r\n object.lerp = this._attribute.process(el, 'string-lerp', this.defaultSettings.stringLerp);\r\n\r\n let parallaxPosition = this._attribute.process(el, 'string-parallax-bias', this.defaultSettings.stringParallaxBias);\r\n object.parallaxPositionStart = -0.5 + 0.5 * parallaxPosition;\r\n object.parallaxPositionEnd = 0.5 + 0.5 * (1 - parallaxPosition);\r\n\r\n el.setAttribute(`string-id`, object.id);\r\n if (this.data.sD == 'vertical') {\r\n object.size = rH;\r\n } else {\r\n object.size = rW;\r\n }\r\n\r\n object.oStart = this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-offset-top`,\r\n this._attribute.process(el, `string-offset-left`, this.defaultSettings.stringOffsetStart)\r\n ),\r\n el,\r\n this.data.wS,\r\n 16\r\n );\r\n object.oEnd = this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-offset-bottom`,\r\n this._attribute.process(el, `string-offset-right`, this.defaultSettings.stringOffsetEnd)\r\n ),\r\n el,\r\n this.data.wS,\r\n 16\r\n );\r\n\r\n let observerStart = this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-offset-top`,\r\n this._attribute.process(el, `string-offset-left`, this.defaultSettings.stringOffsetStart)\r\n ),\r\n el,\r\n this.data.wS,\r\n 16\r\n );\r\n let observerEnd = this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-offset-bottom`,\r\n this._attribute.process(el, `string-offset-right`, this.defaultSettings.stringOffsetEnd)\r\n ),\r\n el,\r\n this.data.wS,\r\n 16\r\n );\r\n\r\n let stringModuleKeys = this._attribute.process(object.el, 'string', '').split('|');\r\n object.factor = 0;\r\n if (stringModuleKeys.includes('parallax')) {\r\n observerStart = 0;\r\n observerEnd = 0;\r\n object.oStart = 0;\r\n object.oEnd = 0;\r\n object.factor = this._attribute.process(el, `string-parallax`, this.defaultSettings.stringParallax);\r\n object.oStart += object.factor * this.data.wS;\r\n object.oEnd += object.factor * this.data.wS;\r\n }\r\n\r\n object.repeat = this._attribute.process(el, `string-repeat`) == null ? false : true;\r\n object.sElPos = startElementPosition;\r\n object.sScrPos = startSourcePosition;\r\n object.eElPos = endElementPosition;\r\n object.eScrPos = endSourcePosition;\r\n\r\n object.halfWidth = rW / 2;\r\n object.halfHeight = rH / 2;\r\n\r\n let windowSize = this.data.wS;\r\n if (this.data.sD == 'vertical') {\r\n let startPos = this._position.process(el, this.data.sC).top / this.data.scsH;\r\n object.start = startPos;\r\n object.end = startPos + rH;\r\n } else {\r\n let startPos = this._position.process(el, this.data.sC).left / this.data.scsW;\r\n object.start = startPos;\r\n object.end = startPos + rW;\r\n }\r\n object.calculatePositions(windowSize);\r\n\r\n let connectItems = this.connectQueue.filter((connectQueueItem: any) => {\r\n return connectQueueItem.id == object.id;\r\n });\r\n this.connectQueue = this.connectQueue.filter((connectQueueItem: any) => {\r\n return connectQueueItem.id != object.id;\r\n });\r\n\r\n connectItems.forEach((connectItem) => {\r\n object.connects.push(connectItem.element);\r\n });\r\n\r\n let callbackProgress = (es: any) => {\r\n es.forEach((e: any) => {\r\n if (e.isIntersecting) {\r\n if (object.active == false) {\r\n this.events.emit(`activate_object_${object.id}`, true);\r\n object.enter();\r\n }\r\n } else {\r\n if (object.active == true) {\r\n this.events.emit(`activate_object_${object.id}`, false);\r\n object.leave();\r\n }\r\n }\r\n });\r\n };\r\n let callbackInview = (es: any) => {\r\n es.forEach((e: any) => {\r\n if (e.isIntersecting) {\r\n this.events.emit(`inview_${object.id}`, true);\r\n object.show();\r\n } else {\r\n this.events.emit(`inview_${object.id}`, false);\r\n object.hide();\r\n }\r\n });\r\n };\r\n let callbackIntersection = (es: any) => {\r\n es.forEach((e: any) => {\r\n if (e.isIntersecting) {\r\n this.events.emit(`intersection_${object.id}`, true);\r\n } else {\r\n this.events.emit(`intersection_${object.id}`, false);\r\n }\r\n });\r\n };\r\n\r\n let optionsProgress: any;\r\n let optionsInview: any;\r\n if (this.data.sD == 'vertical') {\r\n optionsProgress = {\r\n root: null,\r\n rootMargin: `${observerStart + this.data.wS}px 0px ${observerEnd + this.data.wS}px 0px`,\r\n threshold: 0.001,\r\n };\r\n optionsInview = {\r\n root: null,\r\n rootMargin: `${observerStart + object.inviewTop}px 0px ${observerEnd + object.inviewBottom}px 0px`,\r\n threshold: 0.001,\r\n };\r\n } else {\r\n optionsProgress = {\r\n root: null,\r\n rootMargin: `0px ${observerStart + this.data.wS}px 0px ${observerEnd + this.data.wS}px`,\r\n threshold: 0.001,\r\n };\r\n optionsInview = {\r\n root: null,\r\n rootMargin: `0px ${observerStart + object.inviewTop}px 0px ${observerEnd + object.inviewBottom}px`,\r\n threshold: 0.001,\r\n };\r\n }\r\n\r\n let optionsIntersection = {\r\n root: null,\r\n rootMargin: `0px 0px 0px 0px`,\r\n threshold: 0.001,\r\n };\r\n\r\n let obProgress = new IntersectionObserver(callbackProgress, optionsProgress);\r\n let obIntersection = new IntersectionObserver(callbackIntersection, optionsIntersection);\r\n let obInview = new IntersectionObserver(callbackInview, optionsInview);\r\n obProgress.observe(el);\r\n obIntersection.observe(el);\r\n obInview.observe(el);\r\n\r\n object.showObserver = obIntersection;\r\n object.progressObserver = obProgress;\r\n object.inviewObserver = obInview;\r\n }\r\n\r\n addObject(el: HTMLElement) {\r\n let isInit = this._attribute.process(el, 'string-inited');\r\n let object: any;\r\n if (isInit == null) {\r\n object = new StringObject(el);\r\n } else {\r\n if (this.objects.has(this._attribute.process(el, 'string-id'))) {\r\n object = this.objects.get(this._attribute.process(el, 'string-id'));\r\n } else {\r\n object = new StringObject(el);\r\n }\r\n }\r\n el.setAttribute(`string-inited`, '');\r\n this.setupObject(el, object);\r\n this.modules.forEach((module: IStringModule) => {\r\n if (module.tryConnect(object)) {\r\n module.connect(object);\r\n }\r\n });\r\n this.objects.set(object.id, object);\r\n this.globalId++;\r\n }\r\n\r\n public removeObject(id: string) {\r\n let removedObject = this.objects.get(id);\r\n if (removedObject?.showObserver != null) {\r\n removedObject?.showObserver.disconnect();\r\n }\r\n if (removedObject?.progressObserver != null) {\r\n removedObject?.progressObserver.disconnect();\r\n }\r\n if (removedObject?.inviewObserver != null) {\r\n removedObject?.inviewObserver.disconnect();\r\n }\r\n this.objects.delete(id);\r\n removedObject?.el.removeAttribute(`string-inited`);\r\n removedObject?.leave();\r\n removedObject = undefined;\r\n }\r\n\r\n private onMouseMoveEvent(e: MouseEvent) {\r\n this._virtualCursor.onMouseMove(e);\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onMouseMove(e);\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.onMouseMove(e);\r\n });\r\n }\r\n private onWheelEvent(e: WheelEvent) {\r\n this.sEn.onWheel(e);\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onWheel(e);\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.onWheel(e);\r\n });\r\n }\r\n private onScrollEvent(e: Event) {\r\n this.sEn.onScroll(e);\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onScroll(this.data);\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.onScroll(this.data);\r\n });\r\n this.events.emit(`lerp`, this.data.v);\r\n this.events.emit(`scroll`, this.data.c);\r\n }\r\n private onUpdateEvent() {\r\n this._virtualCursor.onUpdate();\r\n this.sEn.onUpdate();\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onUpdate(this.data);\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.onUpdate(this.data);\r\n });\r\n }\r\n private onResizeEvent() {\r\n let newWW = 0;\r\n let newWH = 0;\r\n try {\r\n let rect = this.sEn.scrollContainer.getBoundingClientRect();\r\n newWW = rect.width;\r\n newWH = rect.height;\r\n } catch (error) {\r\n newWW = this.sEn.scrollContainer.innerWidth;\r\n newWH = this.sEn.scrollContainer.innerHeight;\r\n }\r\n if (this.data.sD == 'vertical') {\r\n this.data.bS = this.data.psH - newWH;\r\n this.data.wS = newWH;\r\n } else {\r\n this.data.bS = this.data.psW - newWW;\r\n this.data.wS = newWW;\r\n }\r\n if (this.wW != newWW || this.window.innerWidth > 1024) {\r\n this.rebuild();\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onResize();\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.onResize();\r\n });\r\n }\r\n this.wW = newWW;\r\n this.wH = newWH;\r\n }\r\n private initMutationObserver() {\r\n const observer = new MutationObserver((mutations) => {\r\n mutations.forEach((mutation) => {\r\n if (mutation.type === 'childList') {\r\n if (mutation.addedNodes.length > 0) {\r\n mutation.addedNodes.forEach((addedNode) => {\r\n if (addedNode.nodeType === Node.ELEMENT_NODE) {\r\n (addedNode as Element).querySelectorAll('[string]:not([string-inited])').forEach((element) => {\r\n this.addObject(element as any);\r\n let connectTargetId = this._attribute.process(element, 'string-copy-from');\r\n if (connectTargetId != null) {\r\n if (this.objects.has(connectTargetId)) {\r\n let connectTargetObject = this.objects.get(connectTargetId);\r\n if (connectTargetObject != null) {\r\n connectTargetObject.connects.push(element as any);\r\n }\r\n } else {\r\n this.connectQueue.push({\r\n id: connectTargetId,\r\n element,\r\n });\r\n }\r\n }\r\n });\r\n }\r\n });\r\n }\r\n if (mutation.removedNodes.length > 0) {\r\n mutation.removedNodes.forEach((removedNode) => {\r\n if (removedNode.nodeType === Node.ELEMENT_NODE) {\r\n (removedNode as Element).querySelectorAll('[string]').forEach((element) => {\r\n let removeId = element.getAttribute('string-id');\r\n let connectTargetId = this._attribute.process(element, 'string-copy-from');\r\n if (connectTargetId != null) {\r\n this.connectQueue = this.connectQueue.filter((connectQueueItem: any) => {\r\n return connectQueueItem.id != connectTargetId;\r\n });\r\n }\r\n if (removeId != null) {\r\n this.removeObject(removeId);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n if (mutation.addedNodes.length > 0 || mutation.removedNodes.length > 0) {\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onRebuild();\r\n });\r\n }\r\n }\r\n });\r\n });\r\n const config = {\r\n attributes: false,\r\n childList: true,\r\n subtree: true,\r\n };\r\n observer.observe(document.body, config);\r\n }\r\n private rebuild() {\r\n function parseTransform(el: any) {\r\n let transform = window.getComputedStyle(el).transform;\r\n return transform\r\n .split(/\\(|,|\\)/)\r\n .slice(1, -1)\r\n .map(function (v) {\r\n return parseFloat(v);\r\n });\r\n }\r\n\r\n try {\r\n let transformContainer: any = parseTransform(this.data.sC);\r\n this.data.scsW = transformContainer[0];\r\n this.data.scsH = transformContainer[3];\r\n } catch (error) {\r\n this.data.scsW = 1;\r\n this.data.scsH = 1;\r\n }\r\n\r\n try {\r\n let rect = this.data.sC.getBoundingClientRect();\r\n this.wW = rect.width / this.data.scsW;\r\n this.wH = rect.height / this.data.scsH;\r\n } catch (error) {\r\n this.wW = this.data.sC.innerWidth;\r\n this.wH = this.data.sC.innerHeight;\r\n }\r\n\r\n if (this.wW < 1024 || isTouchDevice()) {\r\n this.scrollMode = this.mMode;\r\n } else {\r\n this.scrollMode = this.dMode;\r\n }\r\n\r\n let b = document.body,\r\n h = document.documentElement;\r\n\r\n this.data.psW = this.data.sC.scrollWidth;\r\n this.data.psH = this.data.sC.scrollHeight;\r\n if (this.data.psW == undefined) {\r\n this.data.psW = Math.max(b.scrollWidth, b.offsetWidth, h.clientWidth, h.scrollWidth, h.offsetWidth);\r\n }\r\n if (this.data.psH == undefined) {\r\n this.data.psH = Math.max(b.scrollHeight, b.offsetHeight, h.clientHeight, h.scrollHeight, h.offsetHeight);\r\n }\r\n\r\n if (this.data.sD == 'vertical') {\r\n this.data.bS = this.data.psH - this.wH;\r\n this.data.wS = this.wH;\r\n } else {\r\n this.data.bS = this.data.psW - this.wW;\r\n this.data.wS = this.wW;\r\n }\r\n\r\n this.data.hnwS = this.data.wS * -0.5;\r\n\r\n this.updateModeParams();\r\n }\r\n}\r\n\r\n\r\n \r\nexport {\r\n StringTune as default,\r\n StringCursor, StringDisplacement, StringFPSTracker, StringLazy, StringLoading, StringMagnetic, StringParallax, StringPositionTracker, StringProgress, StringResponsive, StringScrollbar, StringSplit, StringTune as StringTune, StringVideoAutoplay\r\n};\r\n\r\n"],"names":["root","factory","exports","module","define","amd","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","StringModule","type","_type","constructor","visitor","settings","objectsMap","Map","objects","Array","htmlKey","data","lerp","attribute","boundingClientRect","position","virtualCursor","events","destructor","onChangeScrollParams","tryConnect","object","stringModuleKeys","process","el","split","forEach","connect","onConnect","addObject","id","set","from","map","name","removeObject","delete","onStart","onUpdate","onResize","onRebuild","onScroll","onMouseMove","e","onWheel","onChangeDevice","onChangeScrollDirection","onMutationObserver","added","removed","StringLazy","super","document","querySelectorAll","element","getImageSize","getAttribute","classList","add","src","addEventListener","url","Promise","resolve","reject","xhr","XMLHttpRequest","open","responseType","onload","status","buffer","response","blob","Blob","img","Image","style","aspectRatio","width","height","URL","revokeObjectURL","onerror","Error","createObjectURL","setRequestHeader","send","StringLoading","loadingTimeout","timeout","setTimeout","documentElement","StringVideoAutoplay","videoElement","videoSrc","started","tagName","toLowerCase","setAttribute","muted","tryPlay","once","load","console","warn","play","catch","err","then","StringCursor","lerpFactor","oldX","oldY","enterObjectsMap","enterObjects","cursor","querySelector","smoothX","smoothY","cursorData","lerpX","lerpY","x","y","emit","setProperty","isMouseMove","rect","getBoundingClientRect","offsetX","calculateOffset","left","offsetY","top","mouseX","mouseY","setMouseCoordinates","halfWidth","halfHeight","onMouseEnterEventBind","onMouseMoveEventBind","onMouseLeaveEventBind","cursorTarget","event","removeEventListener","remove","onEnter","onLeave","selfDisable","toFixed","connects","mousePos","size","StringMagnetic","strength","radius","elementCenterX","elementCenterY","distX","clientX","distY","clientY","distance","Math","sqrt","magneticTargetX","magneticTargetY","isMagneting","magneticX","magneticY","toString","StringLerp","start","end","amt","StringVirtualCursor","_lF","_x","_y","_lerpX","_lerpY","targetX","targetY","floor","tS","bS","lS","rS","StringObject","oStart","oEnd","startPos","endPos","differencePos","factor","inviewTop","inviewBottom","sElPos","sScrPos","eElPos","eScrPos","parallaxPositionStart","parallaxPositionEnd","showObserver","progressObserver","inviewObserver","repeat","active","abs","modules","enter","leave","show","hide","push","calculatePositions","windowSize","DeviceType","StringResponsiveQueryDevice","config","min","undefined","max","enable","setEnable","setRange","mediaQuery","query","StringResponsive","queries","Mobile","Tablet","Laptop","Desktop","matchMedias","window","matchMedia","mobile","tablet","laptop","desktop","updateElements","isMobileMedia","matches","isTabletMedia","isLaptopMedia","isDesktopMedia","showElement","hasAttribute","display","StringScrollbarHorizontal","scrollbar","thumb","isDragging","startY","startScrollPosition","contentSize","psH","visibleSize","wS","thumbSize","updateThumb","contentHeight","visibleHeight","c","mouseDownEvent","mouseMoveEvent","deltaY","newScrollPosition","t","scrollTo","StringScrollbarVertical","startCoordinate","psW","contentWidth","visibleWidth","deltaX","StringScrollbar","scrollMode","mouseUpEventBind","mouseUpEvent","bind","mouseDownEventBind","mouseMoveEventBind","createScrollbar","addCustomStyles","showScrollbar","hideScrollbar","scrollbarState","sM","sD","scrollbarStateVertical","scrollbarStateHorizontal","createElement","textContent","head","appendChild","body","userSelect","scrollTimeout","clearTimeout","StringDisplacement","oldLerp","v","StringParallax","setupParallax","progress","transformCompute","transform","onScrollDesktopEvent","onScrollMobileEvent","onScrollEvent","parallaxPosition","innerWidth","StringProgress","setUpObject","currentTop","StringScroll","isProg","isParallaxEnabled","vT","onCalcUpdate","scrollContainer","_scrollDirection","d","scrollDirection","StringScrollDefault","animateC","scrollTop","StringScrollDisable","preventDefault","StringScrollSmooth","isScroll","isScrollbarManipulation","speed","newC","ceil","StringTypeSettings","sC","sA","speedAccelerate","speedDecelerate","updateScrollParams","StringSplit","splitOptions","parseSplitOptions","innerHTML","html","contains","attributeValue","options","line","word","char","charLine","charWord","wordLine","part","match","prefix","option","params","parseParam","result","align","param","startsWith","random","parseInt","includes","elementRoot","text","length","decodeHtmlEntity","words","globalCharIndex","globalWordIndex","totalChars","replace","tempSpan","compStyles","getComputedStyle","fontFamily","fontSize","letterSpacing","lineHeight","fontWeight","virtualLines","virtualLine","currentLineWidth","wordIndex","wordWidth","offsetWidth","virtualWordSpan","chars","charIndex","virtualCharSpan","hasLineOptions","addedWordsCount","i","appendVirtualLineToDOM","wordSpan","charSpan","applyOptions","removeChild","lineIndex","totalWords","lineSpan","lineCharIndex","totalLineChars","span","optionArray","globalIndex","localIndex","parentLength","optionIndex","index","calculateIndex","variableName","generateVariableName","String","createSpaceSpan","spaceSpan","str","StringFPS","isAnimationStarted","requestAnimationId","onFrame","fps","fpsInterval","Date","now","animate","stop","cancelAnimationFrame","requestAnimationFrame","elapsed","StringFPSTracker","callCount","createDisplayElement","displayElement","bottom","right","backgroundColor","border","zIndex","intervalId","setInterval","clearInterval","StringPositionTracker","dirSymbol","StringAttribute","n","StringBoundingClientRect","StringData","cF","hnwS","scsW","scsH","StringEvent","eventsByKey","on","has","updateAllEvents","off","ea","filter","h","all","values","listOfEvents","StringParser","parseSingle","wH","baseRem","pV","isNegative","slice","offsetHeight","endsWith","parseFloat","StringPosition","container","br","error","er","transformArr","parseTransform","det","nullifyTransforms","isTouchDevice","navigator","maxTouchPoints","StringTune","sEn","sEnSmooth","sEnDefault","sEnDisable","rebuild","initObjects","scrollPosition","isUpdateEvents","onScrollBind","onResizeBind","scrollMobileMode","mobileMode","mMode","updateModeParams","scrollDesktopMode","desktopMode","dMode","overflow","modulesUI","loop","wW","_virtualCursor","_lerp","_attribute","_boundingClientRect","_position","connectQueue","globalId","_parser","defaultSettings","stringOffsetStart","stringOffsetEnd","stringEnterEl","stringExitEl","stringEnterVp","stringExitVp","stringInviewTop","stringInviewBottom","stringKey","stringStrength","stringRadius","stringLerp","stringParallaxBias","stringParallax","onWheelBind","onWheelEvent","onResizeEvent","onMouseMoveBind","onMouseMoveEvent","onUpdateEvent","getInstance","use","objectClass","passive","ResizeObserver","entries","setupObject","observe","initMutationObserver","connectTargetId","connectTargetObject","destroy","setupSettings","disconnect","r","rW","rH","startElementPosition","startSourcePosition","endElementPosition","endSourcePosition","targetQuery","observerStart","observerEnd","optionsProgress","optionsInview","connectItems","connectQueueItem","connectItem","rootMargin","threshold","obProgress","IntersectionObserver","es","isIntersecting","obIntersection","obInview","isInit","removedObject","removeAttribute","newWW","newWH","innerHeight","MutationObserver","mutations","mutation","addedNodes","addedNode","nodeType","Node","ELEMENT_NODE","removedNodes","removedNode","removeId","attributes","childList","subtree","transformContainer","b","scrollWidth","scrollHeight","clientWidth","clientHeight"],"sourceRoot":""}
|
1
|
+
{"version":3,"file":"index.js","mappings":"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","sources":["webpack://StringTune/webpack/universalModuleDefinition","webpack://StringTune/webpack/bootstrap","webpack://StringTune/webpack/runtime/define property getters","webpack://StringTune/webpack/runtime/hasOwnProperty shorthand","webpack://StringTune/webpack/runtime/make namespace object","webpack://StringTune/./src/StringModule.ts","webpack://StringTune/./src/Loading/Modules/StringLazy.ts","webpack://StringTune/./src/Loading/Modules/StringLoading.ts","webpack://StringTune/./src/Loading/Modules/StringVideoAutoplay.ts","webpack://StringTune/./src/Mouse/Modules/StringCursor.ts","webpack://StringTune/./src/Mouse/Modules/StringMagnetic.ts","webpack://StringTune/./src/Utils/StringLerpCalc.ts","webpack://StringTune/./src/Mouse/StringVirtualCursor.ts","webpack://StringTune/./src/Objects/StringObject.ts","webpack://StringTune/./src/Screen/StringResponsive.ts","webpack://StringTune/./src/Scroll/Modules/Scrollbar/StringScrollbarHorizontal.ts","webpack://StringTune/./src/Scroll/Modules/Scrollbar/StringScrollbarVertical.ts","webpack://StringTune/./src/Scroll/Modules/Scrollbar/StringScrollbar.ts","webpack://StringTune/./src/Scroll/Modules/StringGlide.ts","webpack://StringTune/./src/Scroll/Modules/StringLerp.ts","webpack://StringTune/./src/Scroll/Modules/StringParallax.ts","webpack://StringTune/./src/Scroll/Modules/StringProgress.ts","webpack://StringTune/./src/Scroll/Types/StringScroll.ts","webpack://StringTune/./src/Scroll/Types/StringScrollDefault.ts","webpack://StringTune/./src/Scroll/Types/StringScrollDisable.ts","webpack://StringTune/./src/Scroll/Types/StringScrollSmooth.ts","webpack://StringTune/./src/Scroll/Types/StringTypeSettings.ts","webpack://StringTune/./src/Split/Modules/StringSplit.ts","webpack://StringTune/./src/StringFPS.ts","webpack://StringTune/./src/Tracker/StringDelayLerpTracker.ts","webpack://StringTune/./src/Tracker/StringFPSTracker.ts","webpack://StringTune/./src/Tracker/StringLerpTracker.ts","webpack://StringTune/./src/Tracker/StringPositionTracker.ts","webpack://StringTune/./src/Utils/StringAttribute.ts","webpack://StringTune/./src/Utils/StringBoundingClientRect.ts","webpack://StringTune/./src/Utils/StringData.ts","webpack://StringTune/./src/Utils/StringEvent.ts","webpack://StringTune/./src/Utils/StringParser.ts","webpack://StringTune/./src/Utils/StringPosition.ts","webpack://StringTune/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"StringTune\"] = factory();\n\telse\n\t\troot[\"StringTune\"] = factory();\n})(this, () => {\nreturn ","// 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))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { IStringModule } from './IStringModule';\r\nimport { StringVirtualCursor } from './Mouse/StringVirtualCursor';\r\nimport { StringObject } from './Objects/StringObject';\r\nimport { StringFPS } from './StringFPS';\r\nimport { StringAttribute } from './Utils/StringAttribute';\r\nimport { StringBoundingClientRect } from './Utils/StringBoundingClientRect';\r\nimport { StringData } from './Utils/StringData';\r\nimport { StringEvent } from './Utils/StringEvent';\r\nimport { StringLerpCalc } from './Utils/StringLerpCalc';\r\nimport { StringPosition } from './Utils/StringPosition';\r\n\r\nexport class StringModule implements IStringModule {\r\n lerp: StringLerpCalc;\r\n attribute: StringAttribute;\r\n boundingClientRect: StringBoundingClientRect;\r\n position: StringPosition;\r\n events: StringEvent;\r\n data: StringData;\r\n virtualCursor: StringVirtualCursor;\r\n loop: StringFPS;\r\n settings: any = null;\r\n protected objectsMap: Map<string, StringObject> = new Map<string, StringObject>();\r\n protected objects: Array<StringObject> = new Array<StringObject>();\r\n protected htmlKey: string = '';\r\n protected _type: number = 1;\r\n public get type() {\r\n return this._type;\r\n }\r\n constructor(visitor: any, settings: any = null) {\r\n this.data = visitor.data;\r\n this.lerp = visitor.lerp;\r\n this.attribute = visitor.attribute;\r\n this.boundingClientRect = visitor.boundingClientRect;\r\n this.position = visitor.position;\r\n this.virtualCursor = visitor.virtualCursor;\r\n this.events = visitor.events;\r\n this.loop = visitor.loop;\r\n this.settings = settings;\r\n }\r\n onScrollStart(): void { }\r\n onScrollStop(): void { }\r\n onChangeDirection(): void { }\r\n \r\n destructor() { }\r\n \r\n onChangeScrollParams(): void {}\r\n\r\n tryConnect(object: StringObject): boolean {\r\n let stringModuleKeys = this.attribute.process(object.el, 'string', '').split('|');\r\n\r\n let value = false;\r\n stringModuleKeys.forEach((key: string) => {\r\n if (key == this.htmlKey) {\r\n value = true;\r\n }\r\n });\r\n return value;\r\n }\r\n connect(object: StringObject) {\r\n object.connect(this);\r\n this.onConnect(object);\r\n }\r\n addObject(id: string, object: StringObject) {\r\n this.objectsMap.set(id, object);\r\n this.objects = Array.from(this.objectsMap).map(([name, value]) => value);\r\n }\r\n removeObject(id: string) {\r\n this.objectsMap.delete(id);\r\n this.objects = Array.from(this.objectsMap).map(([name, value]) => value);\r\n }\r\n\r\n onStart(): void {}\r\n onUpdate( data: StringData): void {}\r\n onResize(): void {}\r\n onConnect(object: StringObject): void {}\r\n onRebuild(): void {}\r\n onScroll(data: StringData): void {}\r\n onMouseMove(e: MouseEvent): void {}\r\n onWheel(e: WheelEvent): void {}\r\n onChangeDevice(): void {}\r\n onChangeScrollDirection(): void {}\r\n onMutationObserver(added: NodeList, removed: NodeList): void {}\r\n}\r\n","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\n\r\nexport class StringLazy extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'lazy';\r\n }\r\n\r\n onStart(): void {\r\n const imagesEls = document.querySelectorAll('img[string-lazy]');\r\n imagesEls.forEach((element: any) => {\r\n this.getImageSize(element, element.getAttribute('string-lazy'));\r\n element.classList.add(`lazyLoad`);\r\n element.src = element.getAttribute('string-lazy') as any;\r\n element.addEventListener('load', () => {\r\n element.classList.add(`-loaded`);\r\n });\r\n });\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n const element = object.el as HTMLVideoElement;\r\n }\r\n\r\n private getImageSize(element: HTMLElement, url: string) {\r\n return new Promise((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, true);\r\n xhr.responseType = 'arraybuffer';\r\n xhr.onload = () => {\r\n if (xhr.status === 206 || xhr.status === 200) {\r\n const buffer = xhr.response;\r\n const blob = new Blob([buffer]);\r\n const img = new Image();\r\n img.onload = () => {\r\n element.style.aspectRatio = `${img.width} / ${img.height}`;\r\n resolve({ width: img.width, height: img.height });\r\n URL.revokeObjectURL(img.src);\r\n };\r\n img.onerror = () => {\r\n reject(new Error('Failed to load image'));\r\n };\r\n img.src = URL.createObjectURL(blob);\r\n } else {\r\n reject(new Error('Failed to load image'));\r\n }\r\n };\r\n xhr.onerror = () => {\r\n reject(new Error('Network error'));\r\n };\r\n xhr.setRequestHeader('Range', 'bytes=0-');\r\n xhr.send();\r\n });\r\n }\r\n}\r\n","import { StringModule } from \"../../StringModule\";\r\nimport { StringData } from \"../../Utils/StringData\";\r\n\r\n\r\nexport class StringLoading extends StringModule{\r\n loadingTimeout: number = 0\r\n\r\n constructor(visitor: any, settings: any = null) {\r\n super(visitor)\r\n this._type = 2\r\n\r\n if (settings != null) {\r\n if (settings.timeout != null) {\r\n this.loadingTimeout = settings.timeout\r\n }\r\n }\r\n }\r\n onStart(): void {\r\n setTimeout(() => {\r\n const htmlElement = document.documentElement;\r\n htmlElement.classList.add('-loaded');\r\n }, this.loadingTimeout);\r\n \r\n }\r\n}","import { StringObject } from \"../../Objects/StringObject\";\r\nimport { StringModule } from \"../../StringModule\";\r\n\r\nexport class StringVideoAutoplay extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = \"autoplay\";\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n const videoElement = object.el as HTMLVideoElement;\r\n const videoSrc = this.attribute.process(videoElement, \"string-src\", \"\");\r\n const started = this.attribute.process(videoElement, \"string-started\", null) == null ? false : true;\r\n if (videoElement.tagName.toLowerCase() === \"video\" && videoSrc && started == false) {\r\n videoElement.setAttribute(\"muted\", \"muted\");\r\n videoElement.setAttribute(\"playsinline\", \"\");\r\n videoElement.setAttribute(\"loop\", \"\");\r\n videoElement.setAttribute(\"autoplay\", \"\");\r\n videoElement.src = videoSrc;\r\n videoElement.muted = true;\r\n videoElement.addEventListener(\"canplaythrough\", () => {\r\n const started = this.attribute.process(videoElement, \"string-started\", null) == null ? false : true;\r\n if (started == false) {\r\n this.tryPlay(object, videoElement); \r\n }\r\n }, { once: true });\r\n videoElement.load();\r\n } else {\r\n console.warn(\r\n \"StringVideoAutoplay: Element is not a <video> tag or string-src is missing.\",\r\n object.el\r\n );\r\n }\r\n }\r\n\r\n private tryPlay(object: StringObject, element: HTMLVideoElement) {\r\n element.play().catch((err) => {\r\n console.warn(\"Autoplay failed:\", err);\r\n object.started = false;\r\n }).then(() => {\r\n object.started = true;\r\n element.setAttribute(`string-started`, '')\r\n });\r\n }\r\n}","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringCursor extends StringModule {\r\n private lerpFactor: number = 0.2;\r\n private oldX = 0;\r\n private oldY = 0;\r\n protected enterObjectsMap: Map<string, StringObject> = new Map<string, StringObject>();\r\n protected enterObjects: Array<StringObject> = new Array<StringObject>();\r\n cursor: any;\r\n\r\n constructor(visitor: any, settings: any = null) {\r\n super(visitor);\r\n this.htmlKey = 'cursor';\r\n this.cursor = document.querySelector('[string-cursor]') as HTMLElement;\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n if (this.virtualCursor.smoothX != this.oldX || this.virtualCursor.smoothY != this.oldY) {\r\n let cursorData = {\r\n lerpX: this.virtualCursor.lerpX,\r\n lerpY: this.virtualCursor.lerpY,\r\n x: this.virtualCursor.x,\r\n y: this.virtualCursor.y,\r\n };\r\n this.events.emit('cursor', cursorData);\r\n\r\n this.cursor.style.setProperty('--x', this.virtualCursor.smoothX);\r\n this.cursor.style.setProperty('--y', this.virtualCursor.smoothY);\r\n\r\n this.oldX = this.virtualCursor.smoothX;\r\n this.oldY = this.virtualCursor.smoothY;\r\n }\r\n\r\n this.objects.forEach((object) => {\r\n if (object.isMouseMove) {\r\n let rect = object.el.getBoundingClientRect();\r\n const offsetX = this.calculateOffset('center', this.virtualCursor.x - rect.left, rect.width);\r\n const offsetY = this.calculateOffset('center', this.virtualCursor.y - rect.top, rect.height);\r\n object.mouseX += this.lerp.process(object.mouseX, offsetX, object.lerp);\r\n object.mouseY += this.lerp.process(object.mouseY, offsetY, object.lerp);\r\n this.setMouseCoordinates(object, object.mouseX, object.mouseY);\r\n } else {\r\n if (object.mouseX != 0 || object.mouseY != 0) {\r\n let rect = object.el.getBoundingClientRect();\r\n const offsetX = this.calculateOffset('center', object.halfWidth, rect.width);\r\n const offsetY = this.calculateOffset('center', object.halfHeight, rect.height);\r\n object.mouseX += this.lerp.process(object.mouseX, offsetX, object.lerp);\r\n object.mouseY += this.lerp.process(object.mouseY, offsetY, object.lerp);\r\n this.setMouseCoordinates(object, object.mouseX, object.mouseY);\r\n }\r\n }\r\n });\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n let element = object.el;\r\n\r\n if (this.settings != null) {\r\n if (this.settings['string-lerp'] != null) {\r\n object.lerp = this.settings['string-lerp'];\r\n }\r\n }\r\n\r\n let onMouseEnterEventBind = () => {\r\n element.addEventListener('mousemove', onMouseMoveEventBind);\r\n element.addEventListener('mouseleave', onMouseLeaveEventBind);\r\n object.isMouseMove = true;\r\n if (object.cursorTarget != null) {\r\n object.cursorTarget.classList.add('-show');\r\n }\r\n };\r\n let onMouseMoveEventBind = (event: MouseEvent) => {};\r\n let onMouseLeaveEventBind = () => {\r\n element.removeEventListener('mousemove', onMouseMoveEventBind);\r\n element.removeEventListener('mouseleave', onMouseLeaveEventBind);\r\n object.isMouseMove = false;\r\n if (object.cursorTarget != null) {\r\n object.cursorTarget.classList.remove('-show');\r\n }\r\n };\r\n\r\n object.onEnter = () => {\r\n element.addEventListener('mouseenter', onMouseEnterEventBind);\r\n };\r\n object.onLeave = () => {\r\n element.removeEventListener('mouseenter', onMouseEnterEventBind);\r\n element.removeEventListener('mousemove', onMouseMoveEventBind);\r\n element.removeEventListener('mouseleave', onMouseLeaveEventBind);\r\n };\r\n }\r\n\r\n private setMouseCoordinates(object: StringObject, x: number, y: number) {\r\n if (object.selfDisable == false) {\r\n object.el.style.setProperty('--mouse-x', x.toFixed(2));\r\n object.el.style.setProperty('--mouse-y', y.toFixed(2));\r\n }\r\n object.connects.forEach((element) => {\r\n element.style.setProperty('--mouse-x', x.toFixed(2));\r\n element.style.setProperty('--mouse-y', y.toFixed(2));\r\n });\r\n }\r\n\r\n private calculateOffset(position: string, mousePos: number, size: number): number {\r\n switch (position) {\r\n case 'start':\r\n return mousePos / size;\r\n case 'end':\r\n return (mousePos - size) / size;\r\n case 'center':\r\n default:\r\n return (mousePos - size / 2) / (size / 2);\r\n }\r\n }\r\n}\r\n","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringMagnetic extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'magnetic';\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n const element = object.el as HTMLElement;\r\n\r\n if (this.settings != null) {\r\n if (this.settings['string-strength'] != null) {\r\n object.strength = this.settings['string-strength'];\r\n }\r\n if (this.settings['string-radius'] != null) {\r\n object.radius = this.settings['string-radius'];\r\n }\r\n if (this.settings['string-lerp'] != null) {\r\n object.lerp = this.settings['string-lerp'];\r\n }\r\n }\r\n }\r\n\r\n onMouseMove(e: MouseEvent): void {\r\n this.objects.forEach((object) => {\r\n const element = object.el as HTMLElement;\r\n const rect = element.getBoundingClientRect();\r\n const elementCenterX = rect.left + object.halfWidth;\r\n const elementCenterY = rect.top + object.halfHeight;\r\n const distX = e.clientX - elementCenterX;\r\n const distY = e.clientY - elementCenterY;\r\n const distance = Math.sqrt(distX ** 2 + distY ** 2);\r\n\r\n if (distance < object.radius) {\r\n object.magneticTargetX = distX * object.strength * ((object.radius - distance) / object.radius);\r\n object.magneticTargetY = distY * object.strength * ((object.radius - distance) / object.radius);\r\n object.isMagneting = true;\r\n } else {\r\n object.magneticTargetX = 0;\r\n object.magneticTargetY = 0;\r\n }\r\n });\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.objects.forEach((object) => {\r\n if (object.isMagneting) {\r\n let lerpX = this.lerp.process(object.magneticX, object.magneticTargetX, object.lerp);\r\n let lerpY = this.lerp.process(object.magneticY, object.magneticTargetY, object.lerp);\r\n if (lerpX > -0.01 && lerpX < 0.01) {\r\n lerpX = 0;\r\n object.magneticX = object.magneticTargetX;\r\n }\r\n if (lerpY > -0.01 && lerpY < 0.01) {\r\n lerpY = 0;\r\n object.magneticY = object.magneticTargetY;\r\n }\r\n object.magneticX += lerpX;\r\n object.magneticY += lerpY;\r\n object.el.style.setProperty('--magnetic-x', object.magneticX.toString());\r\n object.el.style.setProperty('--magnetic-y', object.magneticY.toString());\r\n if (object.magneticTargetX == object.magneticX || object.magneticTargetY == object.magneticY) {\r\n object.isMagneting = false;\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","export class StringLerpCalc{\r\n process(start: number, end: number, amt: number) {\r\n return amt * (end - start);\r\n }\r\n}","import { StringLerpCalc } from \"../Utils/StringLerpCalc\";\r\n\r\nexport class StringVirtualCursor{\r\n private _lF = .1\r\n private lerp = new StringLerpCalc()\r\n \r\n private _x: number = 0\r\n private _y: number = 0\r\n private _lerpX: number = 0\r\n private _lerpY: number = 0\r\n\r\n private targetX: number = 0\r\n private targetY: number = 0\r\n\r\n public get x(){\r\n return this.targetX\r\n }\r\n public get y(){\r\n return this.targetY\r\n }\r\n public get smoothX(){\r\n return this._x\r\n }\r\n public get smoothY(){\r\n return this._y\r\n }\r\n public get lerpX(){\r\n return this._lerpX\r\n }\r\n public get lerpY(){\r\n return this._lerpY\r\n }\r\n\r\n\r\n onMouseMove(e: MouseEvent): void {\r\n this.targetX = e.clientX;\r\n this.targetY = e.clientY;\r\n }\r\n onUpdate(): void {\r\n this._lerpX = this.lerp.process(this._x, this.targetX, this._lF)\r\n this._lerpY = this.lerp.process(this._y, this.targetY, this._lF)\r\n \r\n this._x = Math.floor(this._x + this._lerpX);\r\n this._y = Math.floor(this._y + this._lerpY);\r\n }\r\n\r\n\r\n}","import { IStringModule } from '../IStringModule';\r\n\r\nconst tS = 'top';\r\nconst bS = 'bottom';\r\nconst lS = 'left';\r\nconst rS = 'right';\r\n\r\nexport class StringObject {\r\n public el: HTMLElement;\r\n public id: string = '';\r\n public oStart: number = 0;\r\n public oEnd: number = 0;\r\n public size: number = 0;\r\n\r\n public startPos: number = 0;\r\n public endPos: number = 0;\r\n public differencePos: number = 0;\r\n public factor: number = 1;\r\n\r\n public inviewTop: number = 1;\r\n public inviewBottom: number = 1;\r\n\r\n public sElPos: string = '';\r\n public sScrPos: string = '';\r\n public eElPos: string = '';\r\n public eScrPos: string = '';\r\n\r\n public halfWidth: number = 0;\r\n public halfHeight: number = 0;\r\n\r\n public start: number = 0;\r\n public end: number = 0;\r\n\r\n public mouseX: number = 0;\r\n public mouseY: number = 0;\r\n\r\n public magneticTargetX: number = 0;\r\n public magneticTargetY: number = 0;\r\n \r\n public magneticX: number = 0;\r\n public magneticY: number = 0;\r\n \r\n public lerp: number = 0;\r\n\r\n public glide: number = 0;\r\n public strength: number = 0;\r\n public weight: number = 0;\r\n public radius: number = 0;\r\n public parallaxPositionStart: number = 0;\r\n public parallaxPositionEnd: number = 0;\r\n\r\n public progress: number = 0\r\n\r\n public connects: Array<HTMLElement> = new Array<HTMLElement>();\r\n public cursorTarget: any = null;\r\n\r\n public key: string = '--progress';\r\n\r\n public showObserver: IntersectionObserver | null = null;\r\n public progressObserver: IntersectionObserver | null = null;\r\n public inviewObserver: IntersectionObserver | null = null;\r\n\r\n public repeat: boolean = false;\r\n public selfDisable: boolean = false;\r\n public active: boolean = false;\r\n public abs: boolean = false;\r\n public isMouseMove: boolean = false;\r\n public started: boolean = false;\r\n public isMagneting: boolean = false;\r\n\r\n\r\n public onEnter = () => {};\r\n public onLeave = () => {};\r\n\r\n private modules: Array<IStringModule> = new Array<IStringModule>();\r\n\r\n // === 3D Objects ===\r\n public type3D: string = \"box\"\r\n public material3D: string = \"basic\"\r\n public color3D: string = \"#ffffff\"\r\n public model3D: string = \"\"\r\n public animations3D: Array<any> = new Array<any>()\r\n\r\n constructor(element: HTMLElement) {\r\n this.el = element;\r\n }\r\n\r\n enter() {\r\n this.active = true;\r\n this.modules.forEach((module: IStringModule) => {\r\n module.addObject(this.id, this);\r\n });\r\n this.onEnter();\r\n }\r\n leave() {\r\n this.active = false;\r\n this.modules.forEach((module: IStringModule) => {\r\n module.removeObject(this.id);\r\n });\r\n this.onLeave();\r\n }\r\n show() {\r\n this.el.classList.add('-inview');\r\n }\r\n hide() {\r\n if (this.repeat) {\r\n this.el.classList.remove('-inview');\r\n }\r\n }\r\n\r\n connect(module: IStringModule) {\r\n this.modules.push(module);\r\n }\r\n\r\n \r\n public calculatePositions(windowSize: number) {\r\n if ((this.sElPos === tS && this.sScrPos === tS) || (this.sElPos === lS && this.sScrPos === lS)) {\r\n this.startPos = this.start - this.oEnd;\r\n } else if ((this.sElPos === tS && this.sScrPos === bS) || (this.sElPos === lS && this.sScrPos === rS)) {\r\n this.startPos = this.start - windowSize - this.oEnd;\r\n } else if ((this.sElPos === bS && this.sScrPos === tS) || (this.sElPos === rS && this.sScrPos === lS)) {\r\n this.startPos = this.start + this.size - this.oEnd;\r\n } else if ((this.sElPos === bS && this.sScrPos === bS) || (this.sElPos === rS && this.sScrPos === rS)) {\r\n this.startPos = this.start - windowSize - this.oEnd + this.size;\r\n }\r\n\r\n if ((this.eElPos === tS && this.eScrPos === tS) || (this.eElPos === lS && this.eScrPos === lS)) {\r\n this.endPos = this.start + this.oStart;\r\n } else if ((this.eElPos === tS && this.eScrPos === bS) || (this.eElPos === lS && this.eScrPos === rS)) {\r\n this.endPos = this.start - windowSize + this.oStart;\r\n } else if ((this.eElPos === bS && this.eScrPos === tS) || (this.eElPos === rS && this.eScrPos === lS)) {\r\n this.endPos = this.start + this.size + this.oStart;\r\n } else if ((this.eElPos === bS && this.eScrPos === bS) || (this.eElPos === rS && this.eScrPos === rS)) {\r\n this.endPos = this.start - windowSize + this.size + this.oStart;\r\n }\r\n this.differencePos = this.endPos - this.startPos;\r\n }\r\n}\r\n","import { StringModule } from '../StringModule';\n\nenum DeviceType {\n Mobile,\n Tablet,\n Laptop,\n Desktop,\n}\n\ninterface DeviceQueryConfig {\n min?: number;\n max?: number;\n enable?: boolean;\n}\n\ninterface QueryConfig {\n mobile?: DeviceQueryConfig;\n tablet?: DeviceQueryConfig;\n laptop?: DeviceQueryConfig;\n desktop?: DeviceQueryConfig;\n}\n\nclass StringResponsiveQueryDevice {\n public min?: number = undefined;\n public max?: number = undefined;\n public enable: boolean = true;\n\n constructor(config?: DeviceQueryConfig) {\n this.min = config?.min;\n this.max = config?.max;\n this.enable = config?.enable ?? true;\n }\n\n setEnable(enable: boolean = true) {\n this.enable = enable;\n }\n setRange(min?: number, max?: number) {\n this.min = min ?? undefined;\n this.max = max ?? undefined;\n }\n\n get mediaQuery(): string {\n let query = 'screen';\n if (this.min) {\n query += ` and (min-width: ${this.min}px)`;\n }\n if (this.max) {\n query += ` and (max-width: ${this.max}px)`;\n }\n return query;\n }\n}\n\nexport class StringResponsive extends StringModule {\n private queries: { [key in DeviceType]: StringResponsiveQueryDevice } = {\n [DeviceType.Mobile]: new StringResponsiveQueryDevice({ max: 359 }),\n [DeviceType.Tablet]: new StringResponsiveQueryDevice({ min: 360, max: 1079 }),\n [DeviceType.Laptop]: new StringResponsiveQueryDevice({ min: 1080, max: 1365 }),\n [DeviceType.Desktop]: new StringResponsiveQueryDevice({ min: 1366 }),\n };\n\n private matchMedias: { [key in DeviceType]: MediaQueryList } = {\n [DeviceType.Mobile]: window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery),\n [DeviceType.Tablet]: window.matchMedia(this.queries[DeviceType.Tablet].mediaQuery),\n [DeviceType.Laptop]: window.matchMedia(this.queries[DeviceType.Laptop].mediaQuery),\n [DeviceType.Desktop]: window.matchMedia(this.queries[DeviceType.Desktop].mediaQuery),\n };\n\n constructor(visitor: any, settings: any) {\n super(visitor, settings);\n this._type = 2;\n }\n\n onConnect() {}\n\n onStart(): void {\n if (this.settings != null) {\n if (this.settings['settings'] != null) {\n let config = this.settings['settings'];\n if (config.mobile) {\n this.queries[DeviceType.Mobile].enable = true;\n this.queries[DeviceType.Mobile].setRange(config.mobile.min == undefined ? null : config.mobile.min, config.mobile.max ?? null);\n this.matchMedias[DeviceType.Mobile] = window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery);\n } else {\n this.queries[DeviceType.Mobile].enable = false;\n }\n\n if (config.tablet) {\n this.queries[DeviceType.Tablet].enable = true;\n this.queries[DeviceType.Tablet].setRange(config.mobile.min == undefined ? null : config.mobile.min, config.mobile.max ?? null);\n this.matchMedias[DeviceType.Tablet] = window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery);\n } else {\n this.queries[DeviceType.Tablet].enable = false;\n }\n\n if (config.laptop) {\n this.queries[DeviceType.Laptop].enable = true;\n this.queries[DeviceType.Laptop].setRange(config.mobile.min == undefined ? null : config.mobile.min, config.mobile.max ?? null);\n this.matchMedias[DeviceType.Laptop] = window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery);\n } else {\n this.queries[DeviceType.Laptop].enable = false;\n }\n\n if (config.desktop) {\n this.queries[DeviceType.Desktop].enable = true;\n this.queries[DeviceType.Desktop].setRange(config.mobile.min == undefined ? null : config.mobile.min, config.mobile.max ?? null);\n this.matchMedias[DeviceType.Desktop] = window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery);\n } else {\n this.queries[DeviceType.Desktop].enable = false;\n }\n }\n }\n this.updateElements();\n }\n\n onResize(): void {\n this.updateElements();\n }\n\n private updateElements() {\n const isMobileMedia = this.matchMedias[DeviceType.Mobile].matches && this.queries[DeviceType.Mobile].enable;\n const isTabletMedia = this.matchMedias[DeviceType.Tablet].matches && this.queries[DeviceType.Tablet].enable;\n const isLaptopMedia = this.matchMedias[DeviceType.Laptop].matches && this.queries[DeviceType.Laptop].enable;\n const isDesktopMedia = this.matchMedias[DeviceType.Desktop].matches && this.queries[DeviceType.Desktop].enable;\n\n const elements = document.querySelectorAll('[string-mobile], [string-tablet], [string-laptop], [string-desktop]');\n\n elements.forEach((element: any) => {\n let showElement = false;\n\n if (element.hasAttribute('string-mobile') && isMobileMedia) {\n showElement = true;\n }\n if (element.hasAttribute('string-tablet') && isTabletMedia) {\n showElement = true;\n }\n if (element.hasAttribute('string-laptop') && isLaptopMedia) {\n showElement = true;\n }\n if (element.hasAttribute('string-desktop') && isDesktopMedia) {\n showElement = true;\n }\n\n if (showElement) {\n element.style.display = null;\n } else {\n element.style.display = `none`;\n }\n });\n }\n}\n","import { StringData } from '../../../Utils/StringData';\r\n\r\nexport class StringScrollbarHorizontal {\r\n private scrollbar: any;\r\n private thumb: any;\r\n private isDragging = false;\r\n private startY: number = 0;\r\n private startScrollPosition: number = 0;\r\n data: StringData;\r\n\r\n constructor(data: StringData, scrollbar: any, thumb: any) {\r\n this.data = data;\r\n this.scrollbar = scrollbar;\r\n this.thumb = thumb;\r\n }\r\n\r\n onResize(): void {\r\n const contentSize = this.data.psH;\r\n const visibleSize = this.data.wS;\r\n\r\n const thumbSize = (visibleSize / contentSize) * visibleSize;\r\n this.thumb.style.setProperty('--size', thumbSize + 'px');\r\n\r\n if (contentSize <= visibleSize) {\r\n this.scrollbar.classList.add('-hide');\r\n } else {\r\n this.scrollbar.classList.remove('-hide');\r\n }\r\n }\r\n\r\n updateThumb() {\r\n const contentHeight = this.data.psH;\r\n const visibleHeight = this.data.wS;\r\n this.thumb.style.setProperty('--position', `${(this.data.c / contentHeight) * visibleHeight + 'px'}`);\r\n }\r\n\r\n mouseDownEvent(e: MouseEvent) {\r\n this.startY = e.clientY;\r\n this.startScrollPosition = this.data.c;\r\n }\r\n\r\n mouseMoveEvent(e: MouseEvent) {\r\n const deltaY = e.clientY - this.startY;\r\n const newScrollPosition = this.startScrollPosition + (deltaY / this.data.wS) * this.data.psH;\r\n this.data.c = newScrollPosition;\r\n this.data.t = newScrollPosition;\r\n window.scrollTo(0, newScrollPosition);\r\n this.updateThumb();\r\n }\r\n}\r\n","import { StringData } from '../../../Utils/StringData';\r\n\r\nexport class StringScrollbarVertical {\r\n private scrollbar: any;\r\n private thumb: any;\r\n private isDragging = false;\r\n private startCoordinate: number = 0;\r\n private startScrollPosition: number = 0;\r\n data: StringData;\r\n\r\n constructor(data: StringData, scrollbar: any, thumb: any) {\r\n this.data = data;\r\n this.scrollbar = scrollbar;\r\n this.thumb = thumb;\r\n }\r\n\r\n onResize(): void {\r\n const contentSize = this.data.psW;\r\n const visibleSize = this.data.wS;\r\n const thumbSize = (visibleSize / contentSize) * visibleSize;\r\n this.thumb.style.setProperty('--size', thumbSize + 'px');\r\n\r\n if (contentSize <= visibleSize) {\r\n this.scrollbar.classList.add('-hide');\r\n } else {\r\n this.scrollbar.classList.remove('-hide');\r\n }\r\n }\r\n\r\n updateThumb() {\r\n const contentWidth = this.data.psW;\r\n const visibleWidth = this.data.wS;\r\n this.thumb.style.setProperty('--position', `${(this.data.c / contentWidth) * visibleWidth + 'px'}`);\r\n }\r\n\r\n mouseDownEvent(e: MouseEvent) {\r\n this.startCoordinate = e.clientX;\r\n this.startScrollPosition = this.data.c;\r\n }\r\n\r\n mouseMoveEvent(e: MouseEvent) {\r\n const deltaX = e.clientX - this.startCoordinate;\r\n const newScrollPosition = this.startScrollPosition + (deltaX / this.data.wS) * this.data.psW;\r\n this.data.c = newScrollPosition;\r\n this.data.t = newScrollPosition;\r\n window.scrollTo(0, newScrollPosition);\r\n this.updateThumb();\r\n }\r\n}\r\n","import { StringModule } from '../../../StringModule';\r\nimport { StringData } from '../../../Utils/StringData';\r\nimport { StringScrollbarHorizontal } from './StringScrollbarHorizontal';\r\nimport { StringScrollbarVertical } from './StringScrollbarVertical';\r\n\r\nexport class StringScrollbar extends StringModule {\r\n private scrollbar: any;\r\n private thumb: any;\r\n private scrollTimeout: any;\r\n\r\n private isDragging = false;\r\n private scrollMode: 'smooth' | 'disable' | 'default' = 'smooth';\r\n\r\n private mouseUpEventBind: any;\r\n private mouseDownEventBind: any;\r\n private mouseMoveEventBind: any;\r\n\r\n private scrollbarState: any;\r\n private scrollbarStateHorizontal: any;\r\n private scrollbarStateVertical: any;\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n\r\n this.mouseUpEventBind = this.mouseUpEvent.bind(this);\r\n this.mouseDownEventBind = this.mouseDownEvent.bind(this);\r\n this.mouseMoveEventBind = this.mouseMoveEvent.bind(this);\r\n }\r\n destructor(): void {\r\n document.removeEventListener('mouseup', this.mouseUpEventBind);\r\n this.thumb.removeEventListener('mousedown', this.mouseDownEventBind);\r\n document.removeEventListener('mousemove', this.mouseMoveEventBind);\r\n }\r\n\r\n onStart(): void {\r\n this.createScrollbar();\r\n this.updateThumb();\r\n this.addCustomStyles();\r\n document.addEventListener('mouseup', this.mouseUpEventBind);\r\n this.thumb.addEventListener('mousedown', this.mouseDownEventBind);\r\n document.addEventListener('mousemove', this.mouseMoveEventBind);\r\n document.documentElement.classList.add(`-no-scrollbar`);\r\n }\r\n\r\n onScroll(data: StringData): void {\r\n this.updateThumb();\r\n this.showScrollbar();\r\n this.hideScrollbar();\r\n }\r\n\r\n onResize(): void {\r\n this.scrollbarState.onResize();\r\n }\r\n\r\n onChangeScrollParams(): void {\r\n if (this.data.sM == 'disable' && this.scrollMode != 'disable') {\r\n this.scrollbar.classList.add('-hide');\r\n }\r\n if ((this.data.sM == 'smooth' && this.scrollMode == 'disable') || (this.data.sM == 'default' && this.scrollMode == 'disable')) {\r\n this.scrollbar.classList.remove('-hide');\r\n }\r\n this.scrollMode = this.data.sM;\r\n }\r\n\r\n onChangeScrollDirection() {\r\n if (this.data.sD == 'horizontal') {\r\n this.scrollbarState = this.scrollbarStateVertical;\r\n } else {\r\n this.scrollbarState = this.scrollbarStateHorizontal;\r\n }\r\n this.scrollbarState.onResize();\r\n }\r\n\r\n private addCustomStyles() {\r\n const style = document.createElement('style');\r\n style.textContent = `\r\n ::-webkit-scrollbar {\r\n display: none;\r\n width: 0;\r\n height: 0;\r\n -webkit-appearance: none;\r\n }\r\n body {\r\n -ms-overflow-style: none; /* IE and Edge */\r\n scrollbar-width: none; /* Firefox */\r\n }\r\n .-without-scrollbar::-webkit-scrollbar {\r\n display: none;\r\n }\r\n .-without-scrollbar {\r\n -ms-overflow-style: none; /* IE and Edge */\r\n scrollbar-width: none; /* Firefox */\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n\r\n private createScrollbar() {\r\n this.scrollbar = document.createElement('div');\r\n this.scrollbar.classList.add('scrollbar');\r\n this.thumb = document.createElement('div');\r\n this.thumb.classList.add('thumb');\r\n this.scrollbar.appendChild(this.thumb);\r\n document.body.appendChild(this.scrollbar);\r\n\r\n this.scrollbarStateHorizontal = new StringScrollbarHorizontal(this.data, this.scrollbar, this.thumb);\r\n this.scrollbarStateVertical = new StringScrollbarVertical(this.data, this.scrollbar, this.thumb);\r\n this.scrollbarState = this.scrollbarStateHorizontal;\r\n }\r\n\r\n private updateThumb() {\r\n this.scrollbarState.updateThumb();\r\n }\r\n\r\n private mouseDownEvent(e: MouseEvent) {\r\n this.isDragging = true;\r\n this.scrollbarState.mouseDownEvent(e);\r\n document.body.style.userSelect = 'none';\r\n this.scrollbar.classList.add('-touch');\r\n }\r\n\r\n private mouseMoveEvent(e: MouseEvent) {\r\n if (!this.isDragging) return;\r\n\r\n this.scrollbarState.mouseMoveEvent(e);\r\n }\r\n\r\n private mouseUpEvent() {\r\n this.isDragging = false;\r\n document.body.style.userSelect = '';\r\n this.hideScrollbar();\r\n this.scrollbar.classList.remove('-touch');\r\n }\r\n\r\n private showScrollbar() {\r\n this.scrollbar.classList.add('-scroll');\r\n }\r\n\r\n private hideScrollbar() {\r\n if (this.scrollTimeout) {\r\n clearTimeout(this.scrollTimeout);\r\n }\r\n this.scrollTimeout = setTimeout(() => {\r\n this.scrollbar.classList.remove('-scroll');\r\n }, 1000);\r\n }\r\n}\r\n","import { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringGlide extends StringModule {\r\n private previousLerp: number = 0;\r\n private displacement: number = 0;\r\n private acceleration: number = 0;\r\n private velocityMultiplier: number = 0.00125;\r\n private isInitialScroll: boolean = true;\r\n\r\n private baseVelocityMultiplier: number = 0.00125;\r\n private reducedVelocityMultiplier: number = this.baseVelocityMultiplier / 20;\r\n private negativeVelocityMultiplier: number = -0.0001;\r\n\r\n private readonly ACCELERATION_STEP: number = 0.05;\r\n private readonly MIN_DISPLACEMENT: number = 0.01;\r\n private readonly MAX_DISPLACEMENT: number = 1;\r\n private readonly MIN_VELOCITY: number = -1;\r\n private readonly MAX_VELOCITY: number = 1;\r\n\r\n private maxDisplacementValue: number = 0;\r\n\r\n\r\n private setupItem = (object: any) => {\r\n const transformCompute = `translate3d(0, ${-this.data.dV * this.maxDisplacementValue * object.glide}px, 0)`;\r\n object.el.style.transform = transformCompute;\r\n }\r\n\r\n private onUpdateDesktopEvent = ()=>{\r\n for (let i = 0; i < this.objects.length; i++) {\r\n let object = this.objects[i]\r\n this.setupItem(object)\r\n }\r\n }\r\n private onUpdateMobileEvent = ()=>{}\r\n private onUpdateEvent = this.onUpdateDesktopEvent\r\n\r\n constructor(visitor: any, settings: any = null) {\r\n super(visitor);\r\n this.htmlKey = 'glide';\r\n\r\n if (settings) {\r\n const { baseVelocityMultiplier, reducedVelocityMultiplier, negativeVelocityMultiplier } = settings;\r\n this.baseVelocityMultiplier = baseVelocityMultiplier ?? this.baseVelocityMultiplier;\r\n this.reducedVelocityMultiplier = reducedVelocityMultiplier ?? this.reducedVelocityMultiplier;\r\n this.negativeVelocityMultiplier = negativeVelocityMultiplier ?? this.negativeVelocityMultiplier;\r\n }\r\n }\r\n\r\n private calcExpanderFactor(isDirectionUp: boolean): void {\r\n const isConditionMet = isDirectionUp\r\n ? this.data.v < this.previousLerp\r\n : this.data.v > this.previousLerp;\r\n\r\n this.velocityMultiplier = isConditionMet\r\n ? (this.isInitialScroll ? this.baseVelocityMultiplier : this.reducedVelocityMultiplier)\r\n : this.negativeVelocityMultiplier;\r\n\r\n if (!isConditionMet) {\r\n this.isInitialScroll = false;\r\n }\r\n }\r\n onStart(): void {\r\n this.maxDisplacementValue = this.data.wS * 0.1\r\n }\r\n\r\n onResize(): void {\r\n if (window.innerWidth > 1080) {\r\n this.maxDisplacementValue = this.data.wS * 0.1\r\n this.onUpdateEvent = this.onUpdateDesktopEvent\r\n } else {\r\n this.onUpdateEvent = this.onUpdateMobileEvent \r\n this.resetState();\r\n this.objects.forEach((object) => {\r\n this.setupItem(object);\r\n })\r\n }\r\n }\r\n\r\n private resetState(): void {\r\n this.displacement = 0;\r\n this.acceleration = 0;\r\n this.isInitialScroll = true;\r\n this.velocityMultiplier = this.baseVelocityMultiplier;\r\n }\r\n\r\n onScrollStart(): void {\r\n this.resetState();\r\n }\r\n\r\n onScrollStop(): void {\r\n this.resetState();\r\n this.previousLerp = 0;\r\n document.documentElement.style.setProperty('--glide', '0');\r\n for (let i = 0; i < this.objects.length; i++) {\r\n let object = this.objects[i]\r\n const transformCompute = `translate3d(0, 0px, 0)`;\r\n object.el.style.transform = transformCompute;\r\n }\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.calcExpanderFactor(this.data.sDB === false);\r\n this.acceleration = Math.min(this.MAX_DISPLACEMENT, this.acceleration + this.ACCELERATION_STEP);\r\n this.displacement = Math.max(this.MIN_DISPLACEMENT, Math.min(this.MAX_DISPLACEMENT, this.displacement + this.velocityMultiplier));\r\n this.data.dV = Math.min(this.MAX_VELOCITY, Math.max(this.MIN_VELOCITY, this.data.v * this.displacement * this.acceleration));\r\n document.documentElement.style.setProperty('--glide', this.data.dV.toString());\r\n this.previousLerp = this.data.v;\r\n this.onUpdateEvent()\r\n }\r\n}","import { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringLerp extends StringModule {\r\n oldLerp: number = 0\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this._type = 2;\r\n }\r\n onScrollStop(): void {\r\n document.documentElement.style.setProperty('--lerp', \"0\");\r\n }\r\n onScroll(data: StringData): void {\r\n document.documentElement.style.setProperty('--lerp', this.data.v.toString());\r\n this.oldLerp = data.v\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// import { StringModule } from '../../StringModule';\r\n// import { StringData } from '../../Utils/StringData';\r\n\r\n// export class StringLerp extends StringModule {\r\n// oldLerp: number = 0\r\n// private delay = 0\r\n// private isTop: boolean = false\r\n// private isOldProgressive: boolean = true\r\n\r\n// private expander = 0\r\n// private starterExpander = 0\r\n// constructor(visitor: any) {\r\n// super(visitor);\r\n// this.htmlKey = 'displacement.';\r\n// }\r\n// onUpdate(data: StringData): void {\r\n \r\n// if (this.oldLerp != 0 && this.data.v == 0) {\r\n// this.oldLerp = 0\r\n// document.documentElement.style.setProperty('--lerp', \"0\");\r\n// this.expander = 0\r\n// this.starterExpander = 0\r\n// this.isOldProgressive = true\r\n// }\r\n\r\n// if ((this.oldLerp > 0 && this.data.v < 0)||(this.oldLerp < 0 && this.data.v > 0)) {\r\n// this.expander = 0\r\n// this.starterExpander = 0\r\n// this.isOldProgressive = true\r\n// }\r\n// if (this.data.v < 0) {\r\n// this.isTop = true\r\n// }\r\n// if (this.data.v > 0) {\r\n// this.isTop = false\r\n// }\r\n\r\n// if (this.data.v != 0) {\r\n// let expanderKoef = .00125\r\n// if (this.oldLerp == 0) {\r\n// expanderKoef = .00125\r\n// } else {\r\n// if (this.isTop == false) {\r\n// if (this.data.v > this.oldLerp) {\r\n// if (this.isOldProgressive) {\r\n// expanderKoef = .00125\r\n// } else {\r\n// expanderKoef = .00125 / 20\r\n// }\r\n \r\n// }else {\r\n// expanderKoef = -.0001\r\n// this.isOldProgressive = false\r\n// }\r\n// } \r\n// if (this.isTop == true ) {\r\n// if (this.data.v < this.oldLerp) {\r\n// if (this.isOldProgressive) {\r\n// expanderKoef = .00125\r\n// } else {\r\n// expanderKoef = .00125 / 20\r\n// }\r\n// }else {\r\n// expanderKoef = -.0001\r\n// this.isOldProgressive = false\r\n// }\r\n// }\r\n// }\r\n// this.starterExpander = Math.min(1, this.starterExpander + 0.05)\r\n// this.expander = Math.max(0, Math.min(1, (this.expander + expanderKoef) ))\r\n// this.data.dV = this.lerp.process(this.delay, this.data.v, this.expander)* this.starterExpander\r\n// document.documentElement.style.setProperty('--delay', Math.min(1, Math.max(-1, this.data.dV)).toString());\r\n// document.documentElement.style.setProperty('--lerp', this.data.v.toString());\r\n// this.oldLerp = data.v\r\n// }\r\n \r\n\r\n \r\n \r\n// }\r\n// }\r\n","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringParallax extends StringModule {\r\n private setupParallax = (object: StringObject, progress: number) => {\r\n let transformCompute = `translate3d(0, ${\r\n object.factor * this.data.wS * object.parallaxPositionStart + progress * object.factor * this.data.wS * object.parallaxPositionEnd\r\n }px, 0)`;\r\n object.el.style.transform = transformCompute;\r\n object.connects.forEach((element) => {\r\n element.style.transform = transformCompute;\r\n });\r\n };\r\n\r\n private onScrollDesktopEvent = () => {\r\n this.objects.forEach((object) => {\r\n let progress = Math.min(1, Math.max(0, (this.data.c - object.startPos) / object.differencePos));\r\n object.el.style.setProperty(object.key, progress.toString());\r\n this.setupParallax(object, progress);\r\n });\r\n }\r\n private onScrollMobileEvent = () => {}\r\n private onScrollEvent = this.onScrollDesktopEvent\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'parallax';\r\n }\r\n\r\n onConnect(object: StringObject): void {\r\n if (this.settings != null) {\r\n if (this.settings['string-parallax-bias'] != null) {\r\n let parallaxPosition = this.attribute.process(object.el, 'string-parallax-bias', this.settings['string-parallax-bias']);\r\n object.parallaxPositionStart = -0.5 + 0.5 * parallaxPosition;\r\n object.parallaxPositionEnd = 0.5 + 0.5 * (1 - parallaxPosition);\r\n }\r\n if (this.settings['string-parallax'] != null) {\r\n object.factor = this.settings['string-parallax'];\r\n }\r\n }\r\n \r\n }\r\n\r\n onScroll(data: StringData): void {\r\n this.onScrollEvent()\r\n }\r\n onChangeScrollDirection(): void {\r\n if (this.data.sD == 'vertical') {\r\n this.setupParallax = (object: StringObject, progress: number) => {\r\n let transformCompute = `translate3d(0, ${\r\n object.factor * this.data.wS * object.parallaxPositionStart + progress * object.factor * this.data.wS * object.parallaxPositionEnd\r\n }px, 0)`;\r\n object.el.style.transform = transformCompute;\r\n object.connects.forEach((element) => {\r\n element.style.transform = transformCompute;\r\n });\r\n };\r\n } else {\r\n this.setupParallax = (object: StringObject, progress: number) => {\r\n let transformCompute = `translate3d(${\r\n object.factor * this.data.wS * object.parallaxPositionStart + progress * object.factor * this.data.wS * object.parallaxPositionEnd\r\n }px, 0, 0)`;\r\n object.el.style.transform = transformCompute;\r\n object.connects.forEach((element) => {\r\n element.style.transform = transformCompute;\r\n });\r\n };\r\n }\r\n }\r\n\r\n onResize(): void {\r\n if (window.innerWidth > 1080) {\r\n this.onScrollEvent = this.onScrollDesktopEvent\r\n } else {\r\n this.onScrollEvent = this.onScrollMobileEvent \r\n this.objects.forEach((object) => {\r\n this.setupParallax(object, .5);\r\n })\r\n }\r\n }\r\n}\r\n","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringProgress extends StringModule {\r\n private oldLerp = 0\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'progress';\r\n }\r\n\r\n onScroll(data: StringData): void {\r\n this.objects.forEach((object) => {\r\n this.setUpObject(object, this.data.v);\r\n });\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n object.onEnter = () => {\r\n this.setUpObject(object, 0);\r\n };\r\n }\r\n\r\n private setUpObject(object: StringObject, lerp: number) {\r\n object.progress = Math.min(\r\n 1,\r\n Math.max(0, (this.data.c - object.startPos) / object.differencePos)\r\n );\r\n this.applyProgress(object, object.progress);\r\n }\r\n\r\n private applyProgress(object: StringObject, progress: number) {\r\n this.events.emit(`progress_${object.id}`, progress);\r\n object.el.style.setProperty(object.key, progress.toString());\r\n object.connects.forEach((element) => {\r\n element.style.setProperty(object.key, progress.toString());\r\n });\r\n }\r\n}\r\n","import { StringData } from '../../Utils/StringData';\r\nimport { StringTypeSettings } from './StringTypeSettings';\r\n\r\nexport class StringScroll {\r\n public data: StringData;\r\n public isProg: boolean = false;\r\n public isParallaxEnabled: boolean = false;\r\n public name: string = '';\r\n public settings: StringTypeSettings;\r\n public v = 0;\r\n protected vT: number = 0;\r\n protected d: any;\r\n\r\n public onScrollStart = ()=>{}\r\n public onScrollStop = ()=>{}\r\n public onChangeDirection = ()=>{}\r\n\r\n public scrollContainer: any;\r\n\r\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\r\n this.d = document;\r\n this.settings = settings;\r\n this.data = data;\r\n this.scrollContainer = window;\r\n }\r\n\r\n onCalcUpdate: any = () => {\r\n this.scrollContainer.scrollTo(0, this.data.c);\r\n };\r\n onUpdate(): void {}\r\n onWheel(e: any): void {}\r\n onScroll(e: any): void {}\r\n\r\n protected _scrollDirection: 'vertical' | 'horizontal' = 'vertical';\r\n set scrollDirection(scrollDirection: 'vertical' | 'horizontal') {\r\n this._scrollDirection = scrollDirection;\r\n if (this._scrollDirection == 'vertical') {\r\n this.onCalcUpdate = () => {\r\n this.scrollContainer.scrollTo(0, this.data.c);\r\n };\r\n } else if (this._scrollDirection == 'horizontal') {\r\n this.onCalcUpdate = () => {\r\n this.scrollContainer.scrollTo(this.data.c, 0);\r\n };\r\n }\r\n }\r\n}\r\n","\r\nimport { StringData } from \"../../Utils/StringData\";\r\nimport { StringScroll } from \"./StringScroll\";\r\nimport { StringTypeSettings } from \"./StringTypeSettings\";\r\n\r\nexport class StringScrollDefault extends StringScroll {\r\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\r\n super(document, settings, data);\r\n this.name = 'mobile';\r\n }\r\n public onUpdate() {\r\n if (this.data.d!=0) {\r\n let delta = this.data.d * this.settings.speedAccelerate\r\n this.data.d -= delta\r\n this.data.v = delta \r\n\r\n if (Math.abs(this.data.v) < .1) {\r\n this.data.d = 0\r\n this.data.v = 0\r\n this.onScrollStop();\r\n } \r\n }\r\n }\r\n public onScroll(e: any) {\r\n this.data.c = this.d.documentElement.scrollTop;\r\n this.data.t = this.d.documentElement.scrollTop;\r\n }\r\n\r\n public onWheel(e: any) {\r\n if (e.deltaY != 0) {\r\n if (this.data.d == 0) {\r\n this.onScrollStart()\r\n }\r\n let plusDelta = e.deltaY\r\n if (this.data.t == 0) {\r\n this.data.d += Math.max(0, e.deltaY);\r\n }\r\n this.data.d += plusDelta;\r\n }\r\n }\r\n}","\r\nimport { StringData } from \"../../Utils/StringData\";\r\nimport { StringScroll } from \"./StringScroll\";\r\nimport { StringTypeSettings } from \"./StringTypeSettings\";\r\n\r\nexport class StringScrollDisable extends StringScroll {\r\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\r\n super(document, settings, data);\r\n this.name = 'disable';\r\n }\r\n\r\n public onUpdate() {}\r\n\r\n public onWheel(e: any) {\r\n e.preventDefault();\r\n }\r\n\r\n public onScroll(e: any) {\r\n e.preventDefault();\r\n }\r\n}","import { StringData } from '../../Utils/StringData';\r\nimport { StringScroll } from './StringScroll';\r\nimport { StringTypeSettings } from './StringTypeSettings';\r\n\r\nconst SCROLL_DIRECTION = {\r\n FORWARD: 'forward',\r\n BACK: 'back',\r\n} as const;\r\n\r\nconst CLASS_NAMES = {\r\n SCROLL_FORWARD: '-scroll-forward',\r\n SCROLL_BACK: '-scroll-back',\r\n} as const;\r\n\r\nexport class StringScrollSmooth extends StringScroll {\r\n public readonly name: string = 'desktop';\r\n private isScrollbarManipulation = false;\r\n private isBottomScrollDirection = false;\r\n private readonly velocityThreshold = 0.1;\r\n\r\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\r\n super(document, settings, data);\r\n }\r\n\r\n private updateScrollDirection(newDirection: boolean) {\r\n if (this.isBottomScrollDirection === newDirection) return;\r\n\r\n this.isBottomScrollDirection = newDirection;\r\n this.data.sDB = newDirection;\r\n this.onChangeDirection();\r\n\r\n const isForward = newDirection;\r\n document.documentElement.classList.toggle(CLASS_NAMES.SCROLL_FORWARD, isForward);\r\n document.documentElement.classList.toggle(CLASS_NAMES.SCROLL_BACK, !isForward);\r\n }\r\n\r\n private clamp(value: number, min: number, max: number): number {\r\n return Math.min(Math.max(value, min), max);\r\n }\r\n\r\n public stopScroll(): void {\r\n this.data.v = 0;\r\n this.data.d = 0;\r\n this.data.t = this.data.c;\r\n this.isProg = false;\r\n \r\n this.onCalcUpdate();\r\n document.documentElement.classList.remove(CLASS_NAMES.SCROLL_BACK, CLASS_NAMES.SCROLL_FORWARD);\r\n \r\n }\r\n\r\n public onUpdate(): void {\r\n const { data, settings } = this;\r\n let delta = this.data.d * this.settings.speedAccelerate\r\n this.data.t = Math.min(Math.max(0, this.data.t + delta), this.data.bS);\r\n this.data.d -= delta\r\n this.data.v = (this.data.t - this.data.c) * this.settings.speed\r\n\r\n if (this.isScrollbarManipulation) {\r\n this.isScrollbarManipulation = false;\r\n data.c = data.t;\r\n return;\r\n }\r\n\r\n const absVelocity = Math.abs(data.v);\r\n if (absVelocity === 0) return;\r\n if (data.v > 0) {\r\n data.c = this.clamp(Math.ceil(data.c + data.v), 0, data.bS);\r\n this.updateScrollDirection(true);\r\n } else {\r\n data.c = this.clamp(Math.floor(data.c + data.v), 0, data.bS);\r\n this.updateScrollDirection(false);\r\n }\r\n\r\n if (absVelocity < this.velocityThreshold) {\r\n this.stopScroll();\r\n this.onScrollStop();\r\n } else {\r\n this.isProg = true;\r\n this.onCalcUpdate();\r\n }\r\n }\r\n\r\n public onWheel(e: any) {\r\n if (e.deltaY != 0) {\r\n e.preventDefault();\r\n if (this.data.d == 0) {\r\n this.onScrollStart()\r\n }\r\n let plusDelta = e.deltaY\r\n if (this.data.t == 0) {\r\n this.data.d += Math.max(0, e.deltaY);\r\n }\r\n this.data.d += plusDelta;\r\n }\r\n }\r\n\r\n public onScroll(e: Event): void {\r\n if (!this.isProg) {\r\n this.isScrollbarManipulation = true;\r\n this.data.t = this.scrollContainer?.scrollTop ?? document.documentElement.scrollTop;\r\n }\r\n }\r\n}","export class StringTypeSettings{\r\n private sC: number = 0.1\r\n private sA: number = 0.25\r\n\r\n public get speed() {\r\n return this.sC\r\n }\r\n public get speedAccelerate() {\r\n return this.sA\r\n }\r\n\r\n public set speedAccelerate(speed: number) {\r\n this.sA = speed\r\n }\r\n public set speed(speed: number) {\r\n this.sC = speed\r\n }\r\n \r\n}","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\n\r\ninterface ISplitOptions {\r\n line?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n word?: Array<{\r\n align: string;\r\n random?: { min: number; max: number };\r\n abs?: boolean;\r\n }>;\r\n char?: Array<{\r\n align: string;\r\n random?: { min: number; max: number };\r\n abs?: boolean;\r\n }>;\r\n charLine?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n charWord?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n wordLine?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n}\r\n\r\nexport class StringSplit extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'split';\r\n }\r\n\r\n onStart(): void {}\r\n onResize(): void {\r\n document.querySelectorAll(`[string=\"split\"].-splited`).forEach((element) => {\r\n const splitOptions = this.parseSplitOptions(element.getAttribute('string-split'));\r\n if (element.innerHTML != this.split(splitOptions, element).html) {\r\n element.innerHTML = this.split(splitOptions, element).html\r\n }\r\n });\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n let element = object.el;\r\n if (!element.classList.contains('-splited')) {\r\n element.classList.add('-splited');\r\n element.setAttribute('string-split-original', element.innerHTML);\r\n const splitOptions = this.parseSplitOptions(element.getAttribute('string-split'));\r\n \r\n if (element.innerHTML != this.split(splitOptions, element).html) {\r\n element.innerHTML = this.split(splitOptions, element).html\r\n }\r\n }\r\n }\r\n\r\n private parseSplitOptions(attributeValue: string | null): ISplitOptions {\r\n const options: ISplitOptions = {\r\n line: [],\r\n word: [],\r\n char: [],\r\n charLine: [],\r\n charWord: [],\r\n wordLine: [],\r\n };\r\n\r\n if (attributeValue) {\r\n const parts = attributeValue.split('|');\r\n\r\n parts.forEach((part) => {\r\n const match = part.match(/^(\\w+-)?(\\w+)(\\[(.*?)\\])?$/);\r\n\r\n if (match) {\r\n const prefix = match[1] || '';\r\n const option = match[2];\r\n const params = match[4] ? match[4].split(',') : [];\r\n switch (prefix + option) {\r\n case 'char-line':\r\n (options.charLine as any[]).push(this.parseParam(params));\r\n break;\r\n case 'char-word':\r\n (options.charWord as any[]).push(this.parseParam(params));\r\n break;\r\n case 'word-line':\r\n (options.wordLine as any[]).push(this.parseParam(params));\r\n break;\r\n case 'line':\r\n (options.line as any[]).push(this.parseParam(params));\r\n break;\r\n case 'word':\r\n (options.word as any[]).push(this.parseParam(params));\r\n break;\r\n case 'char':\r\n (options.char as any[]).push(this.parseParam(params));\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n\r\n return options;\r\n }\r\n\r\n private parseParam(params: string[]): { align: string; random?: { min: number; max: number }; abs?: boolean } {\r\n const result: { align: string; random?: { min: number; max: number }; abs?: boolean } = { align: 'start' };\r\n\r\n params.forEach((param) => {\r\n if (param === 'abs') {\r\n result.abs = true;\r\n } else if (param.startsWith('random')) {\r\n const match = param.match(/random\\((\\d+),(\\d+)\\)/);\r\n if (match) {\r\n result.random = { min: parseInt(match[1]), max: parseInt(match[2]) };\r\n result.align = 'random';\r\n } else {\r\n result.align = 'random';\r\n }\r\n } else if (['start', 'center', 'end'].includes(param)) {\r\n result.align = param;\r\n } else {\r\n result.align = 'start';\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n public split(options: ISplitOptions, elementRoot: any): any {\r\n //let text = elementRoot.innerHTML;\r\n let text = elementRoot.getAttribute('string-split-original');\r\n if (text.length === 0) return '';\r\n\r\n text = this.decodeHtmlEntity(text);\r\n const element = document.createElement('span');\r\n const words = text.split(/\\s+/);\r\n let globalCharIndex = 0;\r\n let globalWordIndex = 0;\r\n const totalChars = text.replace(/\\s/g, '').length;\r\n\r\n const tempSpan = document.createElement('span');\r\n const compStyles = window.getComputedStyle(elementRoot);\r\n\r\n tempSpan.style.fontFamily = compStyles.fontFamily;\r\n tempSpan.style.fontSize = compStyles.fontSize;\r\n tempSpan.style.letterSpacing = compStyles.letterSpacing;\r\n tempSpan.style.lineHeight = compStyles.lineHeight;\r\n tempSpan.style.fontWeight = compStyles.fontWeight;\r\n tempSpan.classList.add('-s-char');\r\n document.body.appendChild(tempSpan);\r\n\r\n let virtualLines: any[] = [];\r\n let virtualLine: any[] = [];\r\n let currentLineWidth = 0;\r\n words.forEach((word: any, wordIndex: any) => {\r\n tempSpan.textContent = word;\r\n if (word.length > 0) {\r\n tempSpan.textContent += '\\u00a0';\r\n }\r\n\r\n const wordWidth = tempSpan.offsetWidth;\r\n\r\n const virtualWordSpan = {\r\n text: word,\r\n width: wordWidth,\r\n chars: new Array<any>(),\r\n };\r\n const chars = Array.from(word);\r\n chars.forEach((char, charIndex) => {\r\n const virtualCharSpan = {\r\n text: char,\r\n };\r\n\r\n virtualWordSpan.chars.push(virtualCharSpan);\r\n });\r\n if (currentLineWidth + wordWidth > elementRoot.offsetWidth) {\r\n virtualLines.push(virtualLine);\r\n virtualLine = [];\r\n currentLineWidth = 0;\r\n globalCharIndex += virtualLine.length;\r\n }\r\n virtualLine.push(virtualWordSpan);\r\n currentLineWidth += wordWidth;\r\n });\r\n\r\n virtualLines.push(virtualLine);\r\n\r\n let hasLineOptions = false;\r\n if (options.line != null) {\r\n if (options.line.length > 0) {\r\n hasLineOptions = true;\r\n }\r\n }\r\n if (options.wordLine != null) {\r\n if (options.wordLine.length > 0) {\r\n hasLineOptions = true;\r\n }\r\n }\r\n if (options.charLine != null) {\r\n if (options.charLine.length > 0) {\r\n hasLineOptions = true;\r\n }\r\n }\r\n\r\n let addedWordsCount = 0;\r\n if (hasLineOptions) {\r\n // for (let i = 0; i < virtualLines.length; i++) {\r\n // addedWordsCount += virtualLines[i].length;\r\n // }\r\n for (let i = 0; i < virtualLines.length; i++) {\r\n this.appendVirtualLineToDOM(\r\n i,\r\n virtualLines.length,\r\n words.length,\r\n element,\r\n virtualLines[i],\r\n options,\r\n globalCharIndex,\r\n totalChars,\r\n addedWordsCount\r\n );\r\n addedWordsCount += virtualLines[i].length;\r\n }\r\n } else {\r\n for (let i = 0; i < virtualLines.length; i++) {\r\n virtualLines[i].forEach((virtualWordSpan: any, wordIndex: any) => {\r\n if (virtualWordSpan.chars.length > 0) {\r\n const wordSpan = document.createElement('span');\r\n wordSpan.classList.add('-s-word');\r\n virtualWordSpan.chars.forEach((virtualCharSpan: any, charIndex: any) => {\r\n const charSpan = document.createElement('span');\r\n charSpan.classList.add('-s-char');\r\n charSpan.textContent = virtualCharSpan.text;\r\n this.applyOptions(charSpan, options.char, globalCharIndex, 'char', charIndex, totalChars);\r\n this.applyOptions(charSpan, options.charWord, charIndex, 'char-word', charIndex, virtualWordSpan.text.length);\r\n wordSpan.appendChild(charSpan);\r\n globalCharIndex++;\r\n });\r\n this.applyOptions(wordSpan, options.word, globalWordIndex, 'word', wordIndex, words.length);\r\n if (virtualWordSpan.chars.length > 0) {\r\n wordSpan.innerHTML += '\\u00a0';\r\n }\r\n element.appendChild(wordSpan);\r\n globalWordIndex++;\r\n }\r\n });\r\n }\r\n }\r\n\r\n document.body.removeChild(tempSpan);\r\n return { html: element.innerHTML };\r\n }\r\n\r\n // TODO: remove line - char,word\r\n private appendVirtualLineToDOM(\r\n lineIndex: number,\r\n length: number,\r\n totalWords: number,\r\n element: HTMLSpanElement,\r\n virtualLine: any[],\r\n options: ISplitOptions,\r\n globalCharIndex: number,\r\n totalChars: number,\r\n addedWordsCount: number\r\n ) {\r\n const lineSpan = document.createElement('span');\r\n lineSpan.classList.add('-s-line');\r\n\r\n this.applyOptions(lineSpan, options.line, lineIndex, 'line', 0, length);\r\n\r\n let lineCharIndex = 0;\r\n let globalWordIndex = 0;\r\n let totalLineChars = 0;\r\n virtualLine.forEach((virtualWordSpan, wordIndex) => {\r\n totalLineChars += virtualWordSpan.text.length;\r\n });\r\n virtualLine.forEach((virtualWordSpan, wordIndex) => {\r\n if (virtualWordSpan.chars.length > 0) {\r\n const wordSpan = document.createElement('span');\r\n wordSpan.classList.add('-s-word');\r\n\r\n virtualWordSpan.chars.forEach((virtualCharSpan: any, charIndex: any) => {\r\n const charSpan = document.createElement('span');\r\n charSpan.classList.add('-s-char');\r\n charSpan.textContent = virtualCharSpan.text;\r\n\r\n this.applyOptions(charSpan, options.char, globalCharIndex, 'char', charIndex, totalChars);\r\n this.applyOptions(charSpan, options.charLine, lineCharIndex, 'char-line', charIndex, totalLineChars);\r\n this.applyOptions(charSpan, options.charWord, charIndex, 'char-word', charIndex, virtualWordSpan.text.length);\r\n\r\n wordSpan.appendChild(charSpan);\r\n globalCharIndex++;\r\n lineCharIndex++;\r\n });\r\n\r\n this.applyOptions(\r\n wordSpan,\r\n options.word,\r\n addedWordsCount + globalWordIndex,\r\n 'word',\r\n addedWordsCount + globalWordIndex,\r\n totalWords - 1\r\n );\r\n this.applyOptions(wordSpan, options.wordLine, wordIndex, 'word-line', wordIndex, virtualLine.length);\r\n\r\n if (wordIndex < virtualLine.length - 1) {\r\n wordSpan.innerHTML += '\\u00a0';\r\n }\r\n // +'\\u00a0';\r\n\r\n lineSpan.appendChild(wordSpan);\r\n // if (wordIndex < virtualLine.length - 1) {\r\n // lineSpan.appendChild(this.createSpaceSpan());\r\n // }\r\n globalWordIndex++;\r\n }\r\n });\r\n\r\n element.appendChild(lineSpan);\r\n }\r\n\r\n private applyOptions(\r\n span: HTMLSpanElement,\r\n optionArray: any[] | undefined,\r\n globalIndex: number,\r\n type: string,\r\n localIndex: number,\r\n parentLength: number\r\n ) {\r\n if (optionArray) {\r\n optionArray.forEach((option, optionIndex) => {\r\n let index = this.calculateIndex(option, globalIndex, localIndex, parentLength);\r\n\r\n const variableName = this.generateVariableName(type, option, optionIndex);\r\n span.style.setProperty(variableName, String(index));\r\n });\r\n }\r\n }\r\n\r\n private createSpaceSpan(): HTMLSpanElement {\r\n const spaceSpan = document.createElement('span');\r\n spaceSpan.innerHTML = '\\u00a0';\r\n return spaceSpan;\r\n }\r\n\r\n private decodeHtmlEntity(str: string) {\r\n return str.replace(/&/g, '&');\r\n }\r\n\r\n private calculateIndex(\r\n options: { align: string; random?: { min: number; max: number }; abs?: boolean },\r\n globalIndex: number,\r\n localIndex: number,\r\n parentLength: number\r\n ): number {\r\n let index = globalIndex;\r\n if (options.align === 'random') {\r\n if (options.random === undefined) {\r\n options.random = { min: 0, max: parentLength };\r\n }\r\n const min = options.random.min || 0;\r\n const max = options.random.max || parentLength;\r\n index = Math.floor(Math.random() * (max - min + 1)) + min;\r\n }\r\n if (options.align === 'end') {\r\n index = parentLength - index - 1;\r\n } else if (options.align === 'center') {\r\n index = index - Math.floor(parentLength / 2);\r\n }\r\n\r\n if (options.abs) {\r\n index = Math.abs(index);\r\n }\r\n return index;\r\n }\r\n\r\n private generateVariableName(\r\n type: string,\r\n option: { align: string; random?: { min: number; max: number }; abs?: boolean },\r\n index: number\r\n ): string {\r\n let variableName = `--${type}`;\r\n if (option.align) {\r\n variableName += `-${option.align}`;\r\n }\r\n return variableName;\r\n }\r\n}\r\n","export class StringFPS{\r\n private isAnimationStarted: boolean = false\r\n private fpsInterval: any\r\n private _now: any\r\n private then: any\r\n private elapsed: any;\r\n private requestAnimationId: number = 0\r\n\r\n public get now() {\r\n return this._now\r\n }\r\n public onFrame = ()=>{}\r\n public start(fps: number) {\r\n if (this.isAnimationStarted) { return }\r\n this.fpsInterval = 1000 / fps;\r\n this.then = Date.now();\r\n this.animate();\r\n this.isAnimationStarted = true\r\n }\r\n public stop() {\r\n if (!this.isAnimationStarted) { return }\r\n cancelAnimationFrame(this.requestAnimationId)\r\n this.isAnimationStarted = false\r\n }\r\n private animate() {\r\n this.requestAnimationId = requestAnimationFrame(() => { this.animate() })\r\n this._now = Date.now();\r\n this.elapsed = this._now - this.then;\r\n if (this.elapsed > this.fpsInterval) {\r\n this.then = this._now - (this.elapsed % this.fpsInterval);\r\n this.onFrame()\r\n }\r\n }\r\n}","import { StringModule } from '../StringModule';\r\nimport { StringData } from '../Utils/StringData';\r\n\r\nexport class StringDelayLerpTracker extends StringModule {\r\n private canvas: any\r\n private context: any\r\n private positionHistory: any\r\n private maxHistory: any\r\n private currentPosition: any\r\n private targetPosition: any\r\n\r\n private canvasHeight = 0\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this._type = 2;\r\n\r\n \r\n\r\n \r\n }\r\n\r\n onStart(): void {\r\n this.canvas = document.createElement('canvas');\r\n this.context = this.canvas.getContext('2d');\r\n this.canvas.width = window.innerWidth * .5;\r\n this.canvas.height = window.innerHeight / 15 - 20;\r\n this.canvasHeight = window.innerHeight / 15 - 20;\r\n this.canvas.style.position = 'fixed';\r\n this.canvas.style.bottom = `${window.innerHeight / 20 + 10}px`;\r\n this.canvas.style.left = '50%';\r\n this.canvas.style.transform = 'translateX(-50%)';\r\n this.canvas.style.backgroundColor = '#000000';\r\n this.canvas.style.border = '1px solid rgba(255, 255, 255, 0.2)';\r\n this.canvas.style.zIndex = '1000';\r\n document.body.appendChild(this.canvas);\r\n\r\n this.positionHistory = [];\r\n this.maxHistory = this.canvas.width;\r\n this.currentPosition = 0;\r\n this.targetPosition = 0;\r\n }\r\n\r\n onScroll(data: StringData): void {\r\n this.currentPosition = Math.abs(this.data.dV);\r\n this.positionHistory.push(this.currentPosition);\r\n if (this.positionHistory.length > this.maxHistory) {\r\n this.positionHistory.shift();\r\n }\r\n this.drawGraph();\r\n }\r\n\r\n\r\n drawGraph() {\r\n const ctx = this.context;\r\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\r\n ctx.strokeStyle = '#e0e0e0';\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = 'red';\r\n ctx.lineWidth = 2;\r\n ctx.beginPath();\r\n this.positionHistory.forEach((pos: any, index: any) => {\r\n const x = index;\r\n const y = this.canvas.height - pos * this.canvasHeight;\r\n if (index === 0) {\r\n ctx.moveTo(x, y);\r\n } else {\r\n ctx.lineTo(x, y);\r\n }\r\n });\r\n ctx.stroke();\r\n }\r\n\r\n setTargetPosition(position: number) {\r\n this.targetPosition = position;\r\n }\r\n}\r\n","import { StringModule } from '../StringModule';\r\nimport { StringData } from '../Utils/StringData';\r\n\r\nexport class StringFPSTracker extends StringModule {\r\n private callCount: number = 0;\r\n private intervalId: any;\r\n private displayElement: any;\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this._type = 2;\r\n }\r\n private createDisplayElement() {\r\n this.displayElement = document.createElement('div');\r\n this.displayElement.style.position = 'fixed';\r\n this.displayElement.style.bottom = '10px';\r\n this.displayElement.style.right = '10px';\r\n this.displayElement.style.backgroundColor = '#000000';\r\n this.displayElement.style.border = '1px solid rgba(255, 255, 255, 0.2)';\r\n this.displayElement.style.zIndex = '9999';\r\n this.displayElement.setAttribute('data-fps', '0');\r\n document.body.appendChild(this.displayElement);\r\n const style = document.createElement('style');\r\n style.innerHTML = `\r\n [data-fps]::after {\r\n content: 'FPS: ' attr(fps);\r\n position: relative;\r\n display: block;\r\n color: #ffffff;\r\n padding: 5px 8px;\r\n font-family: Arial, sans-serif;\r\n font-size: 12px;\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n onStart() {\r\n this.createDisplayElement();\r\n this.intervalId = setInterval(() => {\r\n this.displayElement.setAttribute('fps', `${this.callCount}`);\r\n this.callCount = 0;\r\n }, 1000);\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.callCount++;\r\n }\r\n\r\n destructor() {\r\n clearInterval(this.intervalId);\r\n document.body.removeChild(this.displayElement);\r\n }\r\n}\r\n","import { StringModule } from '../StringModule';\r\nimport { StringData } from '../Utils/StringData';\r\n\r\nexport class StringLerpTracker extends StringModule {\r\n private canvas: any\r\n private context: any\r\n private positionHistory: any\r\n private maxHistory: any\r\n private currentPosition: any\r\n private targetPosition: any\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this._type = 2;\r\n\r\n \r\n\r\n \r\n }\r\n\r\n onStart(): void {\r\n this.canvas = document.createElement('canvas');\r\n this.context = this.canvas.getContext('2d');\r\n this.canvas.width = window.innerWidth * .5;\r\n this.canvas.height = window.innerHeight / 15 - 20;\r\n this.canvas.style.position = 'fixed';\r\n this.canvas.style.bottom = '10px';\r\n this.canvas.style.left = '50%';\r\n this.canvas.style.transform = 'translateX(-50%)';\r\n this.canvas.style.backgroundColor = '#000000';\r\n this.canvas.style.border = '1px solid rgba(255, 255, 255, 0.2)';\r\n this.canvas.style.zIndex = '1000';\r\n document.body.appendChild(this.canvas);\r\n\r\n this.positionHistory = [];\r\n this.maxHistory = this.canvas.width;\r\n this.currentPosition = 0;\r\n this.targetPosition = 0;\r\n }\r\n\r\n onScroll(data: StringData): void {\r\n this.currentPosition = Math.abs(this.data.v);\r\n this.positionHistory.push(this.currentPosition);\r\n if (this.positionHistory.length > this.maxHistory) {\r\n this.positionHistory.shift();\r\n }\r\n this.drawGraph();\r\n }\r\n\r\n\r\n drawGraph() {\r\n const ctx = this.context;\r\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\r\n ctx.strokeStyle = '#e0e0e0';\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = '#007bff';\r\n ctx.lineWidth = 2;\r\n ctx.beginPath();\r\n this.positionHistory.forEach((pos: any, index: any) => {\r\n const x = index;\r\n const y = this.canvas.height - pos / 2;\r\n if (index === 0) {\r\n ctx.moveTo(x, y);\r\n } else {\r\n ctx.lineTo(x, y);\r\n }\r\n });\r\n ctx.stroke();\r\n }\r\n\r\n setTargetPosition(position: number) {\r\n this.targetPosition = position;\r\n }\r\n}\r\n","import { StringModule } from '../StringModule';\r\nimport { StringData } from '../Utils/StringData';\r\n\r\nexport class StringPositionTracker extends StringModule {\r\n private callCount: number = 0;\r\n private intervalId: any;\r\n private displayElement: any;\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this._type = 2;\r\n }\r\n private createDisplayElement() {\r\n this.displayElement = document.createElement('div');\r\n this.displayElement.style.position = 'fixed';\r\n this.displayElement.style.bottom = '10px';\r\n this.displayElement.style.left = '10px';\r\n this.displayElement.style.backgroundColor = '#000000';\r\n this.displayElement.style.border = '1px solid rgba(255, 255, 255, 0.2)';\r\n this.displayElement.style.zIndex = '9999';\r\n this.displayElement.setAttribute('data-position', '0');\r\n document.body.appendChild(this.displayElement);\r\n const style = document.createElement('style');\r\n style.innerHTML = `\r\n [data-position]::after {\r\n content: attr(direction) 'Top: ' attr(value) 'px';\r\n position: relative;\r\n display: block;\r\n color: #ffffff;\r\n padding: 5px 8px;\r\n font-family: Arial, sans-serif;\r\n font-size: 12px;\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n onStart() {\r\n this.createDisplayElement();\r\n }\r\n\r\n onScroll(data: StringData): void {\r\n let dirSymbol = ``;\r\n if (data.c < data.t) {\r\n dirSymbol = `↓`;\r\n }\r\n if (data.c > data.t) {\r\n dirSymbol = `↑`;\r\n }\r\n this.displayElement.setAttribute('direction', dirSymbol);\r\n this.displayElement.setAttribute('value', `${this.data.c}`);\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.callCount++;\r\n }\r\n\r\n destructor() {\r\n document.body.removeChild(this.displayElement);\r\n }\r\n}\r\n","export class StringAttribute{\r\n process(e: any, n: string, d: any = null) {\r\n return e.getAttribute(n) == null ? d : e.getAttribute(n)\r\n }\r\n}","export class StringBoundingClientRect {\r\n process(e: any) {\r\n return e.getBoundingClientRect();\r\n }\r\n}\r\n","export class StringData {\r\n three: any = null;\r\n\r\n t: number = 0;\r\n c: number = 0;\r\n d: number = 0;\r\n v: number = 0;\r\n dV: number = 0;\r\n sDB: boolean = false;\r\n\r\n bS: number = 0;\r\n cF: number = 1;\r\n wS: number = 0;\r\n hnwS: number = 0;\r\n\r\n psW: number = 0;\r\n psH: number = 0;\r\n\r\n scsW: number = 1;\r\n scsH: number = 1;\r\n sD: 'vertical' | 'horizontal' = 'vertical';\r\n sC: any;\r\n sM: 'smooth' | 'disable' | 'default' = 'smooth';\r\n}\r\n","export class StringEvent{\r\n\r\n private eventsByKey: Map<string, Array<Function>> = new Map<string, Array<Function>>()\r\n private events: Array<Function> = new Array<Function>()\r\n on(id: string, event: Function){\r\n if ( this.eventsByKey.has(id) == false) { \r\n this.eventsByKey.set(id, [])\r\n }\r\n this.eventsByKey.get(id)?.push(event)\r\n this.updateAllEvents()\r\n }\r\n public has(id: string) {\r\n return this.eventsByKey.has(id)\r\n }\r\n public emit(id: string, value: any) {\r\n if (this.eventsByKey.has(id)) {\r\n this.eventsByKey.get(id)?.forEach((event: any) => {\r\n event(value)\r\n });\r\n }\r\n }\r\n public off(id: string, event: Function) {\r\n let ea = this.eventsByKey.get(id)\r\n if (ea!=null) {\r\n this.eventsByKey.set(id, ea.filter((h: any) => h !== event))\r\n }\r\n this.updateAllEvents()\r\n }\r\n public all(value: any) {\r\n this.events.forEach(event => {\r\n event(value)\r\n });\r\n }\r\n private updateAllEvents() {\r\n Array.from(this.eventsByKey.values()).forEach(listOfEvents => {\r\n listOfEvents.forEach(event => {\r\n this.events.push(event)\r\n });\r\n });\r\n }\r\n}","export class StringParser{\r\n public parseSingle(v: string, element: any, wH: any, baseRem: number): number {\r\n let isNegative = v.startsWith('-');\r\n if (isNegative) {\r\n v = v.slice(1);\r\n }\r\n let pV;\r\n if (v === 'selfHeight') {\r\n pV = element.offsetHeight;\r\n } else if (v.endsWith('px')) {\r\n pV = parseFloat(v);\r\n } else if (v.endsWith('%')) {\r\n pV = parseFloat(v) * wH / 100;\r\n } else if (v.endsWith('rem')) {\r\n pV = parseFloat(v) * baseRem;\r\n }\r\n return isNegative ? -pV : pV;\r\n }\r\n}","function nullifyTransforms(el: any) {\r\n let { top, left, width, height } = el.getBoundingClientRect();\r\n let transformArr = parseTransform(el);\r\n if (transformArr.length == 6) {\r\n var t = transformArr;\r\n let det = t[0] * t[3] - t[1] * t[2];\r\n return {\r\n width: width / t[0] == 0 ? 1 : t[0],\r\n height: height / t[3] == 0 ? 1 : t[3],\r\n left: (left * t[3] - top * t[2] + t[2] * t[5] - t[4] * t[3]) / det,\r\n top: (-left * t[1] + top * t[0] + t[4] * t[1] - t[0] * t[5]) / det,\r\n };\r\n } else {\r\n return { top, left, width, height };\r\n }\r\n function parseTransform(el: any) {\r\n let transform = window.getComputedStyle(el).transform;\r\n return transform\r\n .split(/\\(|,|\\)/)\r\n .slice(1, -1)\r\n .map(function (v) {\r\n return parseFloat(v);\r\n });\r\n }\r\n}\r\n\r\nexport class StringPosition {\r\n process(e: any, container: any = document.body) {\r\n let br;\r\n try {\r\n br = container.getBoundingClientRect();\r\n } catch (error) {\r\n br = document.body.getBoundingClientRect();\r\n }\r\n let er = nullifyTransforms(e);\r\n let o = er.top - br.top;\r\n let oL = er.left - br.left;\r\n return { top: o, left: oL };\r\n }\r\n}\r\n","import { IStringModule } from './IStringModule';\r\nimport { StringLazy } from './Loading/Modules/StringLazy';\r\nimport { StringLoading } from './Loading/Modules/StringLoading';\r\nimport { StringVideoAutoplay } from './Loading/Modules/StringVideoAutoplay';\r\nimport { StringCursor } from './Mouse/Modules/StringCursor';\r\nimport { StringMagnetic } from './Mouse/Modules/StringMagnetic';\r\nimport { StringVirtualCursor } from './Mouse/StringVirtualCursor';\r\nimport { StringObject } from './Objects/StringObject';\r\nimport { StringResponsive } from './Screen/StringResponsive';\r\nimport { StringScrollbar } from './Scroll/Modules/Scrollbar/StringScrollbar';\r\nimport { StringGlide } from './Scroll/Modules/StringGlide';\r\nimport { StringLerp } from './Scroll/Modules/StringLerp';\r\nimport { StringParallax } from './Scroll/Modules/StringParallax';\r\nimport { StringProgress } from './Scroll/Modules/StringProgress';\r\nimport { StringScroll } from './Scroll/Types/StringScroll';\r\nimport { StringScrollDefault } from './Scroll/Types/StringScrollDefault';\r\nimport { StringScrollDisable } from './Scroll/Types/StringScrollDisable';\r\nimport { StringScrollSmooth } from './Scroll/Types/StringScrollSmooth';\r\nimport { StringTypeSettings } from './Scroll/Types/StringTypeSettings';\r\nimport { StringSplit } from './Split/Modules/StringSplit';\r\nimport { StringFPS } from './StringFPS';\r\nimport { StringModule } from './StringModule';\r\nimport { StringDelayLerpTracker } from './Tracker/StringDelayLerpTracker';\r\nimport { StringFPSTracker } from './Tracker/StringFPSTracker';\r\nimport { StringLerpTracker } from './Tracker/StringLerpTracker';\r\nimport { StringPositionTracker } from './Tracker/StringPositionTracker';\r\nimport { StringAttribute } from './Utils/StringAttribute';\r\nimport { StringBoundingClientRect } from './Utils/StringBoundingClientRect';\r\nimport { StringData } from './Utils/StringData';\r\nimport { StringEvent } from './Utils/StringEvent';\r\nimport { StringLerpCalc } from './Utils/StringLerpCalc';\r\nimport { StringParser } from './Utils/StringParser';\r\nimport { StringPosition } from './Utils/StringPosition';\r\n\r\nfunction isTouchDevice() {\r\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\r\n}\r\n\r\nclass StringTune {\r\n private static i: StringTune;\r\n private modules: Array<IStringModule> = new Array<IStringModule>();\r\n private modulesUI: Array<IStringModule> = new Array<IStringModule>();\r\n private events: StringEvent = new StringEvent();\r\n private loop: StringFPS = new StringFPS();\r\n\r\n private onWheelBind: any;\r\n private onScrollBind: any;\r\n private onResizeBind: any;\r\n private onMouseMoveBind: any;\r\n\r\n private wW: number = 0;\r\n private wH: number = 0;\r\n\r\n private root: any;\r\n private window: any;\r\n\r\n private _virtualCursor: StringVirtualCursor = new StringVirtualCursor();\r\n private _lerp: StringLerpCalc = new StringLerpCalc();\r\n private _attribute: StringAttribute = new StringAttribute();\r\n private _boundingClientRect: StringBoundingClientRect = new StringBoundingClientRect();\r\n private _position: StringPosition = new StringPosition();\r\n\r\n private sEn: StringScroll;\r\n private sEnSmooth: StringScrollSmooth;\r\n private sEnDefault: StringScrollDefault;\r\n private sEnDisable: StringScrollDisable;\r\n\r\n private settings: StringTypeSettings;\r\n private data: StringData;\r\n\r\n protected objects: Map<string, StringObject> = new Map<string, StringObject>();\r\n\r\n protected connectQueue: Array<any> = new Array<any>();\r\n\r\n private globalId: number = 1;\r\n\r\n private _parser = new StringParser();\r\n\r\n get scrollDirection() {\r\n return this.data.sD;\r\n }\r\n\r\n set scrollDirection(scrollDirection: 'vertical' | 'horizontal') {\r\n this.data.sD = scrollDirection;\r\n\r\n this.sEn.scrollDirection = scrollDirection;\r\n this.sEnSmooth.scrollDirection = scrollDirection;\r\n this.sEnDefault.scrollDirection = scrollDirection;\r\n this.sEnDisable.scrollDirection = scrollDirection;\r\n\r\n if (scrollDirection == 'horizontal') {\r\n document.documentElement.classList.add('-horizontal');\r\n document.documentElement.classList.remove('-vertical');\r\n } else {\r\n document.documentElement.classList.add('-vertical');\r\n document.documentElement.classList.remove('-horizontal');\r\n }\r\n\r\n this.rebuild();\r\n this.initObjects();\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onChangeScrollDirection();\r\n });\r\n }\r\n get speedAccelerate() {\r\n return this.settings.speedAccelerate;\r\n }\r\n set speedAccelerate(speed: number) {\r\n this.settings.speedAccelerate = 0.1 + (0.5 - 0.1) * speed;\r\n }\r\n get speed() {\r\n return this.settings.speed;\r\n }\r\n set speed(speed: number) {\r\n this.settings.speed = speed;\r\n }\r\n\r\n get scrollPosition() {\r\n return this.data.c;\r\n }\r\n set scrollPosition(scrollPosition: number) {\r\n this.data.c = scrollPosition;\r\n this.data.t = scrollPosition;\r\n window.scrollTo(0, this.data.c);\r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onScroll(this.data);\r\n }\r\n \r\n }\r\n set scrollContainer(container: any) {\r\n let isUpdateEvents = this.data.sC != null;\r\n if (isUpdateEvents) {\r\n this.data.sC.removeEventListener('scroll', this.onScrollBind);\r\n this.data.sC.removeEventListener('resize', this.onResizeBind);\r\n }\r\n this.sEn.scrollContainer = container;\r\n this.sEnSmooth.scrollContainer = container;\r\n this.sEnDefault.scrollContainer = container;\r\n this.sEnDisable.scrollContainer = container;\r\n this.data.sC = container;\r\n if (isUpdateEvents) {\r\n this.data.sC.addEventListener('scroll', this.onScrollBind);\r\n this.data.sC.addEventListener('resize', this.onResizeBind);\r\n }\r\n this.rebuild();\r\n this.initObjects();\r\n }\r\n\r\n private scrollMode: 'smooth' | 'disable' | 'default' = 'smooth';\r\n private mMode: 'disable' | 'default' = 'default';\r\n set scrollMobileMode(mobileMode: 'disable' | 'default') {\r\n this.mMode = mobileMode;\r\n this.updateModeParams();\r\n }\r\n private dMode: 'smooth' | 'disable' | 'default' = 'smooth';\r\n set scrollDesktopMode(desktopMode: 'smooth' | 'disable' | 'default') {\r\n this.dMode = desktopMode;\r\n this.updateModeParams();\r\n }\r\n private updateModeParams() {\r\n if (this.window.innerWidth < 1024 || isTouchDevice()) {\r\n this.scrollMode = this.mMode;\r\n } else {\r\n this.scrollMode = this.dMode;\r\n }\r\n switch (this.scrollMode) {\r\n case 'disable':\r\n this.data.sM = 'disable';\r\n this.sEn = this.sEnDisable;\r\n this.onChangeScrollParams();\r\n document.documentElement.style.overflow = 'hidden';\r\n break;\r\n case 'default':\r\n this.data.sM = 'default';\r\n this.sEn = this.sEnDefault;\r\n this.onChangeScrollParams();\r\n document.documentElement.style.overflow = 'auto';\r\n break;\r\n case 'smooth':\r\n this.data.sM = 'smooth';\r\n this.sEn = this.sEnSmooth;\r\n this.onChangeScrollParams();\r\n document.documentElement.style.overflow = 'auto';\r\n break;\r\n default:\r\n this.data.sM = 'smooth';\r\n this.sEn = this.sEnSmooth;\r\n this.onChangeScrollParams();\r\n document.documentElement.style.overflow = 'auto';\r\n break;\r\n }\r\n }\r\n\r\n private constructor() {\r\n this.root = document.body;\r\n this.window = window;\r\n\r\n this.settings = new StringTypeSettings();\r\n this.data = new StringData();\r\n \r\n\r\n this.sEnSmooth = new StringScrollSmooth(document, this.settings, this.data);\r\n this.sEnDefault = new StringScrollDefault(document, this.settings, this.data);\r\n this.sEnDisable = new StringScrollDisable(document, this.settings, this.data);\r\n\r\n this.sEnSmooth.onScrollStop = this.onScrollStop.bind(this);\r\n this.sEnDefault.onScrollStop = this.onScrollStop.bind(this);\r\n this.sEnDisable.onScrollStop = this.onScrollStop.bind(this);\r\n\r\n this.sEnSmooth.onChangeDirection = this.onChangeDirection.bind(this);\r\n this.sEnDefault.onChangeDirection = this.onChangeDirection.bind(this);\r\n this.sEnDisable.onChangeDirection = this.onChangeDirection.bind(this);\r\n\r\n this.sEnSmooth.onScrollStart = this.onScrollStart.bind(this);\r\n this.sEnDefault.onScrollStart = this.onScrollStart.bind(this);\r\n this.sEnDisable.onScrollStart = this.onScrollStart.bind(this);\r\n\r\n this.sEn = this.sEnSmooth;\r\n this.scrollContainer = window;\r\n this.data.sC = this.window;\r\n\r\n this.data.sD = 'vertical';\r\n document.documentElement.classList.add('-vertical');\r\n\r\n this.onWheelBind = this.onWheelEvent.bind(this);\r\n this.onScrollBind = this.onScrollEvent.bind(this);\r\n this.onResizeBind = this.onResizeEvent.bind(this);\r\n this.onMouseMoveBind = this.onMouseMoveEvent.bind(this);\r\n this.loop.onFrame = () => {\r\n this.onUpdateEvent();\r\n };\r\n this.rebuild();\r\n }\r\n\r\n public static getInstance(): StringTune {\r\n if (!StringTune.i) {\r\n StringTune.i = new StringTune();\r\n }\r\n return StringTune.i;\r\n }\r\n\r\n public use(objectClass: typeof StringModule, settings: any = null) {\r\n const module = new objectClass(\r\n {\r\n data: this.data,\r\n lerp: this._lerp,\r\n attribute: this._attribute,\r\n boundingClientRect: this._boundingClientRect,\r\n position: this._position,\r\n virtualCursor: this._virtualCursor,\r\n events: this.events,\r\n loop: this.loop,\r\n },\r\n settings\r\n );\r\n\r\n if (module.type == 1) {\r\n this.modules.push(module);\r\n }\r\n if (module.type == 2) {\r\n this.modulesUI.push(module);\r\n }\r\n }\r\n public start(fps: number) {\r\n this.data.sC.addEventListener('scroll', this.onScrollBind);\r\n this.data.sC.addEventListener('resize', this.onResizeBind);\r\n\r\n this.root.addEventListener('wheel', this.onWheelBind, { passive: false });\r\n this.root.addEventListener('mousemove', this.onMouseMoveBind);\r\n\r\n const resizeObserver = new ResizeObserver((entries) => {\r\n Array.from(this.objects.values()).forEach((object) => {\r\n this.setupObject(object.el, object);\r\n });\r\n });\r\n resizeObserver.observe(document.body);\r\n\r\n this.loop.start(fps);\r\n document.documentElement.classList.add('-string');\r\n \r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onStart();\r\n }\r\n for (let i = 0; i < this.modulesUI.length; i++) {\r\n this.modulesUI[i].onStart();\r\n }\r\n\r\n this.initObjects();\r\n this.initMutationObserver();\r\n }\r\n\r\n private onChangeScrollParams() {\r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onChangeScrollParams();\r\n }\r\n for (let i = 0; i < this.modulesUI.length; i++) {\r\n this.modulesUI[i].onChangeScrollParams();\r\n }\r\n }\r\n\r\n private initObjects() {\r\n document.querySelectorAll('[string]').forEach((element) => {\r\n this.addObject(element as any);\r\n });\r\n document.querySelectorAll('[string-copy-from]').forEach((element) => {\r\n let connectTargetId = this._attribute.process(element, 'string-copy-from');\r\n if (connectTargetId != null && this.objects.has(connectTargetId)) {\r\n let connectTargetObject = this.objects.get(connectTargetId);\r\n if (connectTargetObject != null) {\r\n connectTargetObject.connects.push(element as any);\r\n }\r\n }\r\n });\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onResize();\r\n module.onScroll(this.data);\r\n module.onUpdate(this.data);\r\n });\r\n }\r\n\r\n public destroy() {\r\n this.window.removeEventListener('scroll', this.onScrollBind);\r\n this.root.removeEventListener('wheel', this.onScrollBind);\r\n this.window.removeEventListener('resize', this.onResizeBind);\r\n this.root.removeEventListener('mousemove', this.onMouseMoveBind);\r\n this.loop.stop();\r\n this.modules.forEach((module: IStringModule) => {\r\n module.destructor();\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.destructor();\r\n });\r\n }\r\n\r\n public on(key: 'scroll' | 'progress' | 'intersection' | 'lerp' | 'inview' | 'cursor', event: any, id: string = '') {\r\n switch (key) {\r\n case 'scroll':\r\n this.events.on(`scroll`, event);\r\n break;\r\n case 'progress':\r\n this.events.on(`progress_${id}`, event);\r\n break;\r\n case 'lerp':\r\n this.events.on(`lerp`, event);\r\n break;\r\n case 'intersection':\r\n this.events.on(`intersection_${id}`, event);\r\n break;\r\n case 'inview':\r\n this.events.on(`inview_${id}`, event);\r\n break;\r\n case 'cursor':\r\n this.events.on(`cursor`, event);\r\n break;\r\n }\r\n }\r\n public off(key: 'scroll' | 'progress' | 'intersection' | 'lerp' | 'inview' | 'cursor', event: any, id: string = '') {\r\n switch (key) {\r\n case 'scroll':\r\n this.events.off(`scroll`, event);\r\n break;\r\n case 'progress':\r\n this.events.off(`progress_${id}`, event);\r\n break;\r\n case 'lerp':\r\n this.events.off(`lerp`, event);\r\n break;\r\n case 'intersection':\r\n this.events.off(`intersection_${id}`, event);\r\n break;\r\n case 'inview':\r\n this.events.off(`inview_${id}`, event);\r\n break;\r\n case 'cursor':\r\n this.events.off(`cursor`, event);\r\n break;\r\n }\r\n }\r\n\r\n private defaultSettings: any = {\r\n stringOffsetStart: '0%',\r\n stringOffsetEnd: '0%',\r\n\r\n stringEnterEl: 'top',\r\n stringExitEl: 'bottom',\r\n stringEnterVp: 'bottom',\r\n stringExitVp: 'top',\r\n\r\n stringInviewTop: '0%',\r\n stringInviewBottom: '0%',\r\n\r\n stringKey: '--progress',\r\n\r\n stringStrength: 0.3,\r\n stringRadius: 150,\r\n stringLerp: 0.2,\r\n stringParallaxBias: 0.0,\r\n stringParallax: 0.2,\r\n };\r\n\r\n public setupSettings(settings: any) {\r\n if (settings['string-offset-top'] != null) {\r\n this.defaultSettings.stringOffsetStart = settings['string-offset-top'];\r\n }\r\n if (settings['string-offset-bottom'] != null) {\r\n this.defaultSettings.stringOffsetEnd = settings['string-offset-bottom'];\r\n }\r\n if (settings['string-offset-left'] != null) {\r\n this.defaultSettings.stringOffsetStart = settings['string-offset-left'];\r\n }\r\n if (settings['string-offset-right'] != null) {\r\n this.defaultSettings.stringOffsetEnd = settings['string-offset-right'];\r\n }\r\n\r\n if (settings[`string-inview-top`] != null) {\r\n this.defaultSettings.stringInviewTop = settings[`string-inview-top`];\r\n }\r\n if (settings[`string-inview-left`] != null) {\r\n this.defaultSettings.stringInviewTop = settings[`string-inview-left`];\r\n }\r\n if (settings[`string-inview-bottom`] != null) {\r\n this.defaultSettings.stringInviewBottom = settings['string-inview-bottom'];\r\n }\r\n if (settings[`string-inview-right`] != null) {\r\n this.defaultSettings.stringInviewBottom = settings['string-inview-right'];\r\n }\r\n\r\n if (settings['string-enter-el'] != null) {\r\n this.defaultSettings.stringEnterEl = settings['string-enter-el'];\r\n }\r\n if (settings['string-enter-vp'] != null) {\r\n this.defaultSettings.stringEnterVp = settings['string-enter-vp'];\r\n }\r\n if (settings['string-exit-el'] != null) {\r\n this.defaultSettings.stringExitEl = settings['string-exit-el'];\r\n }\r\n if (settings['string-exit-vp'] != null) {\r\n this.defaultSettings.stringExitVp = settings['string-exit-vp'];\r\n }\r\n if (settings['string-key'] != null) {\r\n this.defaultSettings.stringKey = settings['string-key'];\r\n }\r\n\r\n if (settings['string-strength'] != null) {\r\n this.defaultSettings.stringStrength = settings['string-strength'];\r\n }\r\n if (settings['string-radius'] != null) {\r\n this.defaultSettings.stringRadius = settings['string-radius'];\r\n }\r\n if (settings['string-lerp'] != null) {\r\n this.defaultSettings.stringLerp = settings['string-lerp'];\r\n }\r\n\r\n if (settings['string-parallax-bias'] != null) {\r\n this.defaultSettings.stringParallaxBias = settings['string-parallax-bias'];\r\n }\r\n if (settings['string-parallax'] != null) {\r\n this.defaultSettings.stringParallax = settings['string-parallax'];\r\n }\r\n }\r\n\r\n protected setupObject(el: HTMLElement, object: StringObject) {\r\n object.showObserver?.disconnect();\r\n object.progressObserver?.disconnect();\r\n object.inviewObserver?.disconnect();\r\n\r\n let r = this._boundingClientRect.process(el);\r\n let rW = r.width / this.data.scsW;\r\n let rH = r.height / this.data.scsH;\r\n\r\n let startElementPosition = this._attribute.process(el, `string-enter-el`) || this.defaultSettings.stringEnterEl;\r\n let startSourcePosition = this._attribute.process(el, `string-enter-vp`) || this.defaultSettings.stringEnterVp;\r\n let endElementPosition = this._attribute.process(el, `string-exit-el`) || this.defaultSettings.stringExitEl;\r\n let endSourcePosition = this._attribute.process(el, `string-exit-vp`) || this.defaultSettings.stringExitVp;\r\n\r\n object.inviewTop =\r\n this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-inview-top`,\r\n this._attribute.process(el, `string-inview-left`, this.defaultSettings.stringInviewTop)\r\n ),\r\n el,\r\n this.data.sD == 'vertical' ? rH : rW,\r\n 16\r\n ) * -1;\r\n object.inviewBottom =\r\n this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-inview`,\r\n this._attribute.process(\r\n el,\r\n `string-inview-bottom`,\r\n this._attribute.process(el, `string-inview-right`, this.defaultSettings.stringInviewBottom)\r\n )\r\n ),\r\n el,\r\n this.data.sD == 'vertical' ? rH : rW,\r\n 16\r\n ) * -1;\r\n\r\n object.selfDisable = this._attribute.process(el, `string-self-disable`) == null ? false : true;\r\n object.abs = this._attribute.process(el, `string-abs`) == null ? false : true;\r\n\r\n let targetQuery = this._attribute.process(el, `string-cursor-target`);\r\n\r\n if (targetQuery != null) {\r\n object.cursorTarget = document.querySelector(`[string-cursor-content=\"${targetQuery}\"]`);\r\n }\r\n\r\n object.id = this._attribute.process(el, `string-id`, `string-${this.globalId}`);\r\n object.key = this._attribute.process(el, `string-key`, this.defaultSettings.stringKey);\r\n\r\n\r\n object.type3D = this._attribute.process(el, `string-3d`, 'box');\r\n object.model3D = this._attribute.process(el, `string-3d-model`, '');\r\n\r\n const materialAttr = this._attribute.process(el, `string-3d-material`, 'basic[#0000ff]');\r\n const [materialType, color] = materialAttr.split(/[\\[\\]]/);\r\n object.color3D = color\r\n object.material3D = materialType\r\n\r\n const animationAttr = this._attribute.process(el, `string-3d-animation`, '');\r\n const partsAnimation = animationAttr.split('|');\r\n partsAnimation.forEach((partAnimation: any) => {\r\n const matchAnimation = partAnimation.match(/^(\\w+-)?(\\w+)(\\[(.*?)\\])?$/);\r\n if (matchAnimation != null) {\r\n let values = matchAnimation[4].split(';')\r\n let startValues = values[0].split(',')\r\n let endValues = values[1].split(',')\r\n if (matchAnimation[2] == 'rotate') {\r\n object.animations3D.push((progress: number, mesh: any) => {\r\n mesh.rotation.set(\r\n startValues[0] + (endValues[0] - startValues[0]) * progress,\r\n startValues[1] + (endValues[1] - startValues[1]) * progress,\r\n startValues[2] + (endValues[2] - startValues[2]) * progress)\r\n })\r\n }\r\n \r\n }\r\n })\r\n \r\n\r\n\r\n object.strength = this._attribute.process(el, 'string-strength', this.defaultSettings.stringStrength);\r\n object.radius = this._attribute.process(el, 'string-radius', this.defaultSettings.stringRadius);\r\n object.lerp = this._attribute.process(el, 'string-lerp', this.defaultSettings.stringLerp);\r\n object.weight = this._attribute.process(el, 'string-weight', 0.0);\r\n object.glide = this._attribute.process(el, 'string-glide', 1);\r\n\r\n let parallaxPosition = this._attribute.process(el, 'string-parallax-bias', this.defaultSettings.stringParallaxBias);\r\n object.parallaxPositionStart = -0.5 + 0.5 * parallaxPosition;\r\n object.parallaxPositionEnd = 0.5 + 0.5 * (1 - parallaxPosition);\r\n\r\n el.setAttribute(`string-id`, object.id);\r\n if (this.data.sD == 'vertical') {\r\n object.size = rH;\r\n } else {\r\n object.size = rW;\r\n }\r\n\r\n object.oStart = this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-offset-top`,\r\n this._attribute.process(el, `string-offset-left`, this.defaultSettings.stringOffsetStart)\r\n ),\r\n el,\r\n this.data.wS,\r\n 16\r\n );\r\n object.oEnd = this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-offset-bottom`,\r\n this._attribute.process(el, `string-offset-right`, this.defaultSettings.stringOffsetEnd)\r\n ),\r\n el,\r\n this.data.wS,\r\n 16\r\n );\r\n\r\n let observerStart = this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-offset-top`,\r\n this._attribute.process(el, `string-offset-left`, this.defaultSettings.stringOffsetStart)\r\n ),\r\n el,\r\n this.data.wS,\r\n 16\r\n );\r\n let observerEnd = this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-offset-bottom`,\r\n this._attribute.process(el, `string-offset-right`, this.defaultSettings.stringOffsetEnd)\r\n ),\r\n el,\r\n this.data.wS,\r\n 16\r\n );\r\n\r\n let stringModuleKeys = this._attribute.process(object.el, 'string', '').split('|');\r\n object.factor = 0;\r\n if (stringModuleKeys.includes('parallax')) {\r\n observerStart = 0;\r\n observerEnd = 0;\r\n object.oStart = 0;\r\n object.oEnd = 0;\r\n object.factor = this._attribute.process(el, `string-parallax`, this.defaultSettings.stringParallax);\r\n object.oStart += object.factor * this.data.wS;\r\n object.oEnd += object.factor * this.data.wS;\r\n }\r\n\r\n object.repeat = this._attribute.process(el, `string-repeat`) == null ? false : true;\r\n object.sElPos = startElementPosition;\r\n object.sScrPos = startSourcePosition;\r\n object.eElPos = endElementPosition;\r\n object.eScrPos = endSourcePosition;\r\n\r\n object.halfWidth = rW / 2;\r\n object.halfHeight = rH / 2;\r\n\r\n let windowSize = this.data.wS;\r\n if (this.data.sD == 'vertical') {\r\n let startPos = this._position.process(el, this.data.sC).top / this.data.scsH;\r\n object.start = startPos;\r\n object.end = startPos + rH;\r\n } else {\r\n let startPos = this._position.process(el, this.data.sC).left / this.data.scsW;\r\n object.start = startPos;\r\n object.end = startPos + rW;\r\n }\r\n object.calculatePositions(windowSize);\r\n\r\n let connectItems = this.connectQueue.filter((connectQueueItem: any) => {\r\n return connectQueueItem.id == object.id;\r\n });\r\n this.connectQueue = this.connectQueue.filter((connectQueueItem: any) => {\r\n return connectQueueItem.id != object.id;\r\n });\r\n\r\n connectItems.forEach((connectItem) => {\r\n object.connects.push(connectItem.element);\r\n });\r\n\r\n let callbackProgress = (es: any) => {\r\n es.forEach((e: any) => {\r\n if (e.isIntersecting) {\r\n if (object.active == false) {\r\n this.events.emit(`activate_object_${object.id}`, true);\r\n object.enter();\r\n }\r\n } else {\r\n if (object.active == true) {\r\n this.events.emit(`activate_object_${object.id}`, false);\r\n object.leave();\r\n }\r\n }\r\n });\r\n };\r\n let callbackInview = (es: any) => {\r\n es.forEach((e: any) => {\r\n if (e.isIntersecting) {\r\n this.events.emit(`inview_${object.id}`, true);\r\n object.show();\r\n } else {\r\n this.events.emit(`inview_${object.id}`, false);\r\n object.hide();\r\n }\r\n });\r\n };\r\n let callbackIntersection = (es: any) => {\r\n es.forEach((e: any) => {\r\n if (e.isIntersecting) {\r\n this.events.emit(`intersection_${object.id}`, true);\r\n } else {\r\n this.events.emit(`intersection_${object.id}`, false);\r\n }\r\n });\r\n };\r\n\r\n let optionsProgress: any;\r\n let optionsInview: any;\r\n if (this.data.sD == 'vertical') {\r\n optionsProgress = {\r\n root: null,\r\n rootMargin: `${observerStart + this.data.wS}px 0px ${observerEnd + this.data.wS}px 0px`,\r\n threshold: 0.001,\r\n };\r\n optionsInview = {\r\n root: null,\r\n rootMargin: `${observerStart + object.inviewTop}px 0px ${observerEnd + object.inviewBottom}px 0px`,\r\n threshold: 0.001,\r\n };\r\n } else {\r\n optionsProgress = {\r\n root: null,\r\n rootMargin: `0px ${observerStart + this.data.wS}px 0px ${observerEnd + this.data.wS}px`,\r\n threshold: 0.001,\r\n };\r\n optionsInview = {\r\n root: null,\r\n rootMargin: `0px ${observerStart + object.inviewTop}px 0px ${observerEnd + object.inviewBottom}px`,\r\n threshold: 0.001,\r\n };\r\n }\r\n\r\n let optionsIntersection = {\r\n root: null,\r\n rootMargin: `0px 0px 0px 0px`,\r\n threshold: 0.001,\r\n };\r\n\r\n let obProgress = new IntersectionObserver(callbackProgress, optionsProgress);\r\n let obIntersection = new IntersectionObserver(callbackIntersection, optionsIntersection);\r\n let obInview = new IntersectionObserver(callbackInview, optionsInview);\r\n obProgress.observe(el);\r\n obIntersection.observe(el);\r\n obInview.observe(el);\r\n\r\n object.showObserver = obIntersection;\r\n object.progressObserver = obProgress;\r\n object.inviewObserver = obInview;\r\n }\r\n\r\n addObject(el: HTMLElement) {\r\n let isInit = this._attribute.process(el, 'string-inited');\r\n let object: any;\r\n if (isInit == null) {\r\n object = new StringObject(el);\r\n } else {\r\n if (this.objects.has(this._attribute.process(el, 'string-id'))) {\r\n object = this.objects.get(this._attribute.process(el, 'string-id'));\r\n } else {\r\n object = new StringObject(el);\r\n }\r\n }\r\n el.setAttribute(`string-inited`, '');\r\n this.setupObject(el, object);\r\n this.modules.forEach((module: IStringModule) => {\r\n if (module.tryConnect(object)) {\r\n module.connect(object);\r\n }\r\n });\r\n this.objects.set(object.id, object);\r\n this.globalId++;\r\n }\r\n\r\n public removeObject(id: string) {\r\n let removedObject = this.objects.get(id);\r\n if (removedObject?.showObserver != null) {\r\n removedObject?.showObserver.disconnect();\r\n }\r\n if (removedObject?.progressObserver != null) {\r\n removedObject?.progressObserver.disconnect();\r\n }\r\n if (removedObject?.inviewObserver != null) {\r\n removedObject?.inviewObserver.disconnect();\r\n }\r\n this.objects.delete(id);\r\n removedObject?.el.removeAttribute(`string-inited`);\r\n removedObject?.leave();\r\n removedObject = undefined;\r\n }\r\n\r\n private onMouseMoveEvent(e: MouseEvent) {\r\n this._virtualCursor.onMouseMove(e);\r\n\r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onMouseMove(e);\r\n }\r\n for (let i = 0; i < this.modulesUI.length; i++) {\r\n this.modulesUI[i].onMouseMove(e);\r\n }\r\n \r\n }\r\n private onWheelEvent(e: WheelEvent) {\r\n this.sEn.onWheel(e);\r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onWheel(e);\r\n }\r\n for (let i = 0; i < this.modulesUI.length; i++) {\r\n this.modulesUI[i].onWheel(e);\r\n }\r\n }\r\n private onScrollStart() {\r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onScrollStart();\r\n }\r\n for (let i = 0; i < this.modulesUI.length; i++) {\r\n this.modulesUI[i].onScrollStart();\r\n }\r\n }\r\n private onScrollStop() {\r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onScrollStop();\r\n }\r\n for (let i = 0; i < this.modulesUI.length; i++) {\r\n this.modulesUI[i].onScrollStop();\r\n }\r\n }\r\n private onChangeDirection() {\r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onChangeDirection();\r\n }\r\n for (let i = 0; i < this.modulesUI.length; i++) {\r\n this.modulesUI[i].onChangeDirection();\r\n }\r\n }\r\n private onScrollEvent(e: Event) {\r\n this.sEn.onScroll(e);\r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onScroll(this.data);\r\n }\r\n for (let i = 0; i < this.modulesUI.length; i++) {\r\n this.modulesUI[i].onScroll(this.data);\r\n }\r\n this.events.emit(`lerp`, this.data.v);\r\n this.events.emit(`scroll`, this.data.c);\r\n }\r\n private onUpdateEvent() {\r\n this._virtualCursor.onUpdate();\r\n this.sEn.onUpdate();\r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onUpdate(this.data);\r\n }\r\n for (let i = 0; i < this.modulesUI.length; i++) {\r\n this.modulesUI[i].onUpdate(this.data);\r\n }\r\n }\r\n private onResizeEvent() {\r\n let newWW = 0;\r\n let newWH = 0;\r\n try {\r\n let rect = this.sEn.scrollContainer.getBoundingClientRect();\r\n newWW = rect.width;\r\n newWH = rect.height;\r\n } catch (error) {\r\n newWW = this.sEn.scrollContainer.innerWidth;\r\n newWH = this.sEn.scrollContainer.innerHeight;\r\n }\r\n if (this.data.sD == 'vertical') {\r\n this.data.bS = this.data.psH - newWH;\r\n this.data.wS = newWH;\r\n } else {\r\n this.data.bS = this.data.psW - newWW;\r\n this.data.wS = newWW;\r\n }\r\n if (this.wW != newWW || this.window.innerWidth > 1024) {\r\n this.rebuild();\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onResize();\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.onResize();\r\n });\r\n }\r\n this.wW = newWW;\r\n this.wH = newWH;\r\n }\r\n private initMutationObserver() {\r\n const observer = new MutationObserver((mutations) => {\r\n mutations.forEach((mutation) => {\r\n if (mutation.type === 'childList') {\r\n if (mutation.addedNodes.length > 0) {\r\n mutation.addedNodes.forEach((addedNode) => {\r\n if (addedNode.nodeType === Node.ELEMENT_NODE) {\r\n (addedNode as Element).querySelectorAll('[string]:not([string-inited])').forEach((element) => {\r\n this.addObject(element as any);\r\n let connectTargetId = this._attribute.process(element, 'string-copy-from');\r\n if (connectTargetId != null) {\r\n if (this.objects.has(connectTargetId)) {\r\n let connectTargetObject = this.objects.get(connectTargetId);\r\n if (connectTargetObject != null) {\r\n connectTargetObject.connects.push(element as any);\r\n }\r\n } else {\r\n this.connectQueue.push({\r\n id: connectTargetId,\r\n element,\r\n });\r\n }\r\n }\r\n });\r\n }\r\n });\r\n }\r\n if (mutation.removedNodes.length > 0) {\r\n mutation.removedNodes.forEach((removedNode) => {\r\n if (removedNode.nodeType === Node.ELEMENT_NODE) {\r\n (removedNode as Element).querySelectorAll('[string]').forEach((element) => {\r\n let removeId = element.getAttribute('string-id');\r\n let connectTargetId = this._attribute.process(element, 'string-copy-from');\r\n if (connectTargetId != null) {\r\n this.connectQueue = this.connectQueue.filter((connectQueueItem: any) => {\r\n return connectQueueItem.id != connectTargetId;\r\n });\r\n }\r\n if (removeId != null) {\r\n this.removeObject(removeId);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n if (mutation.addedNodes.length > 0 || mutation.removedNodes.length > 0) {\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onRebuild();\r\n });\r\n }\r\n }\r\n });\r\n });\r\n const config = {\r\n attributes: false,\r\n childList: true,\r\n subtree: true,\r\n };\r\n observer.observe(document.body, config);\r\n }\r\n private rebuild() {\r\n function parseTransform(el: any) {\r\n let transform = window.getComputedStyle(el).transform;\r\n return transform\r\n .split(/\\(|,|\\)/)\r\n .slice(1, -1)\r\n .map(function (v) {\r\n return parseFloat(v);\r\n });\r\n }\r\n\r\n try {\r\n let transformContainer: any = parseTransform(this.data.sC);\r\n this.data.scsW = transformContainer[0];\r\n this.data.scsH = transformContainer[3];\r\n } catch (error) {\r\n this.data.scsW = 1;\r\n this.data.scsH = 1;\r\n }\r\n\r\n try {\r\n let rect = this.data.sC.getBoundingClientRect();\r\n this.wW = rect.width / this.data.scsW;\r\n this.wH = rect.height / this.data.scsH;\r\n } catch (error) {\r\n this.wW = this.data.sC.innerWidth;\r\n this.wH = this.data.sC.innerHeight;\r\n }\r\n\r\n if (this.wW < 1024 || isTouchDevice()) {\r\n this.scrollMode = this.mMode;\r\n } else {\r\n this.scrollMode = this.dMode;\r\n }\r\n\r\n let b = document.body,\r\n h = document.documentElement;\r\n\r\n this.data.psW = this.data.sC.scrollWidth;\r\n this.data.psH = this.data.sC.scrollHeight;\r\n if (this.data.psW == undefined) {\r\n this.data.psW = Math.max(b.scrollWidth, b.offsetWidth, h.clientWidth, h.scrollWidth, h.offsetWidth);\r\n }\r\n if (this.data.psH == undefined) {\r\n this.data.psH = Math.max(b.scrollHeight, b.offsetHeight, h.clientHeight, h.scrollHeight, h.offsetHeight);\r\n }\r\n\r\n if (this.data.sD == 'vertical') {\r\n this.data.bS = this.data.psH - this.wH;\r\n this.data.wS = this.wH;\r\n } else {\r\n this.data.bS = this.data.psW - this.wW;\r\n this.data.wS = this.wW;\r\n }\r\n\r\n this.data.hnwS = this.data.wS * -0.5;\r\n\r\n this.updateModeParams();\r\n }\r\n}\r\n\r\n\r\n \r\nexport {\r\n StringTune as default, StringCursor, StringDelayLerpTracker, StringFPSTracker, StringGlide, StringLazy, StringLerp, StringLerpTracker, StringLoading, StringMagnetic, StringParallax, StringPositionTracker, StringProgress, StringResponsive, StringScrollbar, StringSplit, StringTune as StringTune, StringVideoAutoplay\r\n};\r\n\r\n"],"names":["root","factory","exports","module","define","amd","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","StringModule","type","_type","constructor","visitor","settings","objectsMap","Map","objects","Array","htmlKey","data","lerp","attribute","boundingClientRect","position","virtualCursor","events","loop","onScrollStart","onScrollStop","onChangeDirection","destructor","onChangeScrollParams","tryConnect","object","stringModuleKeys","process","el","split","forEach","connect","onConnect","addObject","id","set","from","map","name","removeObject","delete","onStart","onUpdate","onResize","onRebuild","onScroll","onMouseMove","e","onWheel","onChangeDevice","onChangeScrollDirection","onMutationObserver","added","removed","StringLazy","super","document","querySelectorAll","element","getImageSize","getAttribute","classList","add","src","addEventListener","url","Promise","resolve","reject","xhr","XMLHttpRequest","open","responseType","onload","status","buffer","response","blob","Blob","img","Image","style","aspectRatio","width","height","URL","revokeObjectURL","onerror","Error","createObjectURL","setRequestHeader","send","StringLoading","loadingTimeout","timeout","setTimeout","documentElement","StringVideoAutoplay","videoElement","videoSrc","started","tagName","toLowerCase","setAttribute","muted","tryPlay","once","load","console","warn","play","catch","err","then","StringCursor","lerpFactor","oldX","oldY","enterObjectsMap","enterObjects","cursor","querySelector","smoothX","smoothY","cursorData","lerpX","lerpY","x","y","emit","setProperty","isMouseMove","rect","getBoundingClientRect","offsetX","calculateOffset","left","offsetY","top","mouseX","mouseY","setMouseCoordinates","halfWidth","halfHeight","onMouseEnterEventBind","onMouseMoveEventBind","onMouseLeaveEventBind","cursorTarget","event","removeEventListener","remove","onEnter","onLeave","selfDisable","toFixed","connects","mousePos","size","StringMagnetic","strength","radius","elementCenterX","elementCenterY","distX","clientX","distY","clientY","distance","Math","sqrt","magneticTargetX","magneticTargetY","isMagneting","magneticX","magneticY","toString","StringLerpCalc","start","end","amt","StringVirtualCursor","_lF","_x","_y","_lerpX","_lerpY","targetX","targetY","floor","tS","bS","lS","rS","StringObject","oStart","oEnd","startPos","endPos","differencePos","factor","inviewTop","inviewBottom","sElPos","sScrPos","eElPos","eScrPos","glide","weight","parallaxPositionStart","parallaxPositionEnd","progress","showObserver","progressObserver","inviewObserver","repeat","active","abs","modules","type3D","material3D","color3D","model3D","animations3D","enter","leave","show","hide","push","calculatePositions","windowSize","DeviceType","StringResponsiveQueryDevice","config","min","undefined","max","enable","setEnable","setRange","mediaQuery","query","StringResponsive","queries","Mobile","Tablet","Laptop","Desktop","matchMedias","window","matchMedia","mobile","tablet","laptop","desktop","updateElements","isMobileMedia","matches","isTabletMedia","isLaptopMedia","isDesktopMedia","showElement","hasAttribute","display","StringScrollbarHorizontal","scrollbar","thumb","isDragging","startY","startScrollPosition","contentSize","psH","visibleSize","wS","thumbSize","updateThumb","contentHeight","visibleHeight","c","mouseDownEvent","mouseMoveEvent","deltaY","newScrollPosition","t","scrollTo","StringScrollbarVertical","startCoordinate","psW","contentWidth","visibleWidth","deltaX","StringScrollbar","scrollMode","mouseUpEventBind","mouseUpEvent","bind","mouseDownEventBind","mouseMoveEventBind","createScrollbar","addCustomStyles","showScrollbar","hideScrollbar","scrollbarState","sM","sD","scrollbarStateVertical","scrollbarStateHorizontal","createElement","textContent","head","appendChild","body","userSelect","scrollTimeout","clearTimeout","StringGlide","previousLerp","displacement","acceleration","velocityMultiplier","isInitialScroll","baseVelocityMultiplier","reducedVelocityMultiplier","negativeVelocityMultiplier","ACCELERATION_STEP","MIN_DISPLACEMENT","MAX_DISPLACEMENT","MIN_VELOCITY","MAX_VELOCITY","maxDisplacementValue","setupItem","transformCompute","dV","transform","onUpdateDesktopEvent","i","length","onUpdateMobileEvent","onUpdateEvent","calcExpanderFactor","isDirectionUp","isConditionMet","v","innerWidth","resetState","sDB","StringLerp","oldLerp","StringParallax","setupParallax","onScrollDesktopEvent","onScrollMobileEvent","onScrollEvent","parallaxPosition","StringProgress","setUpObject","applyProgress","StringScroll","isProg","isParallaxEnabled","vT","onCalcUpdate","scrollContainer","_scrollDirection","d","scrollDirection","StringScrollDefault","delta","speedAccelerate","scrollTop","plusDelta","StringScrollDisable","preventDefault","CLASS_NAMES","StringScrollSmooth","isScrollbarManipulation","isBottomScrollDirection","velocityThreshold","updateScrollDirection","newDirection","isForward","toggle","clamp","stopScroll","speed","absVelocity","ceil","StringTypeSettings","sC","sA","StringSplit","splitOptions","parseSplitOptions","innerHTML","html","contains","attributeValue","options","line","word","char","charLine","charWord","wordLine","part","match","prefix","option","params","parseParam","result","align","param","startsWith","random","parseInt","includes","elementRoot","text","decodeHtmlEntity","words","globalCharIndex","globalWordIndex","totalChars","replace","tempSpan","compStyles","getComputedStyle","fontFamily","fontSize","letterSpacing","lineHeight","fontWeight","virtualLines","virtualLine","currentLineWidth","wordIndex","wordWidth","offsetWidth","virtualWordSpan","chars","charIndex","virtualCharSpan","hasLineOptions","addedWordsCount","appendVirtualLineToDOM","wordSpan","charSpan","applyOptions","removeChild","lineIndex","totalWords","lineSpan","lineCharIndex","totalLineChars","span","optionArray","globalIndex","localIndex","parentLength","optionIndex","index","calculateIndex","variableName","generateVariableName","String","createSpaceSpan","spaceSpan","str","StringFPS","isAnimationStarted","requestAnimationId","onFrame","now","_now","fps","fpsInterval","Date","animate","stop","cancelAnimationFrame","requestAnimationFrame","elapsed","StringDelayLerpTracker","canvasHeight","canvas","context","getContext","innerHeight","bottom","backgroundColor","border","zIndex","positionHistory","maxHistory","currentPosition","targetPosition","shift","drawGraph","ctx","clearRect","strokeStyle","lineWidth","beginPath","pos","moveTo","lineTo","stroke","setTargetPosition","StringFPSTracker","callCount","createDisplayElement","displayElement","right","intervalId","setInterval","clearInterval","StringLerpTracker","StringPositionTracker","dirSymbol","StringAttribute","n","StringBoundingClientRect","StringData","three","cF","hnwS","scsW","scsH","StringEvent","eventsByKey","on","has","updateAllEvents","off","ea","filter","h","all","values","listOfEvents","StringParser","parseSingle","wH","baseRem","pV","isNegative","slice","offsetHeight","endsWith","parseFloat","StringPosition","container","br","error","er","transformArr","parseTransform","det","nullifyTransforms","isTouchDevice","navigator","maxTouchPoints","StringTune","sEn","sEnSmooth","sEnDefault","sEnDisable","rebuild","initObjects","scrollPosition","isUpdateEvents","onScrollBind","onResizeBind","scrollMobileMode","mobileMode","mMode","updateModeParams","scrollDesktopMode","desktopMode","dMode","overflow","modulesUI","wW","_virtualCursor","_lerp","_attribute","_boundingClientRect","_position","connectQueue","globalId","_parser","defaultSettings","stringOffsetStart","stringOffsetEnd","stringEnterEl","stringExitEl","stringEnterVp","stringExitVp","stringInviewTop","stringInviewBottom","stringKey","stringStrength","stringRadius","stringLerp","stringParallaxBias","stringParallax","onWheelBind","onWheelEvent","onResizeEvent","onMouseMoveBind","onMouseMoveEvent","getInstance","use","objectClass","passive","ResizeObserver","entries","setupObject","observe","initMutationObserver","connectTargetId","connectTargetObject","destroy","setupSettings","disconnect","r","rW","rH","startElementPosition","startSourcePosition","endElementPosition","endSourcePosition","targetQuery","materialAttr","materialType","color","partAnimation","matchAnimation","startValues","endValues","mesh","rotation","observerStart","observerEnd","optionsProgress","optionsInview","connectItems","connectQueueItem","connectItem","rootMargin","threshold","obProgress","IntersectionObserver","es","isIntersecting","obIntersection","obInview","isInit","removedObject","removeAttribute","newWW","newWH","MutationObserver","mutations","mutation","addedNodes","addedNode","nodeType","Node","ELEMENT_NODE","removedNodes","removedNode","removeId","attributes","childList","subtree","transformContainer","b","scrollWidth","scrollHeight","clientWidth","clientHeight"],"sourceRoot":""}
|